Strudelify

O o h Child

The Five Stairsteps

KeyF majorTempo93 bpm
0:00/0:00
// O o h Child — The Five Stairsteps
// 93 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 6, 4/4 at bar 6) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(93/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B@4 ~@2 C D E F G H I J K L I J M N O P C D E F G H I J K L I J M N O P C D E F G H I J K L I J M N Q R Q R Q R Q S
  T U V W V@2 X Y Z@2 ~
>`.pickRestart({
  A: "~@8 bb2 f2 bb1 bb2 bb1@4",
  B: "[a2@4 a2@2 a1@2 g2@3 ~ g2@2 c2@4 c2 ~ c2 d2 c2@2 bb1@3 bb2 bb1 ~ a1@4 a2@2 a1@3 ~ bb1 ~ a1 ~ g1 ~ f1@16 ~@2]/4",
  C: "bb2 bb1 bb2@2 ~@4 a2 a1 a2 ~@5", D: "g2@3 ~@5 c3!2 f3 e3 f3 e3 c3@2", E: "bb1 bb2 bb1@5 ~ a1@6 ~@2",
  F: "g1 g2 g1@5 ~ c2@4 ~ c2@3", G: "bb1 bb2 bb1@5 ~ a1 a2 a1@6", H: "g1@4 g2 g1@3 c2@4 c2@2 ~@2",
  I: "~@2 ab2 db2 db3 ~ db3!2 c2 c3@2 c2 ~@2 c2@2, db2@3 ~@13, ~ db3@2 ~@9 c3@4",
  J: "bb1@2 bb2 bb1 bb2 ~ bb2 eb1 ~ eb1 ~ eb1 eb2 bb1 ~ bb1, ~@5 eb2 ~ eb2",
  K: "db2 db3 db2 db3 db3@2 db2 c2 ~ c2 c3@2 ~ c3@2 c2, ~@12 c2@3 ~",
  L: "bb1@2 bb1@2 bb2@2 bb1 eb2 ~ eb2 ab2 g2 ab2 g2 eb2 ~", M: "db2@2 db3 ab2 db3 db2 ab2 c2 ~ c2 c3 ~ c3 c2 c3@2",
  N: "bb1@4 bb2@2 ~ bb2@2 bb1 bb2@2 bb1@3 ~", O: "bb1 bb2 bb1@5 ~ a1@3 a2@2 a1 ~ a1", P: "g1@5 g2 ~ g1 c2@4 ~ c2 ~@2",
  Q: "bb1 a1", R: "g1 c2", S: "g1@6 ~ g1 c2@3 ~ c2@2 ~@2", T: "f1@2 f1@2 f2@3 f2 ~ f2 ~ f2@2 f2 c2 f2",
  U: "f1 f2!2 ~ f2@3 f2 ~ f2 ~ f2@2 c2 f2 c2", V: "f1@2 f2 ~ f2@2 ~ f2 ~ f2 ~ f2@2 c2 f2 c2",
  W: "f1@2 f2 ~ f2@2 c2 f2 ~ f2 ~ f2@2 ~ f2 c2, ~@13 c2@2 ~",
  X: "f1@2 f2 ~ f2@2 ~ f2 ~ f2 ~ f2@2 ~@2 c2, ~@13 c2@2 ~, ~@7 f2", Y: "f1 f2!2 ~ f2@2 ~ f2 ~ f2 ~ f2@2 f1 f2@2",
  Z: "[f1@31 ~]/2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@3 E@2 F G H@2 I J K J L J K J M N O@2 P G Q@2 I J K J L J K J L N O@2 P G Q@2 I J K J L J K J L G E@2 F G R@3
  S@2 T U V W X Y Z@3
>`.pickRestart({
  A: "~@2 [bb3,d4,f4]!2, ~ bb2", B: "[a3,c4,f4]@4 [a3,c4,f4]@4 g3@2 g3@2 [bb3,f4] ~@3, a2@8 [g2,bb3,f4]@5 ~@3",
  C: "~@8 f4@3 ~ [c4,f4]@4, ~ [bb2,bb3,d4], ~@11 f3@5", // F5 Bb
  D: "[[a3,c4,f4]@4 [a3,c4,f4]@3 ~ [bb2,bb3,d4,f4,f5,d6] ~ [a2,a3,c4,f4,e5,c6] ~ [g3,bb3,f4] ~ [f2,f3,a3,c4]@16 ~@2 [d6,f6]@8 [c6,f6]@8, ~@31 bb5@9 ~@8]/3", // F Bb Fmaj7 Gm7 F Dm F5
  E: "[[bb5,d6]@6 ~@2 [d5,g5] ~@3 [bb5,d6]@3 ~ f6@7 ~ [c6,f6]@8, ~@2 bb5 f5@3 ~@2, ~@15 bb5@8 ~@9]/2", // Bb G5 Bb F5
  F: "[g5,bb5,d6] ~", G: "[bb5,d6,f6] [c6,f6]",
  H: "[[bb5,d6]@6 ~@2 [d5,g5,bb5]@4 [bb5,d6]@3 ~ f6@7 ~ [c6,f6]@8, ~@3 f5@3 ~@2, ~@15 bb5@8 ~@9]/2", // Bb Gm Bb F5
  I: "~@8 [bb4,f5] [c3,g4,bb4,d5,f5]@2 [c2,c3,g4,bb4,d5,f5]@2 [c2,c3,g4,bb4,d5,f5]!3, [g5,bb5,d6]@15 ~", // Bb5 Gm7 Gm
  J: "[db3,ab3,db4,f4,ab4] ~ [db4,f4,ab4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4] eb4, ~ [f4,ab4] ~@6, ~@3 [db3,ab3]@5 c3@8", // Db Eb Fm Db5
  K: "[bb2,f3,bb3,db4,f4]@2 ~ [bb2,f3] [bb3,db4,f4]@2 [bb3,db4,f4] [db4,f4,ab4,c5] ~@3 [db4,f4,ab4,c5] ~@2 [db4,f4,ab4,c5] ~, ~@2 [db4,f4]@2 ~@3 eb3@2 [db4,f4,ab4,c5]@2 ~ [db4,f4,ab4,c5]@2 ~@2, ~@10 eb3@3 eb3@2 ~", // Bbm Bb5 Bbm Dbmaj7 Db Dbmaj7
  L: "[bb2,f3,bb3,db4,f4]@2 ~ [bb2,f3] [bb3,db4,f4]@2 [bb3,db4,f4] [eb3,db4,f4,ab4] ~ [db4,f4,ab4]@2 ~@3 [db4,f4,ab4] ~, ~@2 [db4,f4]@2 ~@5 eb3 ~ eb3@2 eb3@2 ~, ~@6 [db4,f4,ab4] ~", // Bbm Bb5 Bbm Db
  M: "[bb2,f3,bb3,db4,f4]@2 ~ [bb2,f3] [bb3,db4,f4]@2 [bb3,db4,f4] ~@9, ~ [db4,f4] ~@6", // Bbm Bb5 Bbm Db
  N: "[bb3,d4,f4,a4,d5,bb5,d6,f6] [c6,f6]", // Bbmaj7 F5
  O: "[[bb5,d6]@6 ~@2 [d5,g5] ~@3 [bb5,d6]@3 ~ [bb2,f3,bb3,d4,f4,f6]@2 [bb2,f3,bb3,d4,f4]@4 ~@2 [c6,f6]@8, ~@8 bb5@4 f5@7 ~@13, ~@15 bb5@4 ~@13]/2", // Bb G5 Bb F5
  P: "[g5,bb5,d6]@8 ~ c4 c3 c4 c3 c4 c3 ~", // Gm
  Q: "[[g3,bb3,d4,bb5]@7 ~@3 c4!2 ~@4 [bb2,f3,bb3,d4,f4,f6]@8 [c6,f6]@8, d6@5 ~@3 [d5,g5,bb5]@4 f5@12 ~@8, ~@12 [bb5,d6]@3 bb5@8 ~@9, ~@13 c4@11 ~@8]/2", // Gm Bb F5 Gm Bb
  R: "[[bb5,d6]@6 ~@2 [d5,g5,bb5]@4 [bb5,d6]@3 ~ f6@7 ~@9 [g3,bb3,d4]@4 [g3,bb3,d4]@4 [c3,g3,c4,e4]!2 ~ [g3,c4,e4]@2 c3 [g3,c4,e4] ~, ~@12 f5@12 ~@19 c3 ~@4, ~@15 bb5@8 ~ [c6,f6]@16 ~@8]/3", // Bb Gm Bb Gm C F5
  S: "[[a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 f2 [a3,c4,f4] ~ [a3,c4,f4]@2 ~@5 [bb3,d4,f4]@4 [bb3,d4,f4]@2 f2 [bb3,d4,f4] ~ [bb3,d4,f4]@4 ~ [bb3,d4,f4]@2, f2@4 ~@7 f2@2 f2@2 f2@5 ~@9 f2@3, ~@6 [a3,c4,f4]!2 ~@8]/2", // F Bb F
  T: "[f2,a3,c4,f4]@4 [a3,c4,f4]@2 f2 [a3,c4,f4] ~ [a3,c4,f4]@2 ~@3 [a3,c4,f4]@2, ~@11 f2@2 f2@3, ~@6 [a3,c4,f4] ~", // F
  U: "[f2,bb3,d4,f4]@4 [bb3,d4,f4] ~ f2 [bb3,d4,f4] ~ [bb3,d4,f4]@2 ~ [bb3,d4,f4]@4, ~@11 f2@5", // Bb
  V: "[a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4]@2 f2 [a3,c4,e4] ~ [a3,c4,e4]@2 ~ [a3,c4,e4]@2 [a3,c4,e4]@2, f2@5 ~@6 f2@5", // Am
  W: "[bb2,bb3,d4,f4]@4 [bb3,d4,f4]@2 f2 [bb3,d4,f4] ~ [bb3,d4,f4]@2 f2 [bb3,d4,f4]@2 f2 ~", // Bb
  X: "[f2,a3,c4,e4]@4 [a3,c4,e4]@2 f2 [a3,c4,e4] ~ [a3,c4,e4]@2 f2 ~@2 f2@2, ~@3 [a3,c4,e4]", // Fmaj7 Am
  Y: "[bb3,d4,f4]@3 ~ [bb3,d4,f4]@2 ~ [bb3,d4,f4] ~ [bb3,d4,f4]@2 ~ [bb3,d4,f4]@4, f2@4 ~@2 f2@4 ~ f2@5", // Bb
  Z: "[[f2,a3,c4,e4]@11 ~@5]/3", // Fmaj7
})).s("gm_piano").gain(0.56)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@5 A@2 B ~ A@2 B C D E D E D E D E A@2 F ~ A@2 B C D E D E D E D E A@2 F ~ A@2 B C D E D E D E D E A@2 B ~ A@2 G@2
  ~@11
>`.pickRestart({
  A: "[~@8 a5@7 g5@6 ~@11]/2", B: "d6@7 a5@9", C: "~@8 [c2,g4,d5] c2@2 ~@5", D: "~ db4 ~@5 [bb3,g4]", E: "~ bb3 ~@6",
  F: "d6@3 ~@4 a5@9", G: "[d6@7 a5@17 ~@8]/2",
})).s("gm_piano").gain(0.32)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A B@4 ~@8 C D E D F D G ~ H ~@7 C D E D F D G ~ H ~@7 C D E D F D G ~@9 I J K L M N O P Q@2 ~
>`.pickRestart({
  A: "~@4 [bb2,f3,bb3,d4] ~ [f3,bb3,d4]@2, ~@5 [f3,bb3,d4] ~@2, ~@11 bb2@5", // Bb
  B: "[[f3,a3,c4]@4 [f3,a3,c4]@4 [g2,bb3,d4]@2 ~@2 [g3,bb3,d4]@2 [c3,g3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4]@3 [bb3,d4,f4] ~@3 [bb3,d4,f4]@2 [a3,c4,f4]@4 [a3,c4,f4]@4 [a3,c4,f4] ~ [bb2,f3,bb3,d4] ~ [a2,eb3,a3,c4] ~ [g2,d3,g3,bb3] ~ [f2,c3,f3,a3,c4]@16 ~@2, ~@8 g3 ~ [g3,bb3,d4]@2 ~@14 [bb3,d4,f4]@2 ~@36, ~@11 g2@2 ~@5 c3@6 [bb2,f3]@2 ~ [bb2,f3]@3 ~@34]/4", // F Gm Csus4 C Bb F Bb Adim …
  C: "[ab3,f4]@6 [ab3,f4] ~@9", D: "~@10 bb4@2 ab4 ~ ab4@2", E: "f4@3 ~@5", F: "f4@4 eb4@3 ~", G: "f4@7 ~ eb4@6 ~@2",
  H: "[bb2,bb3,d4,f4,a4]@7 ~@9", I: "[a3,c4,f4]@4 [a3,c4,f4]@8 ~ [a3,c4,f4]@3, ~@3 f3",
  J: "[bb3,d4,f4]@7 [bb3,d4,f4]@2 [bb3,d4,f4]@2 ~@3 [bb3,d4,f4]@2, ~@11 f3@2 f3@3, ~@6 [bb3,d4,f4] ~", // Bb
  K: "[a3,c4,f4]@4 [a3,c4,f4]@5 ~@2 f3@2 ~@2 f3, ~@9 [a3,c4,f4]@4 f3@2 ~, ~@7 [a3,c4,f4]", // F
  L: "[bb3,d4,f4]@4 [bb3,d4,f4]@3 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@4", // Bb
  M: "[c4,e4,g4]@4 [c4,e4,g4]@3 [c4,e4,g4]@2 [c4,e4,g4]@2 ~ [c4,e4,g4]@2 [c4,e4,g4]@2, ~@11 f3@5", // C
  N: "[bb3,d4,f4]@4 [bb3,d4,f4]@3 [bb3,d4,f4]@2 [bb3,d4,f4]@2 ~@3 [bb3,d4,f4]@2, f3@11 f3@2 f3@3, ~@6 [bb3,d4,f4] ~", // Bb
  O: "[c4,e4,g4]@4 [c4,e4,g4]@2 [e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@4", // C Em C
  P: "[bb3,d4,f4]@2 [bb3,d4,f4]@2 ~@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]!3 [bb3,d4,f4]@2, f3@2 [bb3,d4,f4] ~@5, ~@5 f3@11", // Bb
  Q: "[[f3,c4,e4,g4]@7 ~]/2", // C
})).s("gm_acoustic_guitar_nylon").gain(0.59)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  A@2 B@3 ~@8 C D C E C F C G ~@8 H I J K L I M N O P Q@2 R P S@2 H I J K L I M T ~@3 U V W V X Y Z AA Z AB Z AC AD AE@2
  ~
>`.pickRestart({
  A: "[~@8 d5@4 bb4 ~ f5@4 c5@5 ~ bb4@2 a4@2 f4 ~ f4@2]/2",
  B: "[~@2 g4@4 ~@2 d5@4 bb4@2 f5@5 ~ g5@2 f5@2 [d5,f5,bb5] ~ [c5,e5,a5] ~ [bb4,d5,g5] ~ [a4,c5,f5]@15 ~@3]/3", // Bb Am Gm F
  C: "~ [db4,f4,ab4] [c4,eb4,g4]@2", D: "[db4,f4]", E: "[db4,f4]@9 ~ [db4,db5]!2 ~ [db4,db5] [eb4,eb5] ~",
  F: "[db4,f4]@5 ~@3", G: "[db4,f4,ab4]@10 [f4,f5]!2 ~ [f4,f5] ~@2", H: "~@4 [f5,ab5]@4 [eb5,g5]@7 ~", I: "[db5,f5]",
  J: "~ [f5,ab5] [eb5,g5]@2", K: "[db5,f5]@10 [db5,f5,ab5] ~ [db5,f5,ab5] [db5,f5,ab5]@2 [db5,eb5,f5,ab5]",
  L: "[db5,f5,ab5]@3 ~ [db5,f5,ab5]@4 [eb5,g5]@8", M: "~@4 [f5,ab5]@3 ~ [eb5,ab5]@8", N: "[f5,ab5] ~",
  O: "[bb4,d5,f5]@7 ~ [a4,c5,f5]@8", P: "[g4,bb4,f5]@7 ~", Q: "[[bb4,d5,f5]@4 c5@2 d5 ~ f5@20 ~@4]/2",
  R: "[bb4,d5,f5] [a4,c5,f5]", S: "[[bb4,d5,f5]@4 c5@2 d5 ~ f5@22 ~@2]/2",
  T: "[f5,ab5]@8 ab5@2 [f5,ab5] ab5@2 [f5,ab5] ab5@2, ~@11 f5 ~@2 f5 ~", U: "~@8 g4@2 a4@2 bb4@2 c5 ~",
  V: "[bb4,d5] [a4,c5]", W: "[bb4,d5]@15 ~", X: "[bb4,d5]@4 [c5,e5]@3 ~",
  Y: "~@4 [a4,c5,f5]@3 [a4,c5,f5] ~@5 [a4,c5,f5] ~@2", Z: "~@4 [bb4,d5,f5]@2 ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~@6",
  AA: "~@4 [a4,c5,f5]@2 ~ [a4,c5,f5] ~ [a4,c5,f5] ~@6", AB: "~@4 [a4,c5,e5]@2 ~ [a4,c5,e5] ~@8",
  AC: "~@4 [a4,c5,f5]@2 ~ [a4,c5,e5] ~ [a4,c5,e5] ~@6", // F Am
  AD: "~@4 [bb4,d5,f5]@2 ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~@4 [bb4,d5,f5] ~", AE: "[[f3,a4,c5]@7 ~]/2",
})).s("gm_brass_section").gain(0.62)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A B C D@2 ~@16 E F G F H F ~ I J K L M N O P Q R S T U T V W U J K L M N O P Q X Y X Y Z AA Z AB AC@8 AD@2 ~
>`.pickRestart({
  A: "~ [f4,bb4,d5]", B: "[f4,a4,c5] [g4,bb4,d5]", C: "[g4,c5,f5]@4 [g4,c5,e5]@3 ~ [f4,bb4,d5]@8",
  D: "[[f4,a4,c5]@7 ~ [f4,bb4,d5] ~ [a4,c5] ~ [g4,bb4] ~ [f4,a4]@10 ~@8]/2", E: "[f5,f6]", F: "[d5,d6]", G: "f5",
  H: "f6", I: "[d5,d6]@15 ~", J: "[f4,ab4,c5] [g4,bb4]", K: "[f4,ab4]", L: "[db4,f4,ab4] [eb4,g4]", M: "[db4,f4,ab4]",
  N: "[f5,ab5,c6] [eb5,g5,bb5]", O: "[f5,ab5]@15 ~", P: "[f5,ab5,c6] [g5,bb5]", Q: "[db5,f5,ab5]@15 ~",
  R: "[bb3,d4,f4] [a3,c4,f4]", S: "[bb3,d4,f4]", T: "[bb3,d4,f4]@7 ~ [a3,c4,f4]@7 ~", U: "[g3,bb3,f4]@15 ~",
  V: "[bb3,d4,f4]@15 ~", W: "[bb3,d4,f4]@7 ~ [a3,c4,f4]@8", X: "[f4,bb4] [f4,a4]", Y: "g4@15 ~",
  Z: "[f4,bb4,bb5] [f4,a4,a5]", AA: "[g4,g5]", AB: "g5@8 c6@7 ~, g4@15 ~", AC: "[f5,f6]/8",
  AD: "[[f4,a4,c5,e5]@29 ~@3]/2", // Fmaj7
})).s("gm_string_ensemble_2").gain(0.27)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@4 A ~@4 B@4 ~@10 C ~ D ~ E ~@25 F G F G F G F G ~@11>".pickRestart({
  A: "~@4 [f3,c4]@3 ~", B: "[f5@63 ~]/4", C: "f6", D: "f5", E: "[f5,f6]", F: "d4@8 c4@7 ~", G: "[bb3,d4]@15 ~",
})).s("gm_string_ensemble_2").gain(0.19)

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

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~ x]!8 ~@8 [~ x ~ x]!8 ~@24 [~ x ~ x]!7 [~ x ~@2] ~@11>").gain(0.71)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~ A ~ B ~@7 C ~@7 D ~@7 C ~@7 E ~@7 F ~@7 D ~@7 G ~@3 F ~@3 F ~@3>".pickRestart({
  A: "~@15 x", B: "~ x ~@14", C: "~@11 x ~ x ~@2", D: "~ x", E: "~@8 x!2 ~ x!3 ~@2", F: "~@5 x ~@10", G: "~@11 x!3 ~@2",
})).gain(0.14)

// drums · low tom
const low_tom = s("lt").struct("<A ~@3 B ~@35 B ~@3 B ~@19 B ~@3 B ~@3>".pickRestart({
  A: "~@7 x ~@8", B: "~@7 x",
})).gain(0.71)

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

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@2 B C ~@15 D ~@19 E ~@3 F ~@7 D ~@7 D ~@3 F ~@3 F ~@3>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x", C: "~@3 x ~@2 x ~", D: "~@7 x", E: "~@15 x", F: "~@12 x!2 ~@2",
})).gain(0.71)

// drums · open hat
const open_hat = s("oh").struct("<A B A C D ~@7 E F@8 ~@7 E F@7 G F@16 ~@7 H F@8 I ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@9 x ~@6", C: "~@3 x ~ x ~ x", D: "~@7 x", E: "~@7 x ~@8", F: "~ x ~ x ~ x ~ x",
  G: "~ x ~ x!2 ~@3", H: "~@15 x", I: "x",
})).gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<A ~@2 B C ~@15 D ~@19 E ~@3 B ~@7 D ~@7 F ~@3 B ~@3 B ~@3>".pickRestart({
  A: "~@3 x ~ x ~@10", B: "~@5 x ~@2", C: "~@8 x ~@2 x ~@4", D: "~@13 x ~@2", E: "~@3 x", F: "~@15 x",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct("<A ~ A B ~@9 C ~@15 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@11 C ~@3 C ~@3 C ~@2>".pickRestart({
  A: "~ x", B: "~@7 x", C: "x",
})).gain(0.71)

// drums · ride
const ride = s("rd").struct("<~@37 A B A B A B A C ~@16 A B A C A B A C D ~@2>".pickRestart({
  A: "x!5 ~ x!2", B: "x!8", C: "x!3 ~@5", D: "x",
})).gain(0.71)

// … 4 more lines