Strudelify

Wouldn't It Be Good

Nik Kershaw

KeyD minorTempo106 bpm
0:00/0:00
// Wouldn't It Be Good — Nik Kershaw
// 106 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/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 · "MIDI"
const bass = note(`<
  ~ A B A B A C D E A B A B A C D F G@3 H G@3 I J K L M N O A B A B A C D P A B A B A C D Q R@3 ~ G@3 I J K L M N S T@6
  U@2 A B A B A C D V A B A B A C D W A B A B A C D P A B A B A C D P A B A B A C D V A C X@2
>`.pickRestart({
  A: "bb1@5 ~ bb1@2 g1@5 ~ g1@2", B: "c2@5 ~ c2@2 f1@5 ~ f1@2", C: "c2@5 ~ c2@2 a1@5 ~ a1@2",
  D: "d2@5 ~ d2@2 a1@5 ~ a1@2", E: "d2 ~@2 a2 g2 f2 e2 c2", F: "d2 ~@2 a2 e2@2 ~ e2", G: "b1@4 ~@2 b1 ~ b1@4 ~@2 b1 ~",
  H: "b1@4 ~@2 b1 ~ d2!2 db2 ~ b1 ~ a1 ~", I: "c2@5 ~ c2@2 g1@4 ~@2 gb2@2", J: "g2 g1 ~ g1 g1@2 ~ g1",
  K: "gb1@2 ~ c2 db2@2 ~ g2", L: "ab2@2 ~ c2 db2@2 ~ eb2", M: "e2@5 ~ bb1@2 b1@4 ~@2 db2@2",
  N: "d2@2 f2 e2@2 ~ d2@7 ~ a1@2", O: "d2 ~ d2@2 ~@2 d2@2 f1@2 f1@2 f1@2 f1@2", P: "d2@2 ~ a2 g2 f2 e2 c2",
  Q: "d2@2 ~ a2 e2@2 ~ e2", R: "[b1@7 ~]/3", S: "d2 ~@2 d2 ~@3 d2", T: "d1 ~@6 d2",
  U: "[d1 ~@6 d2 d1 ~@7, gb2@21 ~@11]/2", V: "d2@4 ~@2 a2@2 f1@5 ~ f1@2", W: "d2 d3 c3 a2 g2 f2 e2 c2",
  X: "[d2@13 ~@3]/2",
})).s("gm_fretless_bass").gain(0.4)

// other · distortion guitar
const distortion_guitar = note("<~@68 A B@5 C@3 D E F G H I@2 J ~@28>".pickRestart({
  A: "~@4 a4 g4 f4 e4",
  B: "[d4@4 f4@2 d4@2 [bb3,bb4]@3 ~@3 e4@6 g4@2 e4@2 [c4,c5]@3 ~@3 f4@6 g4@2 f4@2 bb4@2 c5@2 d5@2 [c4,c5]@6 [e4,e5]@2 ~@2 [g4,g5]@2 f5@2 e5@2 d5@6 c5@2 d5@2 f5@2 d5@2 c5@2 d5 ~]/5", // Bb C E G
  C: "[e5@3 [c4,d4,c5,d5] [a3,a4]@3 ~ c5@2 ~@2 c5@2 d5@7 ~ d5@2 [c4,c5]@2 [a3,a4]@2 c5@2 d5@7 ~ e5@2 f5@2 g5@2 f5@2 e5@2]/3", // Csus2 A C A
  D: "d5 ~ a5 ~ g5 ~ f5 ~ [d4,d5]@4 f5 ~@3", E: "e5 d5 c5 bb4 c5 bb4 a4 g4", F: "[f3,f4]@2 g4 f4 a4 c5 bb4 a4",
  G: "g4@4 f4 ~@3 e5 d5 ~ f5 d5 ~ f5@2", H: "g5 a5 g5 f5 d5@2 c5 d5",
  I: "[e5 d5 c5 a4 g4 f4 g4 d4@3 c4 d4 f4 g4 a4 g4]/2", J: "f4@4 e4@2 d4@2 ~@2 d4 ~ [d3,d4]@4",
})).s("gm_distortion_guitar").gain(0.27).pan(0.2)

// other · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@68 A B@3 C@2 D@3 E F G H I J@2 K ~@28>".pickRestart({
  A: "~@4 a3 g3 f3 e3", B: "[d3@2 f3 d3 ~@3 e3@3 g3 e3 ~@3 f3@3 g3 f3 bb3 c4 d4 ~]/3",
  C: "[~@10 f4@2 e4@2 d4@6 c4@2 d4@2 f4@2 d4@2 c4@2 d4 ~]/2",
  D: "[e4@3 ~@5 c4@2 ~@2 c4@2 d4@7 ~ d4@2 ~@4 c4@2 d4@7 ~ e4@2 f4@2 g4@2 f4@2 e4@2]/3",
  E: "d4 ~ a4 ~ g4 ~ f4 ~@5 f4 ~@3", F: "e4 d4 c4 bb3 c4 bb3 a3 g3", G: "~@2 g3 f3 a3 c4 bb3 a3",
  H: "g3@4 f3 ~@3 e4 d4 ~ f4 d4 ~ f4@2", I: "g4 a4 g4 f4 d4@2 c4 d4",
  J: "[e4 d4 c4 a3 g3 f3 g3 d3@3 c3 d3 f3 g3 a3 g3]/2", K: "f3@4 e3@2 d3@2 ~@2 d3 ~@5",
})).s("gm_distortion_guitar").gain(0.13).pan(0.2)

// other · epiano2
const epiano2 = note(`<
  ~@8 A B C D@2 E F@3 ~@12 G@2 B C H@2 E I@3 B C J@2 K@4 ~@37 A B L D@2 E M@3 B N J@2 O@4 B L D@2 E P@3 Q@2 R ~
>`.pickRestart({
  A: "~@4 e5 f5 e5 c5", B: "d5@2 c5 c5@2 a4 ~ a4", C: "~ g4 ~@2 e5 f5 e5 c5",
  D: "[d5@4 c5 ~ c5@4 c5@3 ~ e5@6 ~@4 e5@2 f5@2 e5@2 c5@2]/2", E: "d5@4 c5 ~ c5@4 a4@3 ~ a4@2",
  F: "[~@2 g4@4 ~@2 g4@3 ~ f4@2 f4@25 ~ [e4,b4,e5]@2 [e4,b4,e5]@2 ~@4]/3", G: "[~@12 e5 f5 e5 c5, [d4,e4,a4]@15 ~]/2",
  H: "[d5@4 c5 ~ c5@4 c5@4 e5@6 ~@4 e5@2 f5@2 e5@2 c5@2]/2",
  I: "[~@2 g4@4 g4@2 f4@2 ~@2 f4@2 f4@25 ~ e5@2 f5@2 e5@2 c5@2]/3",
  J: "[d5@4 c5 ~ c5@5 ~ c5@2 e5@6 ~@4 e5@2 f5@2 e5@2 c5@2]/2",
  K: "[d5@4 c5 ~ c5@4 a4@3 ~ a4@5 ~ g4 ~ g4@5 ~ f4@2 f4@25 ~ [e4,b4,e5]@2 [e4,b4,e5]@2 ~@4]/4", // E5
  L: "~@2 g4@3 ~@3 e5@2 f5@2 e5@2 c5@2", M: "[~@2 g4@3 ~ g4@2 f4@2 ~@2 f4@2 f4@25 ~ e5@2 f5@2 e5@2 c5@2]/3",
  N: "~ g4@2 ~ e5 f5 e5 c5", O: "[d5@4 c5 ~ c5@4 a4@3 ~ a4@5 ~ g4@2 g4@5 ~ f4@2 f4@25 ~ e5@2 f5@2 e5@2 c5@2]/4",
  P: "[~@2 g4@3 ~@3 g4@3 ~ f4@2 f4@25 ~ e5@2 f5@2 e5@2 c5@2]/3", Q: "d5@2 ~@2 e5 f5 e5 c5", R: "d5",
})).s("gm_epiano2").gain(0.32).pan(0.1)

// other · lead 1 square
const lead_1_square = note("<~@21 A B C D E F G H ~@22 A B C D E F G H ~@54>".pickRestart({
  A: "~@2 b5 ~@3 a6 ~@3 gb6@2 d6@2 ~@2", B: "e6 ~@3 b5 ~@3 d6@2 gb6 ~@5", C: "~@2 b5 ~@3 a6@2 ~@2 gb6@2 d6 ~@3",
  D: "~ g6 ~@2 g6 d6 ~ d6", E: "d6 ~@3 g6@2 d6@2 ~@6 db6@2", F: "~@2 a6@2 gb6 ~@3 db6@2 e6 ~ ab6@2 ~@2",
  G: "~@2 ab6@2 ~@2 ab6@2 e6@2 ~@2 db6 ~@3", H: "b5@5 ~ gb6@2 d6@3 ~@5",
})).s("gm_lead_1_square").gain(0.24).pan(0.8)

// chords · pad warm
const pad_warm = note(`<
  A@7 B@8 C@5 ~@5 D@3 E ~ A@7 B@8 F@6 ~@4 G@3 H I@6 ~@2 J@8 K@2 L M L M L N O@2 L M L M L N K@2 L M L M L P Q@2 L M L M
  L P Q@2 L N R@2
>`.pickRestart({
  A: "[~@14 [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@15 ~ [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@15 ~ [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@9 ~ [e4,g4,c5]@7 ~]/7", // Dm Bb C Dm Bb C Dm Bb …
  B: "[[f4,a4,d5]@24 ~@6 [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@15 ~ [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@15 ~ [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@9 ~ [e4,g4,c5]@7 ~]/8", // Dm Bb C Dm Bb C Dm Bb …
  C: "[[f4,a4,d5]@12 ~@3 [b3,gb4,b4]@22 ~@3]/5", D: "[[b3,d4,g4]@2 [gb4,db5] [e4,ab4]@3, a4 ~, ~ db4@2]/3",
  E: "[e4,ab4] [d4,gb4], b3@15 ~", F: "[[f4,a4,d5]@4 ~ [b3,gb4,b4]@11]/6",
  G: "[[b3,d4,g4]@2 [gb4,db5] [e4,ab4]@3, a4 ~, ~@16 db4@31 ~]/3", H: "e4@7 ~ [d4,gb4]@8, b3@15 ~", I: "[d4,e4,a4]",
  J: "[~@4 [gb4,ab4,db5]@17 ~@9 [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@15 ~ [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@15 ~ [d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~ [c4,e4,g4]@9 ~ [e4,g4,c5]@7 ~]/8", // Gbsus2 Dm Bb C Dm Bb C Dm …
  K: "[[f4,a4,d5]@15 ~]/2", L: "[d4,f4,a4]@9 ~ [bb3,d4,f4]@5 ~", M: "[c4,e4,g4]@15 ~", N: "[c4,e4,g4]@9 ~ [e4,g4,c5]@6",
  O: "[~@2 [f4,a4,d5]@27 ~@3]/2", P: "[c4,e4,g4]@9 ~ [e4,c5]@6", Q: "[~ [f4,a4,d5]@14 ~]/2",
  R: "[~ [a3,e4,gb4,d5]@23 ~@8]/2", // D
})).s("gm_pad_warm").gain(0.2).pan(0.7)

// chords · distortion guitar
const distortion_guitar_2 = note("<A@8 B@8 C@4 ~@9 D@7 E@2 B@8 C@4 ~@9 F@2 ~@7 A@8 B@32 G@3 H@2>".pickRestart({
  A: "[~@8 [c3,f3,c4]@2 [c3,f3,c4]@2 ~@2 [f3,bb3]@8 ~@2 [d3,g3]@2 [d3,g3]@2 ~@2 [g3,c4]@8 ~@2 [f3,c4]@2 [f3,c4]@2 ~@2 [f3,bb3]@8 ~@2 [d3,g3]@2 [d3,g3]@2 ~@2 [g3,c4]@8 ~@2 [f3,c4]@2 [f3,c4]@2 ~@2 [f3,bb3]@8 ~@2 [d3,g3]@2 [d3,g3]@2 ~@2 [g3,c4]@8 ~@2 [e3,a3]@2 [e3,a3]@2 ~@2 [a3,d4]@10 ~@2 [d3,a3,d4,f4] ~@3 [d3,a3,d4,f4]@2]/8", // F5 Bb5 G5 C5 F5 Bb5 G5 C5 …
  B: "[~@4 [d3,a3,d4,f4]@2 ~@2 [c3,f3,c4]@2 [c3,f3,c4]@2 ~@2 [f3,bb3]@8 ~@2 [d3,g3]@2 [d3,g3]@2 ~@2 [g3,c4]@8 ~@2 [f3,c4]@2 [f3,c4]@2 ~@2 [f3,bb3]@8 ~@2 [d3,g3]@2 [d3,g3]@2 ~@2 [g3,c4]@8 ~@2 [f3,c4]@2 [f3,c4]@2 ~@2 [f3,bb3]@8 ~@2 [d3,g3]@2 [d3,g3]@2 ~@2 [g3,c4]@8 ~@2 [e3,a3]@2 [e3,a3]@2 ~@2 [a3,d4]@10 ~@2 [d3,a3,d4,f4] ~@3 [d3,a3,d4,f4]@2]/8", // Dm F5 Bb5 G5 C5 F5 Bb5 G5 …
  C: "[~@2 [d3,a3,d4,f4] ~ [b3,e4]!2 ~ [b2,gb3,b3]@23 ~@2]/4", // Dm E5 B5
  D: "[[d3,a3,d4]@12 [c3,f3,c4]!2 ~ [f3,bb3]@4 ~ [d3,g3]!2 ~ [g3,c4]@4 ~ [f3,c4]!2 ~ [f3,bb3]@4 ~ [d3,g3]!2 ~ [g3,c4]@4 ~ [f3,c4]!2 ~ [f3,bb3]@4 ~ [d3,g3]!2 ~ [g3,c4]]/7", // D5 F5 Bb5 G5 C5 F5 Bb5 G5 …
  E: "[~@8 [e3,a3]@2 [e3,a3]@2 ~@2 [a3,d4]@10 ~@2 [d3,a3,d4,f4] ~@3 [d3,a3,d4,f4]@2]/2", F: "[[d3,a3,d4]@15 ~]/2",
  G: "[~@2 [d3,a3,d4,f4] ~ [c3,f3,c4]!2 ~ [f3,bb3]@4 ~ [d3,g3]!2 ~ [g3,c4]@4 ~ [e3,a3]!2 ~ d3]/3", // Dm F5 Bb5 G5 C5 A5
  H: "[[d3,a3,d4]@13 ~@3]/2", // D5
})).s("gm_distortion_guitar").gain(0.25).pan(0.2)

// chords · xylophone · D Asus4 Bm7 D Asus4 Bm7 D Asus4 …
const xylophone = note(`<
  ~@64
  [~@3 [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6]]
  [[a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6]]!2
  [[a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] ~@10]
  ~@45
>`).s("gm_xylophone").gain(0.32).pan(0.2)

// chords · xylophone · soft notes · Bm B7 D Asus4 Bm7 D Asus4 Bm7 …
const xylophone_soft = note(`<
  ~@63
  [~@5 [b6,d7] [gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6]]
  [[a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] ~@13]
  ~@2
  [~@6 [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6] [a5,b5,d6,e6] [a5,b5,b6,d7] [d6,gb6,a6,b6] [d6,e6,gb6,a6]]
  [[a5,b5,e6] [b5,d6,d7] ~@14]
  ~@44
>`).s("gm_xylophone").gain(0.08).pan(0.2)

// chords · church organ
const church_organ = note("<~@67 A@2 ~@44>".pickRestart({
  A: "[[g2,a3]@2 ~@3 [ab5,db6]@17 ~@10, ~ [gb2,ab3]@10 ~@5, ~@4 [db5,gb5]@17 ~@11]/2", // Gsus2 Db5 Gbsus2 Gb5
})).s("gm_church_organ").gain(0.1).pan(0.2)

// other · brass section
const brass_section = note("<~@68 A B@5 C@3 D E F G H I@2 J ~@28>".pickRestart({
  A: "~@4 a4 g4 f4 e4",
  B: "[d4@4 f4@2 d4@2 bb4@3 ~@3 e4@6 g4@2 e4 ~ c5@3 ~@3 f4@6 g4@2 f4@2 bb4@2 c5@2 d5@2 c5@6 e5@2 ~@2 g5@2 f5@2 e5@2 d5@6 c5@2 d5@2 f5@2 d5@2 c5@2 d5 ~]/5",
  C: "[e5@3 [c5,d5] a4@3 ~ c5@2 ~@2 c5@2 d5@7 ~ d5@2 c5@2 a4@2 c5@2 d5@7 ~ e5@2 f5@2 g5@2 f5@2 e5@2]/3", // Csus2
  D: "d5@2 a5 ~ g5 ~ f5 ~ d5@4 f5 ~@3", E: "e5 d5 c5 bb4 c5 bb4 a4 g4", F: "f4@2 g4 f4 a4 c5 bb4 a4",
  G: "g4@4 f4 ~@3 e5 d5 ~ f5 d5 ~ f5@2", H: "g5 a5 g5 f5 d5@2 c5 d5",
  I: "[e5 d5 c5 a4 g4 f4 g4 d4@3 c4 d4 f4 g4 a4 g4]/2", J: "f4@2 e4 d4 ~ d4 d4@2",
})).s("gm_brass_section").gain(0.3).pan(0.8)

// chords · overdriven guitar · "MIDI"
const overdriven_guitar = note("<A@6 B@8 C@5 ~@10 D@7 B@8 E@5 ~@10 F@2 G@7 H@6 B@32 I@5 J@2>".pickRestart({
  A: "[~@6 [bb3,d4,f4]!2 [f2,e4,g4]@2 [f2,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@2]/6", // Bb C Bb Dm C Bb Dm C …
  B: "[~@6 [c4,e4,g4]!2 [a2,e4,g4,bb4]@2 [a2,e4,g4,bb4]@2 ~@2 [d3,d4,f4,a4]@26 [f2,e4,g4]@2 [f2,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@2]/8", // C Edim Dm C Bb Dm C Bb …
  C: "[~@6 [c4,e4,g4]!2 [a2,e4,g4,bb4]@2 [a2,e4,g4,bb4]@2 ~@2 [d3,d4,f4,a4]@26 [e3,b3,e4]@2 [e3,b3,e4]@2 ~@2 [b2,gb3,b3]@31 ~@3]/5", // C Edim Dm E5 B5
  D: "[[d3,a3,d4]@23 ~ [f2,e4,g4]@2 [f2,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@2]/7", // D5 C Bb Dm C Bb Dm C …
  E: "[~@6 [c4,e4,g4]!2 [a2,e4,g4,bb4]@2 [a2,e4,g4,bb4]@2 ~@2 [d3,d4,f4,a4]@26 [e3,b3,e4]@2 [e3,b3,e4]@2 ~@2 [b2,gb3,b3]@32 ~@2]/5", // C Edim Dm E5 B5
  F: "[[d3,a3,d4]@23 ~@7 [d2,d3]@2]/2", G: "[d1,d2]@3 ~@11 [d2,d3]@2",
  H: "[[d1,d2]@3 ~@5 [f2,e4,g4,a4]@2 [f2,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@2]/6", // D Fmaj7 C Bb Dm C Bb Dm …
  I: "[~@6 [c4,e4,g4]!2 [a2,e4,g4,bb4]@2 [a2,e4,g4,bb4]@2 ~@2 [d3,d4,f4,a4]@26 [f2,c4,e4,g4]@2 [f2,c4,e4,g4]@2 ~@2 [bb2,bb3,d4,f4]@7 ~ [bb3,d4,f4]!2 [g2,d4,f4,a4]@2 [g2,d4,f4,a4]@2 ~@2 [c3,c4,e4,g4]@7 ~ [c4,e4,g4]!2 [a2,e4,g4,bb4]@2 [a2,e4,g4,bb4]@2 ~@4]/5", // C Edim Dm C Bb Dm C Edim
  J: "[[d3,d4,gb4,a4]@25 ~@7]/2", // D
})).s("gm_overdriven_guitar").gain(0.27).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@7 B A@7 C A@3 D A@4 E A@3 F G A@7 B A@7 C A@3 D A@3 H E A@3 F I J@7 K A@7 L A@7 B A@7 L A@7 B A@7 L M@2 K ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~ x ~ x ~ x!2", C: "x!3 ~", D: "x ~@2 x!3 ~ x", E: "~@3 x!2 ~@2 x", F: "x ~@2 x ~ x ~@2",
  G: "x!2 ~ x!2 ~@3", H: "x ~@5 x ~ x ~@2 x ~@2 x ~", I: "x ~@2 x ~ x ~ x", J: "x ~@6 x", K: "x", L: "x!2 ~@2",
  M: "x ~@3 x!2 ~ x",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  A B@7 C B@7 D B@12 E F B@7 C B@7 D B@12 E@2 ~@7 A B@7 G B@7 C B@7 H B@7 C B@7 H E I ~@2
>`.pickRestart({
  A: "~@4 x!2 ~ x", B: "~ x ~ x", C: "~ x ~@2 x ~ x ~", D: "~@2 x ~@7 x!3 ~@3", E: "~@3 x", F: "~@5 x!3",
  G: "~ x ~@2 x ~ x!2", H: "~ x ~@2 x!2 ~ x", I: "~@2 x!3 ~@7 x ~@3",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@29 [~ x!2 ~ x!2 ~ x] ~@21 [x!2 ~@14] ~@7 [~ x!2 ~ x!2 ~ x]!2 ~@52>").gain(0.42)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@51 [~@2 x!4 ~@10] ~@61>").gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@29 A ~@37 A ~@7 A ~@15 A ~@8 B C ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@6 x!2 ~@8", C: "~@3 x ~@4",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~ A@15 B A@12 C D A@15 B A@12 C@9 ~ A@7 E A@15 E A@15 E F@2 ~@2>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x!4", D: "x!2 ~@2", E: "x!4 ~@4", F: "~@9 x ~ x ~@4",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@7 B ~@21 A ~@7 B ~@37 A ~@15 A ~@8 C ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@4 x!2 ~@10",
})).gain(0.42)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@67 [~@14 x!2] [x!5 ~ x ~@9] ~@44>").gain(0.18)

// drums · high tom
const high_tom = s("ht").struct("<~@76 [~@6 x!2] ~@32 [~@2 x!2 ~@12] ~@3>").gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@7 A ~@13 A ~@7 A ~@7 A ~@10 B ~@9 C A ~@7 A ~@7 A ~@7 A ~@7 A ~@6 D E@2 A ~
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@3 x ~@4", D: "~@7 x", E: "x ~@6 x",
// … 7 more lines