Strudelify

I Should Have Known Better

Diamond Jim

KeyF majorTempo78 bpm
0:00/0:00
// I Should Have Known Better — Diamond Jim
// 78 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 80 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): DISTORTION.
setcpm(78/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.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@10 A@8 B@7 C@7 D E D F D G D G H I J K L M N O P Q R S T U V W X Y Z AA AB@2 AC@4 AD@8 AE AF@5
>`.pickRestart({
  A: "[~@42 f2@48 ~ bb1@24 c2@23 ~ f2@48 bb1@24 c2@24 d2@24 c2@24 bb1@36 a1@12 f1@48 bb1@5]/8",
  B: "[~@19 c2@23 ~ f1@36 f2@12 bb1@23 ~ c2@24 d2@24 c2@24 bb1@36 bb1@2 ~ a1@3 bb1@3 b1@3 c2@46 ~@3 bb1@16 ~@2 f2@6 bb2@24 a2@4]/7",
  C: "[~@14 e2@6 a1@24 d2@23 ~ c2@23 ~ bb1@35 ~ bb1@11 ~ a2@23 ~ a2@11 ~ a2@3 b2@3 db3@6 d3@23 ~ d2@23 ~ g1@35 ~ d2@11 ~ c2@48 ~@4]/7",
  D: "f1@8 ~ f1 ~@2 f1@6 a1@6", E: "bb1@23 ~ c2@12 c2@12", F: "bb1@23 ~ c2@2 ~ c2@3 ~@3 c2@2 ~ c2@4 ~@2 c2@5 ~",
  G: "bb1@23 ~ c2@24", H: "f1", I: "bb1@24 c2@23 ~", J: "f1@36 f2@11 ~", K: "bb1 c2", L: "d2 c2", M: "bb1@3 a1",
  N: "f1@16 ~@2 f1@3 ~@3 f1@24", O: "bb1@16 ~@2 bb1@3 ~@3 c2@23 ~", P: "f1@16 ~@2 f1@3 ~@3 f1@11 ~ f2@12",
  Q: "bb1@16 ~@2 bb1@3 ~@3 c2@24", R: "d2@16 ~@2 d2@3 ~@3 c2@24",
  S: "bb1@16 ~@2 bb1@3 ~@3 bb1@12 bb1@2 ~ a1@3 bb1@3 b1@3", T: "c2@47 ~", U: "~ bb1@8 ~ f2@3 bb2@11",
  V: "~ a2@8 ~ e2@3 a1@11", W: "~@2 d2@17 ~ d2@3 ~@3 c2@22", X: "~@2 bb1@17 ~ f1@5 ~ bb1@11 ~ bb1@10",
  Y: "~@2 a2@17 ~ a2@2 ~ a2@2 ~ a2@11 ~ a2@3 b2@3 db3@4", Z: "~@2 d3@5 ~ f2@2 ~ e2@2 ~ d2@23 ~ d2@10",
  AA: "~@2 g1@35 ~ g1@10", AB: "[~ c2@27 ~@20]/2",
  AC: "[~@7 f1@16 ~@2 f1@2 ~@4 f1@12 a1@12 bb1@23 ~ c2@12 c2@12 f1@16 ~@2 f1@2 ~@4 f1@12 a1@12 bb1@23 ~ c2@12 c2@4 ~]/4",
  AD: "[~ c2@5 ~ f1@16 ~@2 f1@2 ~@4 f1@12 a1@12 bb1@23 ~ c2@11 ~ c2@11 ~ f1@16 ~@2 f1@2 ~@4 f1@12 a1@12 bb1@16 ~@2 bb1@2 ~@4 c2@12 c2@12 f1@16 ~@2 f1@2 ~@4 f1@12 a1@12 bb1@23 ~ c2@11 ~ c2@11 ~ f1@16 ~@2 f1@2 ~@4 f1@12 a1@12 bb1@16 ~@2 bb1@2 ~@4 c2@12 c2@4 ~]/8",
  AE: "~ c2@47", AF: "[~@9 bb1@48 a1@48 d2@107 ~@28]/5",
})).s("gm_fretless_bass").gain(0.56)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A@8 B@7 C@6 D@8 E@3 F G F H I G J K F L F L M N F L F L M O P Q@2 R@7 S T@2 U@2 V@2 W@2 V@2 X Y Z@5
>`.pickRestart({
  A: "[~@35 g3@6 f3@6 g3@6 f3@6 g3@6 f3@6 g3@6 f3@6 g3@6 f3@6 g3@6 f3@6 g3@5 ~ f3@6 g3@6 f3@5 ~ [bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6 d4@6 e3@6 d4@6 e3@6 [a3,db4]@5 ~ e3@6 [a3,db4]@6 e3@5 ~ a3@5 ~ a3@6 [d3,d4,f4]@6 a3@3 ~@3 [c4,e4]@5 ~ e3@6 [e3,c4,e4]@6 e3@5 ~ [bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6 [d4,e4]@6 e3@6 [d4,e4]@6 e3@6 [a3,db4,e4]@5 ~ e3@6 [a3,db4,e4]@6 e3@5 ~ [d4,f4]@6 a3@6 [f3,d4], ~@35 f2@45 ~@3 f2@48 d3@11 ~ d3@11 ~ d3@11 ~ d3@11 ~ a3@11 ~ a3@11 ~ db3@11 ~ db3@11 ~ d3@12 ~@12 c3@24 d3@11 ~ d3@11 ~ d3@11 ~ d3@11 ~ a3@2 ~@10 a3@11 ~ db3@11 ~ db3@11 ~ d3@12 ~, ~@35 c3@11 ~ c3@11 ~ c3@11 ~ c3@11 ~ c3@11 ~ c3@11 ~ c3@11 ~ c3@11 bb2@48 ~ a2@47 ~@49 bb2@46 ~@2 a2@47 ~ a3@2 ~@11]/8", // Bb A Dm C Bb Dsus2 A Dm
  B: "[~@5 a3@6 [a3,e4]@5 ~ a3@6 [f3,d4,f4]@6 a3@6 d3@6 ~@30 f3@6 bb3@5 ~ f3@6 ~@20 bb3@28 ~ c3 a3@5 c3@6 a3@6 g3@6 ~@19 g3@5 ~ bb3@6 f3@6 bb3@6 ~@12 g3@6 [c4,e4]@6 g3@6 a3@6 ~@36 g3@5 ~ bb3@6 f3@6 bb3@6 ~@12 g3@6 [c4,e4]@6 g3@5 ~ a3@5, ~@11 f3@6 ~@18 g2@48 ~@19 d4@32 ~@40 a3@6 ~@25 [f3,d4]@8 ~@28 f3@8 ~@4 f3@8 ~@4 g3@8 ~@10 d3@11 ~ d3@11 c3@24 d3@6, ~@35 bb3@18 bb3@6 d4@21 ~@9 f3@19 f3@28 ~@14 c3@11 ~@2 c3@11 ~ c3@11 bb2@24 c3@24 ~ c3@11 ~ c3@11 ~ c3@11 ~ c3@11 bb2@24 ~ [e3,c4]@11 ~ e3@11 ~@6, ~@41 d3@39 ~@3 c3@55 f2@49 ~@48 f2@49 ~@52, ~@47 f3@18 bb3@12 ~@6 bb3@12 bb3@13 ~@54 a3@5 ~@2 g3@8 ~@10 d3@11 ~ d3@11 ~ [e3,c4]@11 ~ e3@11 ~@12 a3@6 ~@6 a3@5 ~@7 a3@6 ~@25 [f3,d4]@8 ~@27]/7", // A5 Dm C Dm C Dm
  C: "[~@7 d3@6 a3@3 ~@3 [c4,e4]@5 ~ e3@5 ~ e3@5 ~ e3@5 ~ bb3@6 f3@6 bb3@6 f3@6 ~@6 f3@5 ~ a3@6 e3@6 [c3,a3]@6 c3@5 ~@31 g3@5 ~ bb3@6 f3@6 bb3@6 ~@12 g3@6 [c4,e4]@6 g3@6 a3@6 ~@36 g3@5 ~ bb3@6 f3@6 bb3@6 ~@12 g3@6 [c4,e4]@6 g3@5 ~ a3@5, ~ a3@8 ~@9 c3@24 bb2@36 a2@12 ~ f2@49 ~@17 [f3,d4]@8 ~@28 f3@6 c3@11 a3@5 ~@2 g3@6 c3@11 bb2@24 c3@24 [d3,d4]@6, ~@6 [d4,f4]@6 ~@18 [c4,e4]@6 ~@7 d4@12 d3@11 ~ [d3,bb3]@11 ~ db3@11 ~@12 a3@6 ~ g3@6 c3@11 a3@6 ~@7 d3@11 ~ d3@11 c3@24 ~ f2@49 ~@17 [f3,d4]@8 ~@27, ~@103 c3@11 a3@5 ~@2 g3@6 c3@11 bb2@24 ~ [e3,c4]@11 ~ e3@11 ~ c3@11 a3@6 ~ f3@6 c3@11 a3@6 ~@7 d3@11 ~ d3@11 ~ [e3,c4]@11 ~ e3@11 ~@6]/6", // C F C Dm D Dm C Gm …
  D: "[~@7 d3@6 a3@3 ~@3 [c4,e4]@5 ~ e3@5 ~ e3@5 ~ e3@5 ~ bb3@6 f3@6 bb3@6 f3@6 ~@6 f3@6 bb3@6 f3@6 f3@6 ~@19 [f3,bb3]@24 ~ f4@5 ~ d4@5 ~ [f4,bb4]@5 ~ d4@5 ~ f4@5 ~ d4@5 ~ [f4,bb4]@5 ~ d4@5 ~ e4@5 ~ d4@5 ~ [e4,a4]@5 ~ d4@5 ~ e4@5 ~ db4@5 ~ [e4,a4]@5 ~ db4@5 ~ f4@5 ~ d4@5 ~ [f4,a4]@5 ~ d4@5 ~ e4@5 ~ c4@5 ~ [e4,g4]@5 ~ c4@5 ~ d4@5 ~ bb3@5 ~ [d4,f4]@5 ~ bb3@5 ~ d4@5 ~ bb3@5 ~ [d4,f4]@5 ~ bb3@5 ~ e4@5 ~ d4@5 ~ [e4,a4]@5 ~ d4@5 ~ e4@5 ~ db4@5 ~ [e4,a4]@5 ~ db4@5 ~ [d4,f4]@3, ~ a3@8 ~@9 c3@30 ~@43 c3@50 ~@243, ~@6 [d4,f4]@6 ~@18 [c4,e4]@6 ~@6 bb2@48 ~@7 f3@19 ~@264 a3@4, ~@43 [d3,d4]@11 ~ d3@11 ~ [d3,bb3]@11 ~ d3@11 ~ bb3@12 bb3@13 ~@25 bb4@8 ~@16 bb4@8 ~@16 a4@8 ~@16 a4@8 ~@16 a4@8 ~@16 g4@8 ~@9 e4@5 ~@2 f4@8 ~@9 d4@5 ~@2 f4@8 ~@9 d4@5 ~ d4@5 ~ e4@6 d4@5 ~ e4@5 ~ db4@5 ~ e4@6 db4@5 ~ e4@5 ~@5, ~@109 d4@28 ~@3 d4@5 ~ f4@6 d4@5 ~ f4@5 ~ d4@5 ~ f4@6 d4@5 ~ f4@5 ~ d4@5 ~ e4@6 d4@5 ~ e4@5 ~ db4@5 ~ e4@6 db4@5 ~ e4@5 ~ d4@5 ~ f4@6 d4@5 ~ f4@5 ~ c4@5 ~ e4@6 c4@5 ~@7 bb3@5 ~ d4@6 bb3@5 ~@7 bb3@5 ~ d4@6 bb3@5 ~@8 a4@8 ~@16 a4@8 ~@19]/8", // C Bb5 A5 F Em Dm A5 Dm …
  E: "[~@3 a3@5 ~ [d4,f4]@5 ~ a3@5 ~ d4@5 ~ a3@5 ~ [d4,f4]@5 ~ a3@5 ~ bb3@5 ~ g3@5 ~ [bb3,f4]@5 ~ g3@5 ~ bb3@5 ~ g3@5 ~ [bb3,f4]@5 ~ g3@5 ~ [bb3,d4,f4]@47 ~@4, ~@2 d4@6 a3@5 ~ d4@5 ~ a3@5 ~ d4@6 a3@5 ~@7 g3@5 ~ bb3@6 g3@5 ~ bb3@5 ~ g3@5 ~ bb3@6 g3@5 ~ bb3@5 ~ c3@48 ~@4, ~@21 f4@8 ~@9 d4@5 ~@2 f4@8 ~@16 f4@8 ~@67]/3", // Dm Bb5 Bb
  F: "[a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~, f4 ~@3 f4 ~@3", // Am F Am F Am
  G: "[bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4]@3 [c4,e4]@3 [c4,e4]@6 [c4,e4]@3 [c4,e4]@3 [c4,e4]@5 ~, f4@3 ~@9 g4@4 ~@2 g4@4 ~@2", // Bb C
  H: "[bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4,g4]@6 [c4,e4]@6 [c4,e4]@3 [c4,e4]@3 [c4,e4]@5 ~, f4@6 ~@33 g4@5 ~@4", // Bb C
  I: "[a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@3 [a3,c4]@3 [a3,c4,f4]@6 [a3,c4]@2 ~ [a3,c4]@2 ~, f4 ~@3 f4 ~@3", // Am F Am F Am
  J: "[a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@3 [a3,c4]@3 [a3,c4,f4]@6 [a3,c4]@5 ~, f4 ~@3 f4 ~@3", // Am F Am F Am
  K: "[bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4]@3 [c4,e4]@3 [c4,e4]@6 [c4,e4,g4]@6 [c4,e4]@5 ~, f4@3 ~@9 g4@4 ~@8", // Bb C
  L: "[bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4]@5 ~ [c4,e4]@6 [c4,e4,g4]@6 [c4,e4]@5 ~, f4 ~@3 g4 ~@3", // Bb C
  M: "[d4,f4]@5 ~ [d4,f4]@6 [d4,f4,a4]@6 [d4,f4]@5 ~ [c4,e4]@5 ~ [c4,e4]@6 [c4,e4,g4]@6 [c4,e4]@5 ~, a4 ~@3 g4 ~@3", // Dm C
  N: "[bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [a3,db4]@3 [a3,db4]@3 [a3,db4]@5 ~, f4@3 ~@9 f4@3 ~@3 e4@4 ~@2", // Bb A
  O: "[bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~, f4 ~@3 f4 ~@3", // Bb
  P: "~@25 [g3,bb3,d4]@23, [bb3,d4] ~, c3@18 ~ c3@29, ~ f4@47", // Gm Bb
  Q: "[~@3 f4@5 ~ d4@5 ~ [f4,bb4]@5 ~ d4@5 ~ f4@5 ~ d4@5 ~ [f4,bb4]@5 ~ d4@5 ~ e4@5 ~ d4@5 ~ [e4,a4]@5 ~ d4@5 ~ e4@5 ~ db4@5 ~ [e4,a4]@5 ~ db4@2 e4, ~@2 d4@5 ~ f4@6 d4@5 ~ f4@5 ~ d4@5 ~ f4@6 d4@5 ~ f4@5 ~ d4@5 ~ e4@6 d4@5 ~ e4@5 ~ db4@5 ~ e4@6 db4@5 ~ e4@2 ~@2, ~@3 bb4@8 ~@16 bb4@8 ~@16 a4@8 ~@16 a4@8 ~@13]/2", // Bb5 A5
  R: "[db4@2 ~ f4@5 ~ d4@5 ~ [f4,a4]@5 ~ d4@2 [d4,f4]@3 ~ e4@5 ~ c4@5 ~ [e4,g4]@5 ~ c4@5 ~ d4@5 ~ bb3@5 ~ [d4,f4]@5 ~ bb3@5 ~ d4@5 ~ bb3@5 ~ [d4,f4]@5 ~ bb3@5 ~ e4@5 ~ d4@5 ~ [e4,a4]@5 ~ d4@5 ~ e4@5 ~ db4@5 ~ [e4,a4]@5 ~ db4@5 ~ d4@5 ~ a3@5 ~ [d4,f4]@5 ~ a3@5 ~ d4@5 ~ a3@5 ~ [d4,f4]@5 ~ a3@5 ~ bb3@5 ~ g3@5 ~ [bb3,f4]@5 ~ g3@5 ~ bb3@5 ~ g3@5 ~ [bb3,f4]@5 ~ g3@2 [g3,bb3]@3 ~ [bb3,d4,f4]@54 ~@39, ~@2 d4@5 ~ f4@6 d4@5 ~ f4@2 ~@4 c4@5 ~ e4@6 c4@5 ~@7 bb3@5 ~ d4@6 bb3@5 ~@7 bb3@5 ~ d4@6 bb3@5 ~@8 a4@8 ~@16 a4@8 ~@16 f4@8 ~@9 d4@5 ~@2 f4@8 ~@9 d4@5 ~@2 f4@8 ~@16 f4@8 ~@109, ~@3 a4@8 ~@16 g4@8 ~@9 e4@5 ~@2 f4@8 ~@9 d4@5 ~@2 f4@8 ~@9 d4@5 ~ d4@5 ~ e4@6 d4@5 ~ e4@5 ~ db4@5 ~ e4@6 db4@5 ~ e4@5 ~ a3@5 ~ d4@6 a3@5 ~@7 a3@5 ~ d4@6 a3@5 ~@7 g3@5 ~ bb3@6 g3@5 ~ bb3@5 ~ g3@5 ~ bb3@6 g3@5 ~ bb3@2 ~@4 c3@54 ~@40]/7", // F Dm Em Dm A5 Dm Bb5 Gm …
  S: "~@7 [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@5, ~@7 f4@6 ~@18 f4@6 ~@11", // Am F Am F
  T: "[~ [a3,c4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4]@3 [c4,e4]@3 [c4,e4]@6 [c4,e4]@3 [c4,e4]@3 [c4,e4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@5, ~@7 f4@6 ~@18 g4@8 ~@4 g4@8 ~@4 f4@6 ~@18 f4@6 ~@11]/2", // Am Bb C Am F Am F
  U: "[~ [a3,c4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4,g4]@6 [c4,e4]@6 [c4,e4]@3 [c4,e4]@3 [c4,e4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@3 [a3,c4]@3 [a3,c4,f4]@5, ~@7 f4@6 ~@33 g4@5 ~@4 f4@6 ~@18 f4@6 ~@11]/2", // Am Bb C Am F Am F
  V: "[~ [a3,c4]@2 ~ [a3,c4]@2 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4]@3 [c4,e4]@3 [c4,e4]@6 [c4,e4]@3 [c4,e4]@3 [c4,e4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@3 [a3,c4]@3 [a3,c4,f4]@5, ~@7 f4@6 ~@18 g4@8 ~@4 g4@8 ~@4 f4@6 ~@18 f4@6 ~@11]/2", // Am Bb C Am F Am F
  W: "[~ [a3,c4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [c4,e4]@3 [c4,e4]@3 [c4,e4]@6 [c4,e4,g4]@6 [c4,e4]@5 ~ [a3,c4]@5 ~ [a3,c4]@6 [a3,c4,f4]@6 [a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@3 [a3,c4]@3 [a3,c4,f4]@5, ~@7 f4@6 ~@18 g4@8 ~@16 f4@6 ~@18 f4@6 ~@11]/2", // Am Bb C Am F Am F
  X: "~ [a3,c4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@6 [bb3,d4,f4]@6 [bb3,d4]@5 ~ [bb3,d4]@3 [bb3,d4]@3 [bb3,d4]@6 [c3,bb3,d4,g4]@5, ~@7 f4@6 ~@18 g4@8 ~@9", // Am Bb Gm
  Y: "~ [c3,bb3,d4,g4]@47", // Gm
  Z: "[~@9 bb3@6 f3@5 ~@7 d4@12 d4@6 bb3@6 d4@6 e3@5 ~@64 f4@8 ~@15 a3@8 g3@9 f3@61 ~@13, ~@3 [bb2,d3]@16 a2@16 ~@45, ~@21 f3@35 ~@7 e3@29 ~@14 d3@121 ~@13, ~@21 bb3@24 ~@12 d4@18 db4@24 db4@12 ~@8 d4@12 ~@3 e4@23 ~@83, ~@69 a3@24 a3@12 ~@8 a3@27 ~ d4@26 ~@73]/5", // Bb
})).s("gm_acoustic_guitar_nylon").gain(0.26).pan(0.3)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@5 A@8 B@8 C@3 D@8 E F G F G F G F H I H I J K H I H I J L M N O P N O Q R S@2 T@8 U@5 V@5
>`.pickRestart({
  A: "[~@35 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [a3,d4]@10 ~@2 [a3,d4,e4]@10 ~@2 [a3,db4,e4]@10 ~@2 [a3,db4,e4]@10 ~@2 [a3,d4,f4]@10 ~@2 [a3,d4,f4]@10 ~@2 [a3,d4,e4]@10 ~@2 [a3,d4,f4]@10 ~@2 [f3,bb3,d4]@10 ~@2 bb3@10 ~ [f3,bb3,d4]@10 ~@3 [f3,bb3,d4]@10 ~@2 [bb3,d4,f4]@10 ~@2 [bb3,d4,f4]@10 ~@3 [bb3,d4,f4]@30 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,f4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@10 ~@2 [a3,c4,f4]@6, ~@41 e4@5 ~@49 [f3,d4]@5 ~@92]/8", // Bb D5 Asus4 A Dm Asus4 Dm Bb …
  B: "[~@6 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@10 ~@2 [a3,d4,f4]@10 ~@3 [a3,d4,f4]@10 ~ [g3,c4,e4]@10 ~@2 [g3,c4,e4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [e3,a3,db4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@10 ~@2 [a3,c4,f4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,a3,c4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@10 ~@2 [a3,d4,f4]@6]/8", // F Bb C Dm C Bb A F …
  C: "[~@7 [a3,d4,f4]@10 ~ [g3,c4,e4]@10 ~@2 [g3,c4,e4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@2 [f3,bb3,d4]@10 ~@3 [f3,bb3,d4]@49 [bb3,d4] ~@3, ~@35 f3]/3", // Dm C Bb
  D: "[~@4 [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5 ~ [a3,d4,e4]@5 ~ [a3,d4,e4]@5 ~ [a3,db4,e4]@5 ~ [a3,db4,e4]@5 ~ [a3,d4,f4]@5 ~ [a3,d4,f4]@5 ~ [g3,c4,e4]@5 ~ [g3,c4,e4]@5 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5 ~ [a3,d4,e4]@5 ~ [a3,d4,e4]@5 ~ [a3,db4,e4]@5 ~ [a3,db4,e4]@5 ~ [a3,d4,f4]@5 ~ [a3,d4,f4]@5 ~ [a3,d4,f4]@5 ~ [a3,d4,f4]@5 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4]@5 ~ [f3,bb3,d4]@12 [c3,bb3,d4,f4]@24 ~@2]/8", // Bb Asus4 A Dm C Bb Asus4 A …
  E: "[f3,a3,c4,f4]", F: "[bb2,bb3,d4,f4]@23 ~ [c3,g3,c4,e4]@23 ~", G: "[f3,a3,c4,f4]@47 ~",
  H: "[a3,c4] f3 [a3,c4] f3 [a3,c4] f3 [a3,c4] f3, f2", I: "[bb3,d4] f3 [bb3,d4] f3 [c4,e4] g3 [c4,e4] g3, bb2 c3",
  J: "[d4,f4] a3 [d4,f4] a3 [c4,e4] g3 [c4,e4] g3, d3 c3", // Dm C
  K: "[bb3,d4] f3 [bb3,d4] f3 [bb3,d4] f3 [a3,db4] e3, bb2@3 a2", // Bb A
  L: "[bb3,d4] f3 [bb3,d4] f3 [bb3,d4] f3 [bb3,d4] f3, bb2", M: "bb3@18 a3@6 ~ [g3,bb3]@19 ~@4, [d4,f4]@11 ~",
  N: "~ [bb4,d5]@3 f4@3 [bb4,d5]@3 f4@3 [bb4,d5]@3 f4@3 [bb4,d5]@3 f4@2, ~ [bb2,bb3]@23", // Bb
  O: "~ [a4,d5]@3 e4@3 [a4,d5]@3 e4@3 [a4,db5]@3 e4@3 [a4,db5]@3 e4@2, ~ [a2,a3]@23", // D5 A
  P: "~ [a4,d5]@3 f4@3 [a4,d5]@3 f4@3 [g4,e5]@3 e4@3 [g4,e5]@3 e4@2, ~ [d3,d4]@12 [c3,c4]@11", // D5 C D C
  Q: "~ [a4,d5]@3 f4@3 [a4,d5]@3 f4@3 [a4,d5]@3 f4@3 [a4,d5]@3 f4@2, ~ [d3,d4]@23", // D5 D
  R: "~ [d4,bb4]@3 g4@3 [d4,bb4]@3 g4@3 bb4@3 a4@3 g4@3 f4@2, ~ [g2,bb3]@23, ~@13 d4@11", // Gm
  S: "[~ [c3,bb3,d4,f4]@27 ~@20]/2", // Bb
  T: "[~@7 [f3,c4,a4,f5]@48 [bb2,bb3,f4,d5]@23 ~ [c3,g3,e4,e5]@23 ~ [f3,c4,a4,f5]@47 ~ [bb2,bb3,f4,d5]@23 ~ [c3,g3,e4,e5]@23 ~ [f3,c4,a4,f5]@47 ~ [bb2,bb3,f4,d5]@23 ~ [c3,g3,e4,e5]@23 ~ [f3,c4,a4,f5]@47 ~ [bb2,bb3,f4,d5]@23 ~ [c3,g3,e4,e5]@17]/8", // F Bb C F Bb C F Bb …
  U: "[~@7 [f3,c4,a4,f5]@47 ~ [bb2,bb3,f4,d5]@23 ~ [c3,g3,e4,e5]@23 ~ [f3,c4,a4,f5]@47 ~ [bb2,bb3,f4,d5]@23 ~ [c3,bb3,d4,f4,bb4,g5]@65]/5", // F Bb C F Bb Gm7
  V: "[~@9 [bb2,f3,d4,bb4]@48 d4@24 db4@24 ~@7 e5@7 f5@7 d6@91 ~@23, ~@57 [a2,e3,a4]@49 [d2,f3,d4,d5]@113 ~@21]/5", // Bb A5 Dm
})).s("gm_synth_strings_1").gain(0.24).pan(0.6)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@36 A B A C ~@26 D E@2 F@2 E@2 G@2 ~@5>".pickRestart({
  A: "~@6 c4@5 ~ c4@5 ~ f4@5 ~ f4@6 a4@5 ~ a4@5 ~ c5@5 ~", B: "f5@18 g5@3 f5@3 e5@22 ~@2",
  C: "a5@18 bb5@3 a5@3 g5@22 ~@2", D: "~@13 c4@5 ~ c4@5 ~ f4@6 f4@6 a4@5 ~ a4@5",
  E: "[~ c5@5 ~ f5@18 g5@3 f5@3 e5@22 ~@8 c4@5 ~ c4@5 ~ f4@6 f4@6 a4@5 ~ a4@5]/2",
  F: "[~ c5@5 ~ f5@20 g5@2 ~@2 e5@22 ~@8 c4@5 ~ c4@5 ~ f4@6 f4@6 a4@5 ~ a4@5, ~@29 f5@4 ~@63]/2",
  G: "[~ c5@5 ~ a5@18 bb5@3 a5@3 g5@47 ~@18]/2",
})).s("gm_overdriven_guitar").gain(0.49).pan(0.3)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note("<~@65 A@2 ~@6 B@3 ~@4>".pickRestart({
  A: "[~@43 g3@12 ~@41]/2", B: "[~@31 [c3,f3]@68 ~@45]/3",
})).s("gm_distortion_guitar").gain(0.3).pan(0.7)

// other · pad poly · "POLYSYNTH"
const pad_poly = note("<~@77 A@3>".pickRestart({
  A: "[~@9 d1@110 ~@25]/3",
})).s("gm_pad_poly").gain(0.51).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A@11 B C@3 D C E C ~ F@3 G F G F H F@12 I J@3 K J@3 L ~ M@5 N M O M O M P Q ~@5
>`.pickRestart({
  A: "~@43 x ~@4", B: "~@11 x", C: "~@7 x ~@2 x ~@11 x ~", D: "~@5 x ~@5 x", E: "~@7 x ~@2 x ~@8 x ~@2 x ~",
  F: "x ~@2 x!2 ~@3", G: "x!2", H: "x", I: "x ~@18 x ~@5 x ~@22", J: "~ x ~@8 x ~@2 x ~@10", K: "~ x ~@11 x ~@10",
  L: "~ x ~@22", M: "~@7 x ~@17 x ~@5 x ~@16", N: "~@7 x ~@23 x ~@8 x ~@7", O: "~@7 x ~@40", P: "~@7 x ~@35 x ~@4",
  Q: "~ x ~@46",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@13 [~@31 x ~@16] [~@7 x ~@23 x ~@16]!9 [~@7 x ~@40] ~@56>").gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~@13 A ~@10 B@3 C B@3 D E F E G E F E H E@5 I E@5 I J K@6 L ~ M N O P O P N Q R N R N R ~@6
>`.pickRestart({
  A: "~@7 x ~@40", B: "~ x ~@2 x ~", C: "~@3 x!2 ~@11 x ~@7", D: "~@34 x!2 ~@12", E: "~ x ~ x",
  F: "~@4 x ~@3 x!3 ~ x!3 ~", G: "~@4 x ~@3 x!2 ~ x!2 ~ x ~", H: "~@4 x ~@2 x!3 ~@2 x ~@3", I: "~@4 x ~@7 x ~ x!2",
  J: "~ x ~@2", K: "~@5 x ~@7 x ~@2", L: "x ~@4 x ~@7 x ~@2",
  M: "~@6 x ~@2 x ~@5 x ~@2 x ~@5 x ~@2 x ~@5 x ~@3 x ~@5 x ~ x ~@2", N: "~@19 x ~@23 x ~@4",
  O: "~@19 x ~@11 x ~@2 x ~@2 x ~@5 x ~@2 x ~", P: "~ x ~@17 x ~@23 x ~@4", Q: "~ x ~@2 x ~@14 x ~@23 x ~@4",
  R: "~@19 x ~@28",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@62 [~@3 x ~ x ~@42] ~@8 [~@43 x ~@2 x ~] [~ x ~@46] ~@7>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@11 A B C@10 D E@5 F@2 ~ G H G H G H G I H@10 J H K L E@3 M E L ~@2 N O P O P O P O N O P Q ~@6
>`.pickRestart({
  A: "~@6 x ~@24 x ~@16", B: "~@7 x ~@23 x ~@11 x ~@4", C: "~@7 x ~@11 x ~@11 x ~@11 x ~@4", D: "~@7 x ~@24 x ~@15",
  E: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", F: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@4", G: "~ x!7",
  H: "x!8", I: "x!7 ~", J: "x ~ x!6", K: "~@12 x ~@6 x ~@5 x ~@22", L: "~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  M: "~@2 x ~@2 x ~@2 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@3", N: "~@13 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4",
  O: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", P: "~ x ~@11 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4",
  Q: "~ x ~@11 x ~@5 x ~@5 x ~@5 x ~@5 x ~@10",
})).gain(0.24)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@13 [~ x ~@11 x ~@11 x ~@11 x ~@10]!10 [~ x ~@46] ~@56>").gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 A ~@21 B C ~@6 D C E ~ E ~@6>".pickRestart({
  A: "~@10 x ~@2 x!2 ~", B: "~@47 x", C: "~ x ~@46", D: "~@31 x ~@2 x ~@2 x ~@5 x ~@2 x ~",
  E: "~@31 x ~@2 x ~@2 x ~@10",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@39 [~@7 x] ~@10 [~ x ~@6] ~@19 [~ x ~@46] ~@9>").gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@23 A ~@5 A@2 ~ B ~ B ~ B ~ B ~ B ~@11 C D ~@5 D@2 ~ E ~ E ~ E ~ E ~ E ~ E F G ~@5
>`.pickRestart({
  A: "~@11 x", B: "x", C: "x ~@18 x ~@5 x ~@22", D: "~ x ~@22", E: "~@7 x ~@40", F: "~@7 x ~@35 x ~@4", G: "~ x ~@46",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct(`<
  ~@22
  [~@43 x ~@4]
  [~@13 x ~@5 x ~@28]
  ~@53
  [~@25 x!3 ~ x ~ x ~@2 x ~ x ~ x!3 ~ x!2 ~ x!3]
  [x!8 ~ x!9 ~ x!3 ~ x ~@24]
  ~
>`).gain(0.16)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@77 [~@22 x!3 ~@3 x ~ x ~ x ~@4 x ~@3 x ~@6] ~@2>").gain(0.08)

stack(
  bass, acoustic_guitar_nylon, synth_strings_1, overdriven_guitar, distortion_guitar, pad_poly, kick, rim, snare,
  low_tom, hihat, hihat_soft, mid_tom, open_hat, crash, ride, ride_soft
)