Strudelify
KeyA♭ majorTempo80 bpm
0:00/0:00
// poor edward — Tom Waitsarr. Brendan Baum
// 80 bpm, 3/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5842527; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 55 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano
const piano = note("<A B C D E@2 F@8 G@7 ~ H I J K L M N O P K I Q R S T U V W X Y Z AA@8 AB AC@3>".pickRestart({
  A: "[c3,ab5] [e3,bb3,g5] [g3,e5]", B: "g5 f5 [f3,ab3]@2 ~ c5, f2@8 c5@11 ~@5, ~@2 c4",
  C: "[bb2,eb5]@2 [f3,db4]@2 ~ bb4, ~@8 db5@11 ~@5, ~@2 bb3", D: "[f2,db5] [f3,ab3,c5] [c4,ab4]",
  E: "[c2@4 e3@4 g3@4 bb3@4 c4@11 ~@13 [f3,ab3]@8, g4@15 ~@17 c5@16, ~@4 [f2,f3] ~, ~@11 c6@5]/2", // Fm F
  F: "[~@24 [e3,bb3]@8 ~@9 [c3,ab3]@7 ~ [db3,bb3]@7 ~ [f3,c4]@7 ~@8 f3@8 bb3@8 ~@8 [e3,bb3]@8 ~@16 [f3,ab3]@8 c4@8 ~@8 [f2,f3]@8 [a3,eb4]@8 ~@8 [f3,db4]@8 [bb2,bb3]@8 ~ f5@7, ~ bb4@3 ~ ab4@2 ~ bb4@2 ~ bb4@2 ~ ab4@2 ~ a4@2 ~ bb4@2 ~@2, ~ [c2,c3]@2 ~@2 f2 g2 a2 [bb1,bb2] ~@2 [c2,c3] ~@2 [f2,f3] ~@2 [f1,f2] ~@2 [bb1,bb2] ~@2 [bb1,bb2,f4], ~@9 bb5@23 ~@9 ab5@15 ~@9 bb5@15 ~@9 bb5@15 ~@9 ab5@15 ~@9 a5@15 ~@9 bb5@15 ~@16]/8", // Edim Fm Gb F5 Edim Fm F Adim …
  G: "[[f3,db4] [bb2,bb3] ~ [e3,g3,bb3] ~@2 [e3,g3,bb3] ~@2 f3 ab3 ~ f3 bb3 ~ [f3,db4]!2 ~ [e3,bb3] g3@2, ~@2 e4@2 ~ e4@2 ~ f4@2 ~ bb4@2 ~ bb4@2 ~ g4@2 ~@2, ~@2 [c2,c3] ~@2 [c2,c3] ~@2 [f1,f2] ~@2 [bb1,bb2] ~@2 [bb1,bb2] ~@2 [c2,c3] ~@3, ~@17 e5@15 ~@9 e5@15 ~@9 f5@15 ~@9 bb5@15 ~@9 bb5@15 ~@9 g5@15 ~@16]/7", // Db Bb Edim Db Edim C F Bb …
  H: "f1@4 ab2@4 f3@4 ab3@4 ~ c6@7, ~@2 [c4,c5]", I: "~ bb2 f3 bb3 db4@2, bb4@2 ~, bb1 ~@5, ~ bb5@15 ~@8",
  J: "~@4 e3@4 g3@4 bb3@4 ~ bb5@7, bb4@2 [c4,bb4], c2 ~@5, ~ bb5@15 ~@8", // C7
  K: "~ ab2 f3 ab3 c4@2, ab4@2 ~, f1 ~@5, ~ ab5@15 ~@8",
  L: "~ a3@3 ~ a3@3 ~ eb4@3, f2@8 ~ [c3,f3]@7 eb3@8, ~ [a2,eb3]@7 a2@8 ~ [f3,a3]@7", M: "bb1 bb2 f3 bb3 db4@2",
  N: "bb1 bb2 f3 bb3 ~ bb3, ~@2 f4, ~@4 db4 ~, ~@17 f5@7", O: "~ e3 g3 bb3 c4@2, e4@2 ~, c2 ~@5, ~ e5@15 ~@8",
  P: "c2 [g2,e3] [e3,c4]", Q: "~ [f3,db4] bb3, f4@2 ~, [bb1,bb2] ~@2, ~ f5@15 ~@8",
  R: "~ e3 bb3@2 ~@2, e4@2 ~, c2 ~@5, ~ e5@15 ~@8", S: "[c4,c5] [e4,e5] [c5,c6]",
  T: "f1@3 c2@2 ab2@3 c3@3 ab3@2 c4@3 f4@5 c2@3, [c5,c6] [bb4,bb5] [c5,c6]", // C Bb C
  U: "bb1@3 f2@2 bb2@3 db3@3 f3@2 bb3@3 db4@5 db2@3, [db5,f5,bb5,db6]@23 ~", // Bbm
  V: "c2@3 g2@2 e3@3 g3@3 bb3@2 b3@3 c4@4 ~ c2@3, [db5,e5,g5,db6]@8 [c5,e5,g5,c6]@11 ~ [g4,g5]@4", // Dbdim C G
  W: "[f1,bb4,e5,g5,bb5]@3 ~@2 ab2@3 c3@3 ab3@2 c4@3 f4@5 f2@3, ~ c2 ~@6, ~@4 [ab4,ab5]@4 [ab4,c5,f5,ab5]@15 ~", // Edim Ab Fm
  X: "f1@3 eb2@2 a2@3 c3@3 a3@2 eb4@3 a4@5 a2@3, [f4,a4,c5,f5] [a4,c5,eb5,f5,a5] [f5,a5,c6,f6]", // F F7 F
  Y: "bb1@3 f2@2 db3@3 f3@3 bb3@2 c4@3 db4@5 bb1@3, [eb5,f5,a5,eb6] [db5,f5,bb5,db6] [f4,bb4,db5,f5]", // F7 Bbm
  Z: "[bb0,bb1]@3 [f1,f2]@2 [bb1,bb2]@3 [db2,db3]@3 [f2,f3]@2 [bb2,bb3]@3 [db3,db4,ab4,c5,f5,ab5]@8, [db5,f5,bb5,db6] [c5,f5,bb5,c6] ~", // Bb F Bb Db F Bb Dbmaj7 Bbm …
  AA: "[[c1,c2]@2 [g1,g2]@2 [bb1,bb2]@2 [b1,b2]@2 [c2,c3]@2 [g2,g3]@2 [bb2,bb3]@2 [b2,b3]@2 [c3,c4]@23 ~@2 c5@15 [e2,e4]@8 ~@4 c3@4 ab3@4 c4@4 f4@8 ~@8 f3@4 bb3@4 db4@8 ~@4 c3@4 f3@4 ab3@4 c4@8 ~@4 e3@4 g3@4 bb3@4 c4@20 f1@4 ab2@4 f2@4 c3@4 db3@4, [g4,bb4,e5,g5]@9 ~ [c2,c4]@4 ~@2 f4@4 ~@2 bb4@6 ab4@6 g4@9 [f4,f5]@2 ~@3, ~@16 f2 ~@5 bb2@2 ~@4 f2 ~@5 c3 ~@13, ~@65 f5@23 ~ bb5@23 ~ ab5@23 ~ g5@35 ~@20]/8", // C G Bb B C G Bb B …
  AB: "c4 ab3 c5 db5 db6 c5", AC: "[c6@4 ~@2 f6@22 [f2,f4]@23 ~@21, ~ [c5,f5]@6 ~@11, ~@5 [ab5,c6]@23 ~@44]/3",
})).s("gm_piano").gain(0.3)

stack(piano)