Strudelify

End of the Line

Traveling Wilburys

KeyD majorTempo130 bpm
0:00/0:00
// End of the Line — Traveling Wilburys
// 130 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · electric bass finger · "Fing. Bass"
const bass = note(`<
  A@6 B C D E F G D E F H D E F I D E F D J G@2 D J G I D E G@2 D@2 K L D E F G D E F H D E F I D E F D J G@2 D J G I D
  E G@2 D@2 K L D E F G D E F H D E F I D E F D J G@2 D J G I D E G@2 D@2 K L D E F G D E F H D E F I D E F M D E F G D
  E F H D E F I D E F D@2 G D G D G N O ~@4
>`.pickRestart({
  A: "[d2@29 ~@3]/2", B: "~@5 b2 a2 f#2", C: "a2@13 ~@3", D: "d2@3 ~ d2@3 ~", E: "d2@5 ~ d2@2 d2@6 ~@2",
  F: "d2@3 ~ a2@3 ~", G: "g2@3 ~ g2@3 ~", H: "d2@5 ~ d2@2 a1@3 ~ b1@3 ~", I: "g2@6 ~@2 g2@3 ~ a2@3 ~",
  J: "d2@6 ~@2 d2@3 ~ d2@3 ~", K: "a2@3 ~ a2@3 ~", L: "a2@6 ~@2 a2@3 ~ b2@3 ~", M: "d2@6 ~@2 a2@3 ~ b2@3 ~",
  N: "a2@3 ~ g2@3 ~", O: "d2@13 ~@3",
})).s("gm_electric_bass_finger").gain(0.69).pan(0.8)

// chords · epiano1 · "Rhodes Piano"
const epiano1 = note(`<
  A B C D E F G H I@2 J A K@2 J L I@2 M N O@2 P Q B R@2 K@2 S@2 T U V@2 O@2 W@2 X@2 Y N K@2 M T X@2 Y Z X@2 M U@2 AA@2
  AB@2 V@2 T@2 AA@2 K@2 AC@2 O@2 J Z AD@2 M U I@2 J Z I@2 Y L T AE@2 O@2 AA@2 T@2 S@2 O@2 AC@2 K@2 Y AF K@2 J L K@2 P A
  AD@2 M B X@2 Y AF AD@2 J Q I@2 J AG O@2 M Q T C B C B C AH O@2 T AI@2
>`.pickRestart({
  A: "~@3 b4, [b3,g4], ~ g5, ~@5 d5@3", B: "~@6 f#4@9 ~, f#5@15 ~, ~@2 d5@13 ~, ~@4 a4@11 ~", C: "[g3,b3,d4]@3 b3, d2",
  D: "[g3,b3,d4]@2 [a3,c#4,e4]@2 ~@3 f#4, ~ d3, ~@5 a3@3, ~@3 d4", E: "[d2,g3,b3,d4]@7 ~",
  F: "[g3,b3,d4] [a3,c#4,e4] [g3,b3,d4] [a3,c#4,e4]", G: "[d3,f#3,a3,d4]@7 ~",
  H: "~@4 e4 f#4@3 e4 ~@3 b3@2 c#4@2, ~@2 a4@3 ~ e4@2",
  I: "[~@28 [d4,a4] ~@3, d4@26 a3@5 ~, ~ a4@12 ~@3, ~@3 f#5@12 ~]/2", // D5
  J: "[a3,d4,f#4]@3 ~ [a3,c#4,e4]@2 ~ c#4, ~ a2, ~@3 e3", K: "[a3@12 ~@3 d5, [d3,d4], f#4@13 f#4@3, ~@3 a3, ~@7 a4]/2",
  L: "~@3 a4, [a3,f#4], ~ f#5, ~@5 d5@3", M: "[a3,d4,f#4]@3 ~@4 c#4, ~ a2, ~@5 e3@3, ~@3 a3",
  N: "~@6 g4@9 ~, g5@15 ~, ~@2 d5@13 ~, ~@4 b4@11 ~",
  O: "[[f#4,a4]@18 ~@2 e4 f#4@3 e4 f#4 e4@2 ~@2 d4 ~, d3, d4@29 ~@3, ~@18 a3@13 ~, ~@20 a4@3 ~ a4@7 ~]/2", // F#m
  P: "[f#3,a3,d4]@3 ~@4 c#4, ~ a2, ~@5 e3@3, ~@3 a3", Q: "~@4 a4 b4@3 a4 ~@3 e4@2 f#4@2, ~@2 d5@3 ~ a4@2",
  R: "[b3@22 ~@6 g4@3 ~, b4@31 ~, g4@7 ~, d4@24 d4@7 ~, ~@22 b3@9 ~]/2", S: "[[g3,b3,d4]@14 ~ g4, g2, ~@7 b3]/2",
  T: "[d3,a3,d4,f#4]@7 ~", U: "[a3,d4,f#4]@3 a3, d3",
  V: "[~@6 [b4,d5,g5] ~@7 b4@12 ~@2 b4 ~ b4 ~, [g2,d4], ~@7 [d5,g5]@9, ~@13 b3@3]/2", // G G5
  W: "[~@15 a4, [a2,a3], e4@7 e4, c#4@13 c#4@3, ~@3 e3]/2", // A
  X: "[a3@22 ~@6 f#4@3 ~, a4@31 ~, f#4@7 ~, d4@24 d4@7 ~, ~@22 a3@9 ~]/2", Y: "[a3,d4,f#4]@3 ~ [a3,c#4,e4]@3 ~",
  Z: "[g3,b3,d4]@3 b3, g2", // G
  AA: "[[b4,d5]@18 ~@2 a4 b4@3 a4 b4 a4@2 ~@2 g4 ~, g2, g4@29 ~@3, ~@18 d4@13 ~, ~@20 d5@3 ~ d5@7 ~]/2", // Bm
  AB: "[a3@12 ~@3 d5, [d3,f#3,d4], ~@3 a3, ~@13 f#4@3, ~@7 a4]/2", // D
  AC: "[[c#4,e4]@18 ~@2 b3 c#4@3 b3 c#4 b3@2 ~@2 a3 ~, a2, a3@29 ~@3, ~@18 e3@13 ~, ~@20 e4@3 ~ e4@7 ~]/2", // C#m
  AD: "[[a3,d4,f#4]@14 ~ f#4, d3, ~@7 a3]/2", AE: "[~@28 [d4,b4] ~@3, d4@26 b3@5 ~, ~ b4@12 ~@3, ~@3 g5@12 ~]/2",
  AF: "~@4 d4 e4@3 d4 ~@3 a3@2 b3@2, ~@2 g4@3 ~ d4@2", AG: "[g2,g3,b3,d4]@7 ~", AH: "[a3,c#4,e4]@3 ~ [g3,b3,d4]@3 ~",
  AI: "[~ [d4,f#4,a4]@19 a3@2 d4@2 [a3,d4,f#4,a4]@5 ~@3, ~ a3@18 ~@13]/2", // D
})).s("gm_epiano1").gain(0.33).pan(0.4)

// chords · electric guitar muted · "muted Guitar"
const electric_guitar_muted = note(`<
  ~@8 A B C D B@2 C B A B C E A B C B A ~@14 B@2 C D B@2 C B@3 C D A B C B@2 ~@14 B@2 C D B@2 C B@3 C E B@2 C A B ~@14
  B@2 C D B@2 C A B@2 C D A B C B@3 C D A B C A@2 B C E B@2 C B@2 ~@9 F G
>`.pickRestart({
  A: "~@4 [a4,f#5] ~@5 a4 ~ [a4,f#5] ~@3", B: "~@4 [a4,f#5] ~@7 [a4,f#5] ~@3", C: "~@4 [a4,f#5] ~@7 [e4,c#5] ~@3",
  D: "~@4 [b4,g5] ~@7 [b4,g5] ~@3", E: "~@4 [b4,g5] ~@5 b4 ~ [b4,g5] ~@3", F: "~@4 [f#4,f#5] ~@7 [f#4,f#5] ~@3",
  G: "~@4 [f#4,f#5] ~@3", // F#
})).s("gm_electric_guitar_muted").gain(0.3)

// chords · electric guitar muted · "muted Guitar"
const electric_guitar_muted_2 = note(`<
  A B A C D E F G H@2 I J H@2 K L H@2 M A H@2 N L F O@2 F P O@2 Q L O@2 H@2 R@2 H@2 S J H@2 S F H@2 N A H@2 T Q B O@2 U
  V O@2 L B O@2 U V R@2 H@2 I W H@2 X F H@2 Y W H@2 X L@2 O@2 H@2 O@2 F Q O@2 F Z R@2 H@2 AA J H@2 N B H@2 S J H@2 I B
  H@2 K AB H@2 T L H@2 S AB H@2 K L Q AC F AC F AC AD F P Q AE AF
>`.pickRestart({
  A: "[g2,d3] ~ g2 ~ [g2,e3] ~ g2 ~ [g2,d3] ~ g2 ~ [g2,e3] ~ g2 ~", // G5 C G5 C
  B: "~@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,f3]@2 f#3 ~", // D5 Dm
  C: "[d2,d3] ~ [d2,d3] ~ [d3,e3] ~ [d3,e3] ~@5 [d3,a3] ~ [d3,a3] ~", // D Dsus2 D5
  D: "~@2 [d2,d3] ~ [d2,d3] ~ [d2,d3] ~@3 d3 ~ [d2,d3] ~ [d2,d3] ~", // D
  E: "[d2,d3] ~ [d2,d3] ~ [d3,e3] ~ [d3,e3] ~ [d2,d3] ~ [d2,d3] ~ [d3,e3] ~ [d3,e3] ~", // D Dsus2 D Dsus2
  F: "[d3,a3] ~ d3 ~ [d3,b3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,b3] ~ d3 ~", // D5 G D5 G
  G: "~@2 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,c3]@2 c#3 ~", // A5 Am
  H: "[[d3,a3] ~ d3 ~ [d3,a3,b3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,b3] ~ [d3,d4]@4 d3 ~ [d3,b3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,b3] ~ d3 ~]/2", // D5 Bm7 D5 G D G D5 G
  I: "~@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [a2,e3]@4 [a2,e3] ~ [a2,e3] ~", // D5 A5
  J: "~@2 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~@3 d3 ~ [g2,d3] ~ [g2,d3] ~", K: "~@4 [d3,a3] ~ [d3,a3] ~@5 [a2,e3] ~ [a2,e3] ~",
  L: "~@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~@3 a3 ~ [d3,a3] ~ [d3,a3] ~", // D5
  M: "[d3,a3]@4 [d3,a3] ~ [d3,a3] ~ [a2,e3]@4 [a2,e3] ~ [a2,e3] ~", // D5 A5
  N: "[d3,a3]@4 [d3,a3] ~ [d3,a3] ~@3 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // D5 A5
  O: "[[g2,d3] ~ g2 ~ [g2,d3,e3] ~ g2 ~ [g2,d3] ~ g2 ~ [g2,e3] ~ [g2,g3]@4 g2 ~ [g2,e3] ~ g2 ~ [g2,d3] ~ g2 ~ [g2,e3] ~ g2 ~]/2", // G5 Em7 G5 C G C G5 C
  P: "f#3@2 a3@2 g3@2 e3 ~ f#3@2 d3@2 e3@2 c3 ~",
  Q: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  R: "[[a2,e3] ~ a2 ~ [a2,e3,f#3] ~ a2 ~ [a2,e3] ~ a2 ~ [a2,f#3] ~ [a2,a3]@4 a2 ~ [a2,f#3] ~ a2 ~ [a2,e3] ~ a2 ~ [a2,f#3] ~ a2 ~]/2", // A5 F#m7 A5 D A D A5 D
  S: "~@4 [d3,a3] ~ [d3,a3] ~@3 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // D5 A5
  T: "~@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~@5 [a2,e3] ~ [a2,e3] ~", // D5 A5
  U: "[d3,a3]@2 d3 ~ [d3,b3] ~ d3 ~ [d3,a3]@2 d3 ~ [d3,b3] ~ a3@2, ~@14 d3 ~", // D5 G D5 G
  V: "d3 ~ [d3,a3] ~ [d3,b3] ~ d3 ~ f3@2 f#3@2 c3@2 d3 ~", // D5 G
  W: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  X: "~@4 [d3,a3] ~ [d3,a3] ~ [a2,e3]@4 [a2,e3] ~ [a2,e3] ~", // D5 A5
  Y: "~@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~@3 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // D5 A5
  Z: "f#3@2 a3@2 g3@2 e3 ~ f#3@2 d3 ~ e3@2 c3 ~", AA: "[d3,a3]@4 [d3,a3] ~ [d3,a3] ~@5 [a2,e3] ~ [a2,e3] ~",
  AB: "~@2 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,a#2]@2 b2 ~", // G5 Gm
  AC: "~@2 [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,a#2]@2 b2 ~", // D Gm
  AD: "[a2,e3]@4 [a2,e3] ~ [a2,e3] ~ [g2,d3]@4 [g2,d3] ~ [g2,d3] ~", // A5 G5
  AE: "[d3,a3] ~ d3 ~ [d3,b3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,b3] ~ [d3,d4]@2", AF: "~@2 d4 ~ f3@2 f#3@2 d3@8",
})).s("gm_electric_guitar_muted").gain(0.37).pan(0.4)

// chords · pad choir · "Choir"
const pad_choir = note(`<
  ~@7 A@2 ~@3 B@2 ~@2 B@2 ~@2 B@2 ~@5 C D ~@2 C D ~@3 E@2 A@2 ~@3 B@2 ~@2 B@2 ~@2 B@2 ~@5 C D ~@2 C D ~@3 E@2 A@2 ~@3
  B@2 ~@2 B@2 ~@2 B@2 ~@5 C D ~@2 C D ~@3 E@2 A@2 ~@3 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@14
>`.pickRestart({
  A: "[~@7 [f#4,a4,d5]@9]/2", B: "[[f#4,a4,d5]@9 ~@7]/2", C: "~@6 d4!2", D: "d4!3 d4@3 ~@2",
  E: "[~@8 d4@2 d4@2 d4 ~ d4@4 c#4 ~ c#4@3 ~@9]/2",
})).s("gm_pad_choir").gain(0.2)

// chords · trumpet
const trumpet = note(`<
  A B A C A D E@4 F@2 G@2 H@2 G@2 F@2 I@2 J@2 K L@2 M N L@2 M N L@2 M N O P@3 F@2 G@2 H@2 G@2 F@2 Q@2 J@2 K L@2 M N L@2
  M N L@2 M N O R@3 F@2 G@2 H@2 G@2 F@2 Q@2 J@2 K L@2 M N L@2 M N L@2 M N O P@3 F@2 G@2 H@2 G@2 F@2 I@2 H@2 S@2 F@2 G@2
  H@2 G@2 F@2 Q@2 J@2 T A B A C A U V@2 ~@3
>`.pickRestart({
  A: "~@4 [d4,g4,b4]@2 [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@2", B: "[d4,g4,b4]@3 ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4]@8",
  C: "[d4,g4,b4]@3 ~ [e4,a4,c#5]@3 ~ [f#4,a4,d5]@8", D: "[d4,g4,b4]@3 ~ [e4,a4,c#5]@3 ~ [g4,b4,d5]@3 ~ [a4,c#5,e5]@3 ~",
  E: "[[a4,d5,f#5]@22 ~@8 [f#4,a4]@13 ~@3 [f#4,a4]@5 ~@9 [f#4,a4,d5]@3 ~]/4", F: "[~@7 [g4,b4]@3 ~@6]/2",
  G: "[[f#4,a4]@11 ~@3 [f#4,a4]@5 ~@9 [f#4,a4,d5]@4]/2", H: "[~@14 [f#4,a4]@5 ~@13]/2",
  I: "[[f#4,a4]@11 ~@3 [f#4,a4]@5 ~@9 f#4@4, ~@14 a4 ~]/2", J: "[~@14 [f#4,a4]@5 ~@9 [f#4,a4,d5]@4]/2",
  K: "~@4 [f#4,a4,d5]@3 ~@5 [f#4,a4,d5]@3 ~", L: "[[g3,b3,d4]@29 ~@3]/2", M: "~@4 d4@2 d4!2, ~@4 [f#3,a3]@3 ~",
  N: "d4@2 d4@2 d4@2 [f#3,a3,d4]@5 ~@5", O: "~@2 c#4@2 c#4@3 ~@5 [a3,c#4,e4]@4",
  P: "[~@4 [a3,c#4,e4]@3 ~@7 [f#4,a4]@13 ~@3 [f#4,a4]@5 ~@9 [f#4,a4,d5]@3 ~]/3", // A F#m D
  Q: "[[f#4,a4]@11 ~@3 [f#4,a4]@5 ~@9 [f#4,a4]@4]/2", // F#m
  R: "[~@4 [a3,c#4,e4]@3 ~@7 [f#4,a4]@14 ~@2 [f#4,a4]@5 ~@9 [f#4,a4,d5]@3 ~]/3", // A F#m D
  S: "[[f#4,a4]@11 ~@3 [f#4,a4]@5 ~@9 [f#4,a4,d5]@3 ~]/2", T: "~@4 [f#4,a4,d5]@3 ~@5 [f#4,a4,d5]@4",
  U: "[d4,f#4,b4]@3 ~ [e4,a4,c#5]@3 ~ [g4,b4,d5]@3 ~ [a4,c#5,e5]@3 ~", V: "[[a4,d5,f#5]@13 ~@3]/2",
})).s("gm_trumpet").gain(0.4).pan(0.7)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@3 B ~@12 C ~@7 A ~@13 C ~@15 A ~@23 B ~@3 A ~@3 A ~@5 D ~@7 B ~@3 C ~@7 A ~@3 A ~@19 E
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~@4 x!3 ~", D: "~@4 x!2 ~@2", E: "~ x ~@2",
})).gain(0.45).pan(0.3)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A@5 B A C A B@2 ~ A B@2 A@3 B A@5 B A@3 D A@2 C@2 A@9 C A@3 B A@5 B A@6 D A@2 C A@8 B@2 A@2 B A@3 B A C A B A B ~ A@3
  C A@3 C A E A@3 B A@5 B A ~ A B A B A@7 C A B@2 C A B A@3 ~ B@2 A@9 C A ~
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~ x ~@6", C: "~ x ~ x ~@4", D: "~@3 x ~@4", E: "~@5 x ~@2",
})).gain(0.22).pan(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@3 B ~@20 A ~@29 A ~@23 B ~@3 A ~@3 A ~@13 B ~@11 A ~@3 A ~@19 C>".pickRestart({
  A: "~ x", B: "~@3 x!2 ~@3", C: "~ x ~@6",
})).gain(0.45).pan(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ B ~@13 A ~@8 C ~ D ~@6 E A ~@2 E ~@8 A ~@3 F A ~@3 C ~@3 F ~@5 F ~ G ~@5 A ~@7 B ~@7 A ~@2 C E ~@6 A ~@11 F
  ~@5 F B ~@4 F ~ C H ~ F ~ A ~ F ~@3 E ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~ x ~@6", D: "~@15 x", E: "~@3 x ~@4", F: "~@7 x", G: "~@11 x ~@4",
  H: "~@3 x ~ x ~@2",
})).gain(0.39).pan(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@11 [x!3 ~@5] ~@74 [x!3 ~@5] ~@21 [x!3 ~@5] ~@36>").gain(0.39).pan(0.3)

// drums · crash
const crash = s("cr").struct(`<
  A ~@7 A ~@2 B A ~@2 B A ~@3 A ~@4 A ~@3 A ~@9 A ~@3 A ~@3 A ~@3 A ~@4 A ~@3 A ~@3 A ~@5 A ~@2 B A ~@3 A ~@3 A ~@3 B A
  ~@7 A ~@4 C A ~@3 A ~@2 B A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4 A ~@8 A D
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x", D: "~ x",
})).gain(0.39).pan(0.3)

// drums · ride
const ride = s("rd").struct("<~@4 A ~@28 A ~@57 A ~@44 A ~ A ~@6>".pickRestart({
  A: "x",
// … 22 more lines

More by Traveling Wilburys