Strudelify
Rag Doll cover art

The Classic Albums Box

Rag Doll

The Four Seasons

KeyB♭ majorTempo120 bpm
0:00/0:00
// Rag Doll — The Four Seasons
// 120 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-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): Guitar.
setcpm(120/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(`<
  ~@11 A@2 B C D@2 E F G@3 H I J K L M N M O@3 P@2 A@2 B C D@2 E F G@3 H I J K L M N M O@3 P@2 ~@8 A@2 B C D@2 E F A@2 B
  C D@2 E F A@2 B C D@2 E F A@2 B C D@2 E F Q@3
>`.pickRestart({
  A: "[[f4,bb4]@6 ~@18 [bb3,a4]@2 [d4,bb4]@2 [bb3,c4,a4]@3 ~, d4@23 ~ c4 ~@7, bb2@3 f3 [f4,bb4]@2 ~@2, f3@8 [f4,bb4]@7 ~ bb2@16, bb3@5 ~ bb3@16 f3@8 ~@2]/2", // Bb5 Bbmaj7 Gm F Bb5
  B: "[g3,eb4,g4]@6 ~@6 [g3,f4]@3 ~, eb3@15 ~, ~@6 bb3@9 ~, ~@6 g3@5 ~@5, ~@8 eb4@7 ~", // Cm G7
  C: "[eb3,g3,bb3,eb4,g4]@7 ~ [eb3,bb3,eb4,g4]@4 [d3,a3,d4,f4]@4", // Eb Dm
  D: "[[g3,c4]@4 ~@4 [d4,g4]@4 [eb4,g4]@4 [c4,f4]@6 ~@2 [bb3,c4,f4]@3 ~ [a3,c4,f4]@3 ~, c3@31 ~, eb4@8 ~@8 f2@13 ~@3, ~@4 g3@11 ~ f3@15 ~, ~@2 a3 ~]/2", // C5 G5 Eb F5 Bbsus2 F
  E: "[bb3,d4,f4]@6 ~@2 c4@4 [f3,bb3]@3 ~, bb2@15 ~, f3@3 ~@3 f3@6 ~@4, ~@8 [d4,f4]@7 ~", // Bb Bb5 Dm
  F: "[bb2,f3,bb3,d4]@6 ~@2 [eb3,bb3,eb4,g4]@4 [bb2,bb3,d4,f4]@3 ~", // Bb Eb Bb
  G: "[[f3,c4,f4]@5 ~ [f3,c4,f4] ~ [c4,f4]@4 [c4,f4]@2 ~@2 [c4,eb4,f4]@5 ~@3 f3@3 ~ [a3,c4,eb4,f4]@3 ~ [bb3,d4,f4]@5 ~ bb3@2 c4@3 ~ [bb3,d4,f4]@3 ~, a3@27 ~ f3@18 ~@2, f2@15 ~ f2@16 bb2@16, ~@8 f3@14 [c4,eb4,f4]@5 ~@11 [d4,f4]@5 ~@5]/3", // F5 F7 Bb F7 Dm
  H: "[f2,f3,a3,c4,f4]@3 ~ [eb3,g3,bb3,eb4,g4]@2 [bb2,f3,bb3,d4,f4]@2", // F Eb Bb
  I: "[c4,f4]@5 ~ [c4,f4] ~ [a3,c4,f4]@4 [a3,d4,f4]@3 ~, [f2,f3]@15 ~, a3 ~", // F5 F Dm F
  J: "[eb4,g4]@7 ~ [c4,eb4,g4]@4 [a3,c4,eb4]@3 ~, [f2,f3]@15 ~, a3@3 ~", // Eb Cm Adim F
  K: "[f3,bb3,d4,f4]@5 ~ [bb3,d4,f4]@2 [f3,c4,d4,f4]@3 ~ [f3,bb3,d4,f4]@3 ~, bb2@13 ~@3", // Bb Dm7 Bb
  L: "[f2,f3,a3,c4,f4]@6 ~@2 [f2,f3,c4,f4,a4]@3 ~ [bb2,f3,d4,f4,bb4]@3 ~", // F Bb
  M: "[eb4,g4,bb4]@5 ~@3 [g4,bb4,eb5,g5]@7 ~, [eb2,eb3]@13 ~@3", // Eb
  N: "[f4,bb4,d5,f5]@6 ~@2 [c4,f4,c5]@3 ~ [d4,f4,bb4,d5]@3 ~, [bb1,bb2]@13 ~@3", // Bb F5 Bb
  O: "[[f4,bb4,d5,f5]@6 ~@2 [g4,d5]@4 [a4,d5]@3 ~@3 g4@2 d4@2 g4 ~ c4@2 ~@4 bb4@2 [c4,f4]@4 c4@2 f4@2 g4@4 f4@4, [bb1,bb2]@12 ~@4 g3@15 ~ [f2,f3]@14 ~@2, ~@8 d4@10 ~@6 [g4,c5]@8 [a4,c5]@7 ~@9, ~@16 [g2,bb4,d5]@7 ~ c3@24, ~@26 e4@2 c4@4 ~@8 [c4,a4,c5]@7 ~]/3", // Bb G5 D5 F5 Bb F C5 Am …
  P: "[d4@2 f4@2 d4@2 f4@2 e4@4 ~@2 e4@2 g4@4 f4@4 g4@3 ~ [eb4,f4,c5]@3 ~, [g4,bb4]@8 c4@19 ~@5, [g2,g3]@6 ~@2 [e2,e3,a4]@8 [f2,f3]@15 ~, ~@12 c5@4 [a4,c5]@11 ~@5]/2", // F7 Gm G A5 F Am
  Q: "[[bb1,bb2,f4,bb4,d5]@47 ~]/3", // Bb
})).s("gm_piano").gain(0.37)

// chords · vibraphone
const vibraphone = note("<~@22 A B ~@2 C D E F G H I J K ~@11 A B ~@2 C D E F G H I J K ~@40 L ~@2>".pickRestart({
  A: "~@8 [bb4,eb5] ~@3 [bb4,d5] ~@3", B: "[a4,c5]@3 ~@5", C: "~@8 [a4,c5] ~@3 [bb4,d5] ~@3", D: "~@8 [bb4,eb5] ~@7",
  E: "[bb4,f5] ~@15", F: "~@4 [bb4,g5]@3 ~", G: "[bb4,f5]@7 ~@9", H: "~@2 bb4@2 d5 ~ g5@2 e5@5 ~@3",
  I: "~@2 a4 ~ c5@2 f5@2 a5@5 ~@3", J: "~@2 bb4@2 d5@2 g5@2 c5@5 ~@3", K: "~@2 c5@2 f5@2 a5@2 c6@3 ~@5",
  L: "~@2 f5 bb5@3 ~@2, bb4@11 ~@5, ~ d5@5 ~@2",
})).s("gm_vibraphone").gain(0.36).pan(0.6)

// other · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~@11 A B C D E F B G F H I J K L M N O P Q R S T U V A B C D E F B G F H I J K L M N O P Q R S T U V ~@8 A B C D E F B
  W A X C D E F B W A B C D E F B W A Y C D E F B W Z@3
>`.pickRestart({
  A: "bb2@5 ~ bb2 ~ bb2@6 ~@2", B: "bb2@5 ~ bb2 ~ bb2@7 ~", C: "eb3@5 ~ eb3 ~ eb3@7 ~", D: "eb3@5 ~ eb3 ~ eb3@4 d3@4",
  E: "c3@5 ~ c3 ~ c3@7 ~", F: "f2@5 ~ f2 ~ f2@6 ~@2", G: "bb2@6 ~@2 eb3@3 ~ bb2@3 ~", H: "f2@5 ~ f2@2 f3@3 ~ f2@4",
  I: "bb2@5 ~ bb2 ~ f3@3 ~ bb2@3 ~", J: "f2@5 ~ c3@2 eb3@3 ~ bb2@4", K: "f2@5 ~ f2 ~ f2@4 c3@4",
  L: "f2@5 ~ f2@2 f3@4 c3@3 ~", M: "bb2@5 ~ bb2 ~ bb2@4 g2@3 ~", N: "f2@5 ~ f2 ~ f2@4 bb2@4",
  O: "eb3@5 ~ eb3 ~ eb3@4 c3@3 ~", P: "bb2@6 bb2 ~ bb2@4 g2@2 f2 ~", Q: "eb2@5 ~ eb2@2 eb3@5 ~ eb3@2",
  R: "bb2@5 ~ bb2 ~ bb2@4 a2@4", S: "g2@5 ~ g2@2 c3@5 ~ c3@2", T: "f2@5 ~ f2@2 f2@4 a2@4", U: "g2@5 ~ g2@2 e2@6 e2@2",
  V: "f2@5 ~ f2@2 g2@4 f2@3 ~", W: "bb2@6 [d3,f3] ~ [eb3,g3]@4 [d3,f3]@4", X: "bb2 ~@5 bb2 ~ bb2@7 ~",
  Y: "bb2@5 ~ bb2 ~ bb2@3 ~@5", Z: "[bb2@47 ~]/3",
})).s("gm_electric_guitar_muted").gain(0.45)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@11 A B C D E F G H I J K L M N O P Q R S T U V W X A B C D E F G H I J K L M N O P Q R S T U V W X ~@8 A B C D E F G
  Y A Z C D E F G Y A B C D E F G Y A B C D E F G Y AA@3
>`.pickRestart({
  A: "[bb2,f3,bb3,d4,bb4]@5 ~ [bb3,d4,bb4] ~ [bb2,f3]@2 [bb3,d4,bb4] ~ [bb2,f3] ~ [bb3,d4,bb4]@2", // Bb Bb5 Bb Bb5 Bb
  B: "[bb2,f3]@4 [bb3,d4,bb4]@2 [bb2,f3] ~ [bb2,f3]@2 [d4,f4,a4] ~ [bb2,f3]@2 [d4,f4,a4]@2", // Bb5 Bb Bb5 Dm Bb5 Dm
  C: "[eb3,g3]@2 [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@2 [eb3,g3]@2 [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@2", // Eb
  D: "[eb3,g3]@2 [bb3,eb4,g4]@3 ~ [bb3,eb4,g4] ~ [eb3,bb3,g4]@2 eb4@2 [d3,a3,f4]@2 d4 ~", // Eb Dm
  E: "c3@2 [g3,eb4,g4]@3 ~ [g3,eb4,g4] ~@3 [g3,eb4,g4]@2 ~@2 [g3,eb4,g4] ~", // Cm
  F: "f3@2 [a3,d4,f4]@3 ~ [a3,d4,f4] ~ f3@2 [bb3,d4,f4] ~ f3@2 [a3,c4,f4]@2", // Dm Bb F
  G: "[f3,bb3]@2 [d4,f4]@3 ~ [d4,f4,bb4]@2 [f3,bb3]@2 [c4,f4,bb4]@3 ~ [d4,f4,bb4] ~", // Bb5 Dm Bb Bb5 Fsus4 Bb
  H: "[f3,bb3]@2 [d4,f4,bb4]@3 ~ [d4,f4,bb4] ~ [bb3,eb4,g4]@3 ~ [bb3,d4,f4]@3 ~", // Bb5 Bb Eb Bb
  I: "[f3,a3]@2 [c4,f4] [f3,a3,c4,f4]!2 ~@5 [f3,a3,c4,f4] ~@3 [f3,a3,c4,f4] ~", // F F5 F
  J: "~@2 [f3,a3,c4,f4]!3 ~@5 [f3,a3,c4,f4] ~@3 [f3,a3,c4,f4] ~", // F
  K: "[f3,bb3,d4,f4] ~ [f3,bb3,d4,f4]!3 ~@5 [f3,bb3,d4,f4] ~@3 [f3,bb3,d4,f4] ~", // Bb
  L: "[f3,a3,c4,f4]@5 ~@3 [bb3,eb4,g4]@3 ~ [bb3,d4,f4]@3 ~", // F Eb Bb
  M: "[f3,a3,c4,f4] ~ [f3,a3,c4,f4]!3 ~@5 [f3,a3,c4,f4] ~@3 [f3,a3,c4,f4] ~", // F
  N: "[f3,a3,c4,eb4,f4] ~ [f3,a3,c4,eb4,f4]!3 ~ [f3,a3,c4,eb4,f4] ~@3 [f3,a3,c4,eb4,f4] ~@3 [f3,a3,c4,eb4,f4] ~", // F7
  O: "[f3,bb3,d4,f4] ~ [f3,bb3,d4,f4]!3 ~ [f3,bb3] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ bb3 ~ [f3,bb3,d4,f4] ~", // Bb Bb5 Bb
  P: "[f3,a3,c4,f4]@6 ~@2 [f3,a3,c4,f4]@3 ~ [f3,bb3,d4,f4]@3 ~", // F Bb
  Q: "[bb3,eb4,g4] ~ [bb3,eb4,g4]!3 ~ [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~", // Eb
  R: "[bb3,d4,f4]@2 [bb3,d4,f4]!3 ~ [bb3,d4,f4] ~@3 [bb3,c4,f4] ~@3 [bb3,d4,f4] ~", // Bb Bbsus2 Bb
  S: "[bb3,eb4,g4]@2 [bb3,eb4,g4]!3 ~ [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~", // Eb
  T: "[bb3,d4,f4] ~ [bb3,d4,f4]!3 ~ [bb3,d4,f4] ~@3 [bb3,c4,f4] ~@3 [bb3,d4,f4] ~", // Bb Bbsus2 Bb
  U: "[bb3,d4,f4] ~ [bb3,d4,f4]!3 ~ [bb3,e4,g4] ~@3 [bb3,e4,g4] ~@3 [bb3,e4,g4] ~", // Bb Edim
  V: "[a3,c4,f4] ~ [a3,c4,f4]!3 ~ [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  W: "[bb3,d4,g4] ~ [bb3,d4,g4]!3 ~ [bb3,d4,g4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Gm Am
  X: "[a3,c4,f4] ~ [a3,c4,f4]!3 ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // F
  Y: "[f3,bb3]@2 [d4,f4,bb4]@3 ~ [d3,f3,d4,f4,bb4] ~ [eb3,g3,bb3,eb4,g4]@3 ~ [d3,f3,bb3,d4,f4]@3 ~", // Bb5 Bb Eb Bb
  Z: "f3@4 [bb3,d4,bb4]@2 [bb2,f3] ~ [bb2,f3]@2 [d4,f4,a4] ~ [bb2,f3]@2 [d4,f4,a4]@2, bb2 ~@15", // Bb Bb5 Dm Bb5 Dm
  AA: "[[f4,d5]@3 ~, bb2@47 ~]/3", // Dm
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0.6)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@11 A@2 B@2 C D@3 E F G ~ H ~ I ~@2 J ~ K L ~@2 M A@2 B@2 C D@3 E F G ~ H ~ I ~@2 J ~ K L ~@2 M ~@8 A@2 B@2 C D@3 A@2
  B@2 C D@3 A@2 B@2 C D@3 A@2 B@2 C D@3 N@3
>`.pickRestart({
  A: "[~ [d4,bb4]@23 ~@4 [c4,a4]@3 ~]/2", B: "[~ [eb4,bb4]@20 ~@11, bb3@5 ~@3]/2", C: "~ eb4@14 ~, g3@15 ~",
  D: "[~@17 [f4,bb4]@20 ~@11, ~@15 d3@22 ~@11]/3", E: "~@2 a3 ~@3 [a3,c4,f4] ~@9",
  F: "~@6 [a3,c4,f4] ~@3 eb4 ~@3 eb4 ~", G: "~@6 [bb3,d4,f4] ~@9", H: "~@6 [a3,c4,f4] ~@9", I: "~@6 d4 ~@9",
  J: "~@8 [f3,bb3,c4]@3 ~ [f3,bb3,d4]@3 ~", K: "~@10 d4 ~@5", L: "g3 ~ g3!3 ~ d4 ~@3 c4@3 ~ c4 ~",
  M: "~@10 [eb4,g4]@3 ~@3", N: "[~@2 [d4,bb4]@43 ~@3, ~ [f3,bb3]@44 ~@3]/3",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.4)

// other · tubular bells · "Tubular"
const tubular_bells = note(`<
  ~@19 A ~@2 B C ~@2 D ~@16 A ~@2 B C ~@2 D ~@19 E F ~@6 E G ~@6 E G ~@6 H I ~@3 J@2 ~
>`.pickRestart({
  A: "f5@3 ~", B: "~@8 eb5 ~@3 bb4 ~@3", C: "f5@11 ~@5", D: "~@8 f5 ~@3 bb4 ~@3", E: "~@8 eb5 ~@3 d5 ~@3", F: "c5@7 ~",
  G: "c5@9 ~@7", H: "~@8 eb5@3 ~ d5@3 ~", I: "c5", J: "bb5/2",
})).s("gm_tubular_bells").gain(0.56).pan(0.4)

// other · music box · "Bells"
const music_box = note(`<
  ~@11 A B C D E@2 F ~ G ~@11 H I J K A B L D E@2 F ~ G ~@11 H I J K ~@8 M B C D E@2 F ~ A B C D E@2 F ~ M B N D E@2 F ~
  M B N D E@2 F ~ O ~@2
>`.pickRestart({
  A: "~@4 d7@2 ~@2 [c5,c7] ~@3 [bb4,bb6]@2 ~@2, ~@4 d5 ~@11", B: "~@2 [d5,d7] ~ [c5,c7] ~ [bb4,bb6] ~",
  C: "~@4 [eb5,eb7]@2 ~@2 [d5,d7]@3 ~ [c5,c7]@3 ~", D: "~@4 [eb5,eb7]@2 ~@2 [eb5,eb7]@3 ~ [d5,d7]@3 ~",
  E: "~@4 [eb5,eb7]@3 ~ [d5,d7]@3 ~ [c5,c7]@3 ~", F: "~@4 [d5,d7]@3 ~ [c5,c7]@3 ~ [bb4,bb6]@4", G: "[f6,f7]@7 ~@9",
  H: "bb5@7 ~ c6@7 ~", I: "a5@7 ~ g5@4 f5@3 ~", J: "g5@7 ~ a5@7 ~", K: "f5@3 ~",
  L: "~@4 [eb5,eb7]@2 ~@2 [d5,d7]@3 ~ [c5,c7]@4", M: "~@2 d7 ~ c5 ~ [bb4,bb6] ~, ~@4 d5 ~@3 c7 ~@7",
  N: "~@4 [eb5,eb7]@2 ~@2 d7@3 ~ [c5,c7]@3 ~, ~@8 d5 ~@7", O: "~@4 [d5,d7] ~@3 [c5,c7] ~@3 [bb4,bb6] ~@3",
})).s("gm_music_box").gain(0.31).pan(0.4)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@3 A@2 B C D E F A F G H C I J G K J L M N O P Q R S T U V W X Y Z F G H C I J G K J L M N O P Q R S T U V W X Y Z
  A@2 B C D E F A F G H C I J G AA F G H C I J G AA F G H C I J G AA F G H C I J G AA AB@3
>`.pickRestart({
  A: "bb1@5 ~ bb1 ~ bb1@5 ~@3", B: "eb2@5 ~ eb2 ~ eb2@6 ~@2", C: "eb2@5 ~ eb2 ~ eb2@4 d2@4", D: "c2@5 ~ c2 ~ c2@6 ~@2",
  E: "f1@5 ~ f1 ~ f1@7 ~", F: "bb1@5 ~ bb1 ~ bb1@6 ~@2", G: "bb1@5 ~ bb1 ~ bb1@7 ~", H: "eb2@5 ~ eb2 ~ eb2@7 ~",
  I: "c2@5 ~ c2 ~ c2@7 ~", J: "f1@5 ~ f1 ~ f1@6 ~@2", K: "bb1@6 ~@2 eb2@3 ~ bb1@3 ~", L: "f1@5 ~ f1@2 f2@3 ~ f1@4",
  M: "bb1@5 ~ bb1 ~ f2@3 ~ bb1@3 ~", N: "f1@5 ~ c2@2 eb2@3 ~ bb1@4", O: "f1@5 ~ f1 ~ f1@4 c2@4",
  P: "f1@5 ~ f1@2 f2@4 c2@3 ~", Q: "bb1@5 ~ bb1 ~ bb1@4 g1@3 ~", R: "f1@5 ~ f1 ~ f1@4 bb1@4",
  S: "eb2@5 ~ eb2 ~ eb2@4 c2@3 ~", T: "bb1@6 bb1 ~ bb1@4 g1@2 f1 ~", U: "eb1@5 ~ eb1@2 eb2@5 ~ eb2@2",
  V: "bb1@5 ~ bb1 ~ bb1@4 a1@4", W: "g1@5 ~ g1@2 c2@5 ~ c2@2", X: "f1@5 ~ f1@2 f1@4 a1@4", Y: "g1@5 ~ g1@2 e1@6 e1@2",
  Z: "f1@5 ~ f1@2 g1@4 f1@3 ~", AA: "bb1@6 ~@2 eb2@3 ~ d2@3 ~", AB: "[bb1@11 ~]/3",
})).s("gm_fretless_bass").gain(0.48)

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

// drums · rim
const rim = s("rim").struct("<[x!4] ~@74 [~ x ~ x ~ x ~ x]!24 ~@3>").gain(0.43)

// drums · snare
const snare = s("sd").struct("<~@11 A@7 B C@12 D C D ~ A@7 B C@12 D C D ~@9 A@7 B A@7 ~ A@7 ~ A@7 ~@4>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~ x ~ x", C: "~@2 x!3 ~@7 x ~@3", D: "~@2 x!3 ~ x ~@5 x ~@3",
})).gain(0.43)

// drums · low tom
const low_tom = s("lt").struct("<~ A@9 B ~@23 C ~@23 C A@7 B ~@15 D ~@7 D ~@7 D ~@3>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~ x ~", C: "~@4 x!2 ~ x", D: "~@4 x!2 ~@2",
})).gain(0.43)

// drums · hihat
const hihat = s("hh").struct("<~@19 A B@2 C D B E C ~@16 A B@2 C D B E C ~@51>".pickRestart({
  A: "~@2 x ~ x!2 ~ x", B: "x ~ x!3 ~ x ~ x ~ x ~@3 x ~", C: "x ~ x!3 ~ x ~@9", D: "~@2 x!3 ~ x ~ x ~ x ~@3 x ~",
  E: "x ~ x!2 ~@2 x ~ x ~ x ~@3 x ~",
})).gain(0.36)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@19 A ~ B ~@3 C ~@17 A ~ B ~@3 C ~@52>".pickRestart({
  A: "~@3 x ~@4", B: "~@7 x ~@8", C: "~ x ~@2",
})).gain(0.21)

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

// drums · open hat
const open_hat = s("oh").struct("<~@19 A@3 B A@3 B ~@16 A@3 B A@3 B ~@51>".pickRestart({
  A: "~@3 x", B: "~ x",
})).gain(0.43)

// drums · high tom
const high_tom = s("ht").struct("<~@82 [~@2 x!2 ~@2 x ~] ~@7 [~@2 x!2 ~@2 x ~] ~@7 [~@2 x!2 ~@2 x ~] ~@3>").gain(0.64)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@11 A B C D E F@2 D ~@8 G H I J@2 H J K A B C D E F@2 D ~@8 G H I J@2 H J K ~@8 A B C D E F@2 D L H@2 D M H@2 D L H@2
  D M H@2 D L H@2 D M H@2 D N ~@2
>`.pickRestart({
  A: "x ~ x!2 ~@2 x!2", B: "x ~ x ~ x!4", C: "x ~ x!6", D: "x!4 ~@4", E: "~@2 x!4 ~ x", F: "x ~ x!2 ~ x!3",
  G: "~@2 x!3 ~ x ~ x ~@3 x ~ x ~", H: "x!8", I: "x!5 ~ x!2", J: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", K: "x!2 ~@6",
// … 24 more lines

More by The Four Seasons