Strudelify

Stolen Moments

Nelson Oliver

KeyC minorTempo162 bpm
0:00/0:00
// Stolen Moments — Nelson Oliver
// 162 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 115 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(162/4)

// 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@2 D E F G H I J K L@6 M@2 N@3 O@5 P@6 Q@2 R S T U@2 V W X Y Z AA AB AC AD AE AF AG AH AI@2 AJ AK AL AM AN AO
  AP AQ AR AS AT@3 AU AV@2 AW@2 AX AY AZ@2 BA@2 BB@2 BC BD BE BF BG BF BH BI BJ BK@5 BL@6 BM@2 BN@2 BO@7 ~
>`.pickRestart({
  A: "~@4 [bb3,d4,eb4,g4]@17 ~@3, c3@5 ~", B: "~@4 [c4,e4,f4,a4]@19 ~, c3@19 ~@5",
  C: "[~@4 [d4,eb4,g4,bb4]@19 ~@5 [c4,f4,a4]@20, c3@23 ~, ~@14 e4@9 ~]/2", D: "~ [d4,eb4,g4,bb4]@5, c3@23 ~",
  E: "~@5 eb4@19, ~ c3@20 ~@3, ~ [c4,g4,a4]@5", F: "~ [d4,g4,bb4]@5, c3@7 ~, ~@2 eb4@9 ~",
  G: "~@4 [c4,eb4,g4,a4]@17 ~@3, c3", H: "~ g4@5, f3@7 ~, ~@3 [eb4,ab4,c5]@20 ~",
  I: "~@2 [g4,ab4,c5]@9 f3, f3@5 ~, ~ d4@5", J: "~ [d4,eb4,g4,bb4]@5, c3@7 ~",
  K: "~@4 [d4,eb4,g4,c5] ~@5 [d4,eb4,g4,c5]@9 ~@5, c3", // Cm
  L: "[~ d3@9 [eb3,db4,gb4]@11 ~ [a3,d4,g4]@9 ~@3 [f3,ab4]@12 [b3,e4]@9 ~@3 [f3,ab4]@12 [e3,g4]@12 [ab3,db4,gb4]@8 ~@3 [d3,d4,f4]@12 ~ eb3@12 [e3,g3]@11 ~ f3@4 ~@10, [g3,c4,f4]@8 ~@2 ab3@9 ~@3 e3@11 ~ [bb3,eb4]@10 ~@2 a4@12 ~@47 c4@10 ~@3 c4@9 ~@17, ~@46 gb3@11 ~ [bb3,eb4]@9 ~@3 [a3,d4]@8 ~@4 eb3@10 ~ [a3,c4]@10 ~@2 [gb3,a3]@12 ~@12 [ab3,c4]@4 ~@11]/6", // Ebm7 Dsus4 Fm E5 Fm Em Dbsus4 Dm …
  M: "[[g3,bb4]@21 ~ f3@26, [d4,eb4]@19 ~@2 [eb4,g4]@27, ~@11 b3@11 ~@2]/2", // Gm Ebmaj7 Eb
  N: "[g3@18 ~@3 g3@2 ~@5 [d4,g4,c5]@3 ~@3 [c4,bb4]@12 ~@6 [eb4,g4] ~@5 [d4,eb4,g4]@11 ab3@2 ~, eb3@23 ~, ~@24 a3@19 ~@5 bb3@21 ~@3, ~@33 f4@12 ~@7 d4@2 ~@18]/3", // Csus2 C7 Eb Ebmaj7
  O: "[~@3 eb4 [d4,g4,c5] ~@5 a3@2 [d4,eb4,g4] ~@3 a3@2 [eb4,ab4,db5]@4 bb4 ~ g4@20 ~ db4@2 ~ d4@13 ~@3 g4@2 ~@2 [ab3,d4,g4,c5]@3 ~ [eb3,a3]@3 ~@2 a3@16 ab3@2 ~ a3@7 ~@3 a3 ~ [d4,g4,c5]@3 ~ a3@2 [g4,c5]@4 a3 ~, a3@8 ~@4 c5@2 ~@4 ab3@42 ~@3 [ab3,d4,gb4,c5]@3 ~@11 eb3@40 ~@3, ~@12 c5@13 ~@35, ~@24 d4@17 ~@26 gb4@2 ~@2 [d4,g4,c5]@4 ~@2 [d4,g4,c5]@29 ~@8 d4@2 ~@4]/5", // Csus2 Ebmaj7 Dbsus2 Abmaj7 Ebdim Csus2 C5 Ab7 …
  P: "[[d3,c4]@6 ~@4 [eb3,ab3,db4,gb4]@10 ~@2 [a3,d4,g4]@8 ~@4 f3@9 ~@3 [gb3,b3,e4]@9 ~@3 [f3,bb3,eb4]@9 ~@3 [e2,a3,d4]@9 ~@3 [db4,gb4]@8 ~@4 [e4,f4]@12 [gb3,a3]@11 ~ [e3,g4]@11 [ab3,d4]@3 ~@12, f4@4 ~@18 e3@11 ab4@11 ~@50 c4@39 ~@11, ~@33 [bb3,eb4]@9 ~@4 [gb2,a4]@11 ~ [f2,ab4]@11 ~ [e3,g4]@12 [eb2,ab3]@6 ~@6 [d3,a3]@10 ~@2 eb3@9 ~@3 g3@13 ~@13]/6", // D7 Ebm7 Dsus4 Esus2 Ebsus2 Dsus2 Gb5 Fmaj7 …
  Q: "[[g3,c4,d4,eb4,g4,bb4]@20 ~@2 [f3,b3,eb4]@23 ~@3, ~@21 ab4@22 ~@5]/2", R: "~@11 [eb3,a3] ~ [d4,gb4,g4,c5]@3 ~@8",
  S: "~@11 [eb3,a3] [g4,c5]@2 ~@4 [e3,bb3,e4,ab4,c5,eb5]@3 ~@3, ~@12 d4 ~@11", // Ebdim C5 Ab
  T: "[eb3,a3,d4,g4,c5]@2 ~@6 [d4,g4,g5] ~@3, ~@16 [eb3,a3] ~@7", // Am7b5 G5 Ebdim
  U: "[~@14 [ab3,db4,gb4,bb4] ~@3 [db4,gb4]@3 ~@3 [c4,eb4,g4]@18 ~@6, ~@9 ab3@13 ~@2, ~@18 bb4@5 ~@25]/2", // Gb Gb5 Cm
  V: "~@3 [ab4,c5,g5] [ab3,e4] ~@5 [ab3,eb4,ab4,c5,g5] ~@5 [ab3,d4,ab4]@4 ~@2 ab3 ~, ~@8 [c5,g5]@3 ~", // Abmaj7 Dbm Abmaj7 Abdim C5
  W: "[eb3,a3,d4,g4,d5]@5 ~ [eb3,a3,d4,bb4,eb5]@3 ~@3 [eb3,a3,d4,g4,c5]@4 ~@8", // Ebmaj7 Am7b5
  X: "~@4 [g4,c5]@4 [e3,bb3,eb4,ab4,db5]@3 ~ [eb3,a3,d4,g4,c5]@7 ~@3 eb3@2, ~@4 [a3,d4]@2 ~@16 a3 ~, ~@4 eb3 ~@19", // C5 Bbm7b5 Am7b5 D5
  Y: "[gb3,c4,e4,ab4,c5]@4 ~@12 [gb3,c4,ab4,c5,eb5] ~@4 [gb3,ab4,c5,eb5]@2 ~, ~@21 c4 ~@2", // Caug Ab7
  Z: "~ f3@4 ~@11 [f3,b3,e4,ab4,db5,e5]@3 ~@2 [f3,b3,e4,e5] ~@2, [b3,e4,ab4,db5,e5]@4 ~@17 [ab4,db5]@2 ~", // Db7 E Dbm7 Db5
  AA: "~ [eb3,a3]@4 ~@2 [eb3,a3]@2 ~@7 [gb3,c4,f4,bb4,eb5,ab5]@2 ~@6, [d4,a4,d5,gb5]@5 ~ [a4,d5,gb5]@3 ~@15, ~@7 d4@4 ~@13", // Ebdim Fm7 D
  AB: "~@4 [gb3,c4,f4,bb4,eb5,ab5] ~@4 [c4,f4,bb4,eb5,ab5] gb3 ~ ab5 [f3,b3]@4 ~ [f3,b3,e4,bb4,eb5,g5,bb5]@3 ~@3, ~@3 [e4,bb4,eb5,bb5] ~@2", // Fm7 Fdim Eb
  AC: "[eb3,a3,d4,a4,d5,g5,b5]@2 ~@7 [eb3,a3,d4,a4,d5,g5] ~@2", // G Ebmaj7
  AD: "~@14 [f3,b3,f4,bb4,d5] ~@3 [f3,b3,f4,bb4,d5]@2 ~ bb4 [f3,b3,f4,d5] ~", // Bb Bdim
  AE: "[eb3,a3,gb4,d5]@5 ~ [a3,gb4,d5]@2 ~@16, ~@6 eb3 ~@17", // D
  AF: "~@2 [eb3,a3,d4,a4,d5,gb5,a5] ~@3 [eb3,a3,d4,a4,d5,gb5,a5]@2 ~@2 [eb3,a3,d4,a4,d5,gb5,a5] ~@2 eb3 [a3,d4,a4,d5,gb5,a5] ~@4 [ab3,db4,gb4,db5,gb5]@4 ~, ~@18 bb5@5 ~", // D Dbsus4
  AG: "~ [ab3,d4,g4]@3 ~@12 [ab3,d4,g4] ~ [g5,c6,g6]@2 ~@4, [c5,f5]@3 ~@15 eb6 ~@5", // G C5 F5
  AH: "~@10 [ab3,d4,g4] ~@2 gb5@2 ~ [ab3,d4,g4] ~ [f5,c6]@2 ~@4, ~@6 [f5,c6] ~@5", // G F5
  AI: "[~@10 [eb3,a3,d4] ~@2 [gb4,c5]@18 ~@4 [eb3,a3,d4] [f5,gb5,bb5]@3 ~ [eb3,a3,d4] ~ [eb5,bb5]@2 ~@4, ~@2 f4@3 ~@3]/2", // D Gbdim D Gbmaj7 D Eb5
  AJ: "~@2 [e4,ab4,c5] ~ [gb3,c4] ~ [c4,e4,ab4]@3 ~ [e4,ab4,c5] ~ [gb3,c4] ab4 [c4,e4] c4 ~ [e4,ab4,c5]@3 ~ [ab4,c5] ~@2, ~@21 e4@2 ~", // Eaug Gbdim Caug Eaug Gbdim C Eaug Ab
  AK: "[f3,b3] eb4 [g4,b4] [f3,b3] ~@2 [b3,eb4,g4]@3 ~ [eb4,g4,b4] ~ [f3,b3] ~ [b3,eb4,g4] [f3,b3] ~@2 [eb4,g4,b4]@3 ~ [f3,b3,eb4,g4] ~, ~@11 b4", // Fdim G Fdim Baug Ebaug Fdim Baug Fdim …
  AL: "~ g3@4 ~@2 g3@3 ~@3 [gb3,c4]@5 ~ [gb3,c4]@5, [db4,f4,bb4]@4 ~@2 bb4@5 ~@13, ~@6 [db4,f4]@3 ~@3 [eb4,ab4]@5 ~ [eb4,ab4]@4 ~@2", // Gbdim Bbm Db Ab5
  AM: "~ [b3,f4,db5]@4 ~ [b3,f4,ab4,db5]@3 ~@7 [f3,b3,e4,ab4,d5,g5] ~@3 [b3,e4,ab4,d5] f3 ~@2, ab4@4 ~@16 g5@3 ~", // Db7 E7
  AN: "[a3,d4,eb4,g4,d5,g5,c6]@5 ~ [a3,eb4,g4,d5,g5,c6] ~@3 [g3,c4,f4,c5] ~@2 [a3,d4,g4,d5,g5,c6]@4 ~@7, ~@3 d4 ~ [f5,bb5] ~@6", // Am7b5 Csus4 Am7 Bb5
  AO: "~@6 [c4,f4,bb4,eb5] f4 c4@2 [a3,d4,g4,c5,f5]@2 ~@12, ~@2 g3 ~@5, ~@7 [bb4,eb5]@2 ~@15", // Cm7 Dm7 Eb5
  AP: "[g3,c4,f4,bb4] ~ [g3,c4,bb4] ~ f3@3 ~@2 [g3,c4,f4,bb4] [g3,c4,f4] ~ [f3,bb3,eb4,ab4]@4 ~ [g3,c4,f4,bb4] ~ [g3,c4,f4,bb4] ~ f3@3, ~ f4 ~@3 bb4 ~@6, ~@3 [bb3,eb4,ab4]@4 ~@13 [bb3,eb4,ab4]@4", // Gm7 C7 Gm7 Csus4 Fm7 Gm7 Ebsus4
  AQ: "~@3 [g3,c4,f4] [g3,bb3,eb4,f4] ~ [gb3,b3,e4]@16 a4@2, ~@3 bb4@2 ~ a4@13 ~@5, ~@6 ab4 ~@17", // Csus4 Eb Esus2
  AR: "~ g3@2 ~@7 f4@2 ~ g4@3 ~@5 [g3,ab3] ~@2, [ab3,f4]@3 ~@18 g4@2 ~", // Abmaj7 Db
  AS: "ab4@2 ~@2 ab4@2 e4@2 ~@2 g4@2 f4@3 ~ [g3,ab3] ~ c4@3 ~@3", // Abmaj7
  AT: "[~@16 [eb4,gb4]@2 d4@2 c4 ~ [eb4,gb4] ~ [eb4,gb4]@2 d4@2 c4@2 [eb4,gb4] ~ [eb4,gb4]@2 d4@2 c4@2 [eb4,gb4] ~ [eb4,gb4]@2 d4@2 c4 ~ [eb4,gb4] ~ [eb4,gb4]@2 d4@2 c4 ~ [e4,ab4] ~ [e4,ab4]@2 d4@2 c4 ~ [e4,ab4] ~ [e4,ab4]@2 d4 ~ c4 ~ [g4,b4] ~, ~@6 [d3,eb3,gb3,a3]@44 ~@4 gb3@17 ~]/3", // Ebm E G D
  AU: "[g4,b4]@2 f4 ~ eb4 ~ [bb4,d5] ~@3 ab4@2 g4 ~ db5 f5 ~@2 c5 ~ b4 ~ d5@2, ab3@7 ~ [bb4,d5]@2 ~@7 [db5,f5]@3 ~@4, ~@9 b3@9 ~ d4@2 ~@3", // G Bb Db
  AV: "[~ [eb3,a3]@6 c5@3 ~@6 b4 e5 ~ gb5 a5 ab5@2 ~ gb5@2 f5 ~ d5 ~ db5 ~@2 db5@2 ~ bb4 a4@2 ab4 ~@2 gb4 ~ g4 ~ d5 ~, c5@4 ~@9 g3@7 ~@4 [gb3,c4,f4]@10 ~@2 [b3,e4]@8 ~@4, ~ d4@9 ~@2 [db4,gb4]@8 ~@3 g5@2 ~@2 eb5@2 ~@2 gb5@2 ~@8 g4@2 ~@2 c5@2 ~, ~@32 eb5@2 ~ b4@2 f3@8 ~@3]/2", // Ebdim F E5 Gb5
  AW: "[[eb3,a3,d4]@3 eb5 ~@2 c5@2 ~ [g3,c4,f4] ~@2 [f3,bb3,eb4] ~ eb5 ~@3 [eb3,a3,d4] ~@2 [a3,d4,g4] ~@5 [g3,c4,f4] ~@2 [g3,c4,f4]@3 eb5 c5@2 ~ c5@2 ~ [eb3,a3,d4] ~ g4@2 ~ bb4 ~@2, eb5 ~@16 c5@14 ~@17]/2", // D Csus4 Ebsus2 D Dsus4 Csus4 D
  AX: "[g3,c4,f4]@3 g4 ~ bb4 c5 eb5 ~ bb4 ~ c5 eb5 ~ f5 c5 ~ eb5 f5 g5 ~ f5 ~ g5", // Csus4
  AY: "bb5 ~@2 [bb3,eb4,ab4]@2 ~ [ab3,db4,gb4]@2 ~@2 gb6 f6 eb6 ~@2 db6@2 c6 [db4,gb4,bb5]@2 ~ g5 ~ f5, ~@4 bb6 ~@5 ab5 ~, ~@9 ab6@2 ~@3 d6@2 ~@2 ab3 ~@5", // Ebsus4 Dbsus4 Gb
  AZ: "[~ g3@2 ab5@2 ~ f5@2 ~ [g3,ab3,c4] ~@2 [g3,ab3,db4]@3 ~ [g3,ab3,d4]@7 ~ bb3 ~@3 eb6@2 c6 ab5 ~@2 c6 ~ eb6 ~@3 c6 ~ bb3 ab5@2 g5 f5 ~, [ab3,c4,g5]@3 ~@20 d4@4 g6@2 ~@4 f6@2 ~@2 g3@7 ~@4, ~@24 [ab3,g4]@5 ~@7 [c4,f4]@7 ~@5, ~@19 d6 ~@4, ~@39 db6@2 ~ bb5@2 ~@4]/2", // Abmaj7 Db G Abmaj7 F5
  BA: "[[bb3,gb5] ~ g5 b5@2 ~ d6 ~@4 [eb3,d4] g3 ~ b5 g5 eb5 ~@3 [ab3,db4,gb4]@3 ~ g3@2 ~@2 f5 ~ eb5 d5@2 db5 c5 ~ bb4 ~@2 c5@2 db5 d5 ~@2 c5 ~ d5, [eb3,g3,d4]@10 ~@3 c6@2 ~@3 bb5@5 [c4,f4]@3 [ab5,bb5]@2 ~@20, ~@27 gb5@2 ~@9 b4@2 ~@4 g4@2 ~@2]/2", // Ebm Ebmaj7 Dbsus4 Ebmaj7 F5 Absus2
  BB: "[eb5@3 c5@2 ~ ab4@3 ~@11 c5@2 ~@3 e5@3 db5@2 ~ a4@2 ~@13 f5 ~, gb3@23 eb5@2 f3@20 ~@3, c4@13 ~@5 c4@6 b3@20 ~@4]/2",
  BC: "~@4 c5@2 eb5@2 ~@5 f5!2 eb5 c5 ~ [bb4,eb5]@2 ~@2 [g4,c5]@2, [eb3,d4]@6 ~@6 gb3@11 ~, g5@2 ~@8 f5@2 ~ gb5@2 ~@9, ~ a3@5 ~@5 [c4,f4]@11 ~@2", // Eb5 C5 Ebmaj7 F5
  BD: "~ [gb4,c5]@3 [f3,b3] ~ f4@2 ~@2 eb4@2 bb3 b3@3 ~@3 d4@2 ~ eb4@2, ~@8 c4 ~@3, ~@17 f3@7, ~@17 g2@4 ~@3", // Gbdim Fdim
  BE: "~ c3@4 [bb3,d4,eb4,g4]@17 g2@2", BF: "~@4 [c4,e4,f4,a4]@17 ~ g2@2, c3@11 ~",
  BG: "~@4 [d4,eb4,g4,bb4]@17 ~ g2@2, c3@7 ~", BH: "~@4 [bb3,d4,eb4,g4]@17 g2@3, c3@3 ~",
  BI: "~@2 [a3,c4,eb4,g4]@9 g2, c3@7 ~", BJ: "~@2 [bb3,eb4,g4]@9 g2, c3@7 ~",
  BK: "[~@4 g4@16 e3@3 ~@5 eb4@16 db4@4 d4@9 eb4@2 ~ f4@9 ~@23 [ab3,ab4]@4 [a3,a4]@24, c3@21 ~@7 c4@14 ~@27 gb4@4 ~@4 c4@20 ~@23, ~@4 [a3,eb4]@18 ~ f3@49 g4@20 ~@28, ~@28 ab3@12 ~@31 eb3@47 ~@2]/5", // Ab A Adim
  BL: "[~ d3@8 ~ [eb3,ab3,db4,gb4]@12 [a3,d4]@12 [bb3,ab4]@11 ~ [b3,a4]@12 [f3,bb3,eb4,ab4]@12 [a3,d4,g4]@11 ~ [eb3,ab3,db4]@5 ~@7 f3@11 ~ eb3@10 ~@2 g3@12 [f3,ab3]@4 ~@10, [g3,c4,f4]@10 ~@12 [e3,g4]@11 ~ [f3,eb4]@10 ~ e4@13 ~@23 gb4@5 ~@7 c4@36 ~@15, ~@46 gb3@11 ~@13 e3@9 ~@14 a3@10 ~@2 gb3@11 ~ e3@11 ~@16, ~@47 d3@4 ~@21]/6", // Ebm7 D5 Bb7 B7 Fm7 Dsus4 Dbsus2 Fm …
  BM: "[[g3,d4,bb4]@21 ~@18 g4@2 ~ a4@3 g4@2 ~, eb4@19 ~@5, ~@21 g4@16 ~@11, ~@11 [f3,b3]@13]/2", // Gm Fdim
  BN: "[bb4@6 a4@5 ~@2 g4@6 ~@6 g4@16 c4@7, c3@20 ~ g2@27, eb4@18 ~@5 b3@14 ~@11, d4@8 ~@3 f3@13, ~@24 eb4@17 ~@7]/2",
  BO: "[eb4@7 ~@56 g6@25 ~@40 [f5,c6]@22 ~@18, ~@7 g4@12 bb3@2 c4@7 g4@13 bb5@4 f5@43 c2@11 eb4@11 eb5@4 d5@5 g5@31 ~@18, ~@14 f2@18 bb4@16 bb5@39 ~@2 g2@7 bb3@11 bb4@43 ~@18, ~@15 c3@20 eb5@17 eb6@35 ~@5 eb3@9 g4@48 ~@19, ~@17 g3@7 f4@14 g5@18 f6@31 ~@7 f3@10 f4@46 ~@18]/7", // F5
})).s("gm_piano").gain(0.4).pan(0.3)

// chords · piano
const piano_2 = note("<~@5 A B C B D E A B F G H I J K L M ~@94>".pickRestart({
  A: "[c3,bb3,eb4,g4]", B: "[c3,a3,c4,eb4,g4]", C: "[c3,bb3,c4,eb4,g4]", D: "[f3,c4,eb4,ab4]", E: "[f3,c4,d4,f4,ab4]",
  F: "[d3,g3,c4,f4] [eb3,ab3,db4,gb4]", G: "[e3,a3,d4,g4] [f3,bb3,eb4,ab4]", H: "[gb3,b3,e4,a4] [f3,bb3,eb4,ab4]",
  I: "[e3,a3,d4,g4] [eb3,ab3,db4,gb4]", J: "[d3,g3,c4,f4] [eb3,a3,c4,eb4]", K: "[e3,g3,c4,e4] [f3,ab3,c4,eb4]",
  L: "[c3,g3,c4,eb4]", M: "[g2,f3,b3,eb4]",
})).s("gm_piano").gain(0.4).pan(0.3)

// bass · acoustic bass
const bass = note(`<
  A B@2 C D C E D F G H C I J@6 K L C@3 M N O C P Q@6 R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP
  AQ T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ B@2 C D C E D F G H C I J@6 K L ~@2 AR@7 ~
>`.pickRestart({
  A: "~@11 g2", B: "c2@11 g2", C: "c2@21 ~ g1@2", D: "c2@10 ~ g1", E: "c2@19 ~@3 g1@2", F: "c2@19 ~@3 c2@2",
  G: "f1@21 ~ c2@2", H: "f1@11 g1", I: "c2@23 ~",
  J: "[d2@8 ~@2 eb2@11 ~ e2@10 ~@2 f2@11 ~ gb2@11 ~ f2@11 ~ e2@11 ~ eb2@10 ~@2 d2@12 eb2@11 ~ e2@11 ~ f2@4 ~@10]/6",
  K: "c2", L: "g1", M: "c2@9 ~@2 c2", N: "f1@11 c2", O: "f1@10 gb1 g1", P: "c2@16 g2@2 c3@3 ~ db3@2",
  Q: "[d3@9 ~ eb3@10 ~@2 e3@11 ~ f3@11 ~ gb3@12 f3@12 e3@12 eb3@7 ~@5 d2@12 eb2@12 e2@11 ~ f2@2 ~@12]/6", R: "c2@11 g1",
  S: "g2@3 ~ g1@2 f2@6 eb2@6 db2@4 ~@2", T: "c2@6 bb1@6 a1@5 ~ ab1@6", U: "g1@3 ~ g1@2 ab1@6 a1@6 b1@6",
  V: "c2 e1 f1 gb1", W: "g1 a1 bb1 ab1", X: "f1@6 ab1@6 bb1@3 ~ bb1@2 b1@5 ~", Y: "c2@3 d2@3 eb2@3 b1@2 d2",
  Z: "c2@3 ~ c2@2 eb2@5 ~ f2@6 gb2@6", AA: "g2 f2 eb2 db2", AB: "d2@6 e2@5 ~ f2@4 d2@2 gb2@6",
  AC: "g2@3 g1@3 b1@3 d2@2 b1", AD: "c2@5 ~ c2@6 eb2@5 ~ eb2@6", AE: "ab1@4 ~@2 ab1@6 g1@6 b1@5 ~",
  AF: "c2@3 c3@2 c2 b2@3 bb2@3", AG: "a2@6 ab2@6 g2@3 ~ g2@2 b1@6", AH: "c2@6 e1@6 f1@5 ~ gb1@5 ~",
  AI: "g1 ab1 bb1 gb1", AJ: "f1@3 f2@2 f1 e2@3 eb2@3", AK: "c2 f2 ab2 db2", AL: "c2 g2 d2 g2",
  AM: "eb2@6 f2@6 gb2@4 g2@2 c2@3 ~ db2@2", AN: "d2 db2 d2 ab1", AO: "g1@3 g2@3 gb2@3 f2@2 e2",
  AP: "eb2@5 ~ eb2@6 ab2@4 ~@2 ab2@6", AQ: "db2@4 ~@2 db2@6 g1@6 b1@5 ~", AR: "[~@17 f1@75 ~@2 c2@55 ~@19]/7",
})).s("gm_acoustic_bass").gain(0.35)

// other · vibraphone
const vibraphone = note("<~@5 A B A C D E F G H@6 I@2 ~@94>".pickRestart({
  A: "~ g4 bb4 d5@2 c5@2 bb4", B: "c5@3 a4@6 f4 c4@2 eb4@3 g4@9", C: "c5 a4@3 g4@4", D: "~ ab4 c5 eb5 ~ d5@2 c5",
  E: "d5 bb4@3 f4 ab4@3", F: "~ eb4 g4 bb4 ~ a4@2 g4", G: "a4 f4@3 eb4@2 g4 bb4",
  H: "[c5@3 eb5@3 c5@3 c5@6 eb5@3 c5@3 c5@6 eb5@3 c5@3 c5@6 eb5@3 c5@3 c5@6 eb5@3 c5@3 c5@6 eb5@3 c5@3 c5@6 eb5@3 c5@3 c5@6 eb4@3 c4@3 c4@6 d4@3 c4@3 c4@6 d4@3 c4@3 c4@6 d4 eb4@2 c4@3 c4@6 g4@3 a4@3 g4@3]/6",
  I: "[bb4@2 a4 g4@4 g4@9]/2",
})).s("gm_vibraphone").gain(0.4).pan(0.7)

// drums · clap
const clap = s("cp").struct(`<
  ~@38 A@2 ~@2 B@2 C ~ D B E F ~ G H ~ D B E F ~ G H ~ A@2 ~@2 B@2 C ~ D B E F ~ G H ~ D B E F ~ G H ~@30
>`.pickRestart({
  A: "~@2 x", B: "~ x ~@4", C: "~ x ~@6", D: "~ x ~@2", E: "~@5 x ~@2 x ~@2 x", F: "~@11 x", G: "~@6 x ~@4 x",
  H: "~@5 x ~@10 x ~@7",
})).gain(0.35)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~ A B@2 C A B A D B A@2 E F@2 G H I J@2 K I F L D J I L E F@2 G H ~@4 I J@2 K I F L D J I L E F@2 G H M I L E F@2 G H
  I J@2 K I F L D J I L E F@2 G H M I L E F@2 G H A B@2 C A B A D B A@2 E F@2 G H I J@2 K ~@10
>`.pickRestart({
  A: "~@17 x ~@6", B: "~@3 x", C: "~@5 x ~@2", D: "~@5 x ~@3 x ~@5 x ~@8", E: "~@3 x ~@2 x!2 ~ x!2 ~", F: "~ x ~ x",
  G: "~@2 x ~@6 x ~@2", H: "~@2 x ~@3 x ~@2 x ~@2", I: "~@6 x ~@10 x ~@6", J: "~@5 x ~@12 x ~@5", K: "~@2 x ~@2 x ~@2",
  L: "~@5 x ~@11 x ~@6", M: "~@5 x!2 ~@11 x ~@5",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~@3 A ~@4 B ~ C D ~@3 A ~@3 A ~@4 B ~ C D ~@7 A ~@3 A ~@4 B ~ C D ~@4 B ~ C D ~@3 A ~@3 A ~@4 B ~ C D ~@4 B ~ C
  D ~@3 A ~@3 A ~@4 B ~ C D ~@3 A ~@10
>`.pickRestart({
  A: "~@17 x ~@6", B: "x", C: "~ x ~@2", D: "~@7 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@107 [~@3 x] [~ x] [~@9 x ~@5 x ~@6 x ~] [~@5 x] ~@2 [~ x ~] ~>").gain(0.25)

// drums · ride
const ride = s("rd").struct(`<
  ~ A@6 B A@2 C A@2 D E@4 F G ~ A@3 H A I J K E@5 F G L M@3 N O P N M Q N P R M R N S Q N P R M R N S M@3 N O P N M Q N
  P R M R N S Q N P R M R N S T A@4 U V A@4 V W E@3 X F Y ~ J@2 Z ~@7
>`.pickRestart({
  A: "~ x ~@4", B: "x ~@4 x ~@6", C: "~@2 x ~@5 x ~@2 x", D: "x ~@4 x ~@5 x", E: "~@5 x ~@5 x", F: "~@5 x ~@6",
  G: "x ~@10 x", H: "x ~ x ~@2 x ~@6", I: "x ~ x ~@2 x!2 ~ x ~@2 x", J: "x", K: "~ x ~@2", L: "~@3 x ~ x!2 ~@2 x ~ x",
  M: "x ~@2 x ~ x!2 ~@2 x ~@2", N: "x ~ x!2 ~@2 x ~@2 x ~ x", O: "x ~@2 x ~@2 x ~@2 x ~ x",
  P: "x ~@2 x ~@2 x ~ x!2 ~@2", Q: "x ~@2 x ~ x!2 ~@2 x ~ x", R: "x ~ x!2 ~@2 x ~@2 x ~@2",
  S: "x ~@2 x ~ x!2 ~ x!2 ~@2", T: "~@5 x ~@18", U: "~@2 x ~@8 x", V: "x!2 ~@4", W: "~ x ~@8 x ~@11 x ~",
  X: "~@9 x ~@12 x ~", Y: "x ~@6 x", Z: "~@3 x",
})).gain(0.25)

stack(piano, piano_2, bass, vibraphone, clap, pedal_hat, open_hat, crash, ride)