Strudelify
Something to Talk About cover art

Luck Of The Draw

Something to Talk About

Bonnie Raitt

KeyE♭ minorTempo108 bpm
0:00/0:00
// Something to Talk About — Bonnie Raitt
// 108 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 8 harmonica (copy of ch 7 harmonica)
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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
const bass = note(`<
  ~@5 A@4 B C B D@2 E F G H I J K L M N O P@6 Q@2 B C B D@2 E F G H I J K L M N O P@6 Q@2 P@6 Q@2 R ~@3 S@2 T@2 S@6 T@2
  S@6 T@2 U@2 ~
>`.pickRestart({
  A: "[ab1@5 ~ ab1@2 bb1 ~ c2 ~ db2 ~ eb2@6 ~@2 eb2@2 bb2@2 eb2@3 ~ f2@6 ~@2 gb1@4 gb2@2 gb1 ~ db2@7 ~ e2@2 ~@2 gb2@3 ~@3]/4",
  B: "ab1@2 ab1@2 ~@2 ab1@3 ~ ab1@2 ab2@2 eb2@2", C: "ab1@2 ab1@2 ~@2 ab1@3 ~ ab1@2 eb2@2 ab2@2",
  D: "[ab1@2 ab1@3 ~ ab1@4 bb1@2 c2 ~ db2@4 db2@2 ~@2 db2@3 ~ db2@2 f2@2 ab2@2]/2",
  E: "db2@2 db2@2 ~@2 db2@3 ~ db2@2 f2@2 ab2@2", F: "ab1@2 ab1@3 ~ ab1@3 ~ ab1@2 ab2@2 eb2@2",
  G: "ab1!2 ~ ab1@2 ab1 eb2 ab2", H: "f2@6 f1@2 f2 ~ f2@2 f1@2 f2@2", I: "gb1@5 ~ gb1@2 gb2 ~ gb2 ~ gb2 db2 gb1 gb2",
  J: "f1@5 ~ f1@2 f2 ~ f2@2 f1@2 f2@2", K: "gb1@5 ~ gb1@2 gb2 ~ gb2@2 db2@2 gb2 ~", L: "b1@5 ~ b1 ~ b1 ~ b1@3 ~ b1@2",
  M: "e2@5 ~ e2 ~ e2 ~ e2@3 ~ e2 ~", N: "eb2@5 ~ eb2@2 eb2@2 bb1@2 eb2@2 bb1@2", O: "eb2@3 eb1 eb2 eb1 eb2 ~",
  P: "[ab1@5 ~ ab1@2 bb1 ~ c2 ~ db2 ~ eb2@6 ~@2 eb2@2 bb2@2 eb2@3 ~ eb1@2]/2",
  Q: "[f2@4 ~@2 gb1@4 gb2@2 gb1 ~ db2@7 ~ e2@2 ~@2 gb2@3 ~@3]/2", R: "b1 ~@3",
  S: "[b1@5 ~ b1@2 db2 ~ eb2 ~ e2 ~ gb2@6 ~@2 gb2@2 db3@2 gb2@3 ~ gb1@2]/2",
  T: "[ab2@4 ~@2 a1@4 a2@2 a1 ~ e2@7 ~ g2@2 ~@2 a2@3 ~@3]/2", U: "b1/2",
})).s("gm_electric_bass_finger").gain(0.74)

// chords · piano
const piano = note(`<
  ~@5 A@4 ~@14 B@2 C@6 D@2 ~@14 B@2 C@6 D@2 C@6 D@2 E ~@3 F@2 G@2 F@6 G@2 F@6 G@2 H@2 ~
>`.pickRestart({
  A: "[[ab3,c4,eb4]@9 ~ [bb3,eb4] ~ ab3 ~ [eb3,g3,bb3,eb4]@11 ~ [eb3,g3,bb3,eb4] ~@3 [f3,ab3,c4,f4,ab4]@6 ~@2 db4@4 ~@2 gb3@2 ~@4 db4@2 f4 ~ [e3,ab3,b3,e4,ab4]@4 [gb3,bb3,db4]@4 ~@2, ab2@5 ~@14 [gb2,gb3,bb3]@3 ~ [db3,ab3]@3 ~@6, ~@21 [ab3,db4]@2 ~@9]/4", // Ab Eb5 Eb Fm E Gb Db5
  B: "[[eb3,bb3,db4,eb4,g4]@3 ~@6 [bb3,eb4]@2 [eb3,bb3,eb4] bb3!2 [eb2,bb3,eb4,g4] ~, ~@3 [eb4,g4]@5 eb3@3 ~ [eb3,eb4]@2 ~@2, ~@3 eb3@4 db4@2 ~@7, ~@3 db4@3 bb3@3 ~@7, ~@3 bb3@2 eb2@4 ~@7]/2", // Eb7 Eb5 Eb
  C: "[[ab3,c4,eb4]@9 ~ [bb3,eb4] ~ ab3 ~ [eb3,g3,bb3,eb4]@11 ~ [eb3,g3,bb3,eb4] ~@5, ab2@5 ~@11]/2", // Ab Eb5 Eb
  D: "[[f3,ab3,c4,f4,ab4]@4 ~@2 db4@4 ~@2 gb3@2 ~@4 db4@2 f4 ~ [e3,ab3,b3,e4,ab4]@4 [gb3,bb3,db4]@4 ~@2, ~@3 [gb2,gb3,bb3]@3 ~ [db3,ab3]@3 ~@6, ~@5 [ab3,db4]@2 ~@9]/2", // Fm E Gb Db5
  E: "[b2,gb3,b3] ~@3", // B5
  F: "[[b3,eb4,gb4]@9 ~ [db4,gb4] ~ b3 ~ [gb3,bb3,db4,gb4]@11 ~ [gb3,bb3,db4,gb4] ~@5, b2@5 ~@11]/2", // B Gb5 Gb
  G: "[[ab3,b3,eb4,ab4,b4]@4 ~@2 e4@4 ~@2 a3@2 ~@4 e4@2 ab4 ~ [g3,b3,d4,g4,b4]@4 [a3,db4,e4]@4 ~@2, ~@3 [a2,a3,db4]@3 ~ [e3,b3]@3 ~@6, ~@5 [b3,e4]@2 ~@9]/2", // Abm G A E5
  H: "[b2,gb3,b3,eb4]/2", // B
})).s("gm_piano").gain(0.5)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@4 A@2 B C D ~@9 E F G H I J K L M N O L P@3 ~@9 E F G H I J K L M N O L P@3 Q R S T U V@3 W X@2 Y W Z AA@2 W AB AC
  AD W Z AA@2 W AB AC AD W Z AA@2 AE@2 ~
>`.pickRestart({
  A: "[~@6 ab3 ~ b3 bb3 ab3 ~ ab3 ~ gb4@14 ~@4]/2", B: "~@2 f4@4 eb4@2 c4@5 ~@3", C: "ab3@4 ab3 ~ ab3@4 c4@4 ab3@2",
  D: "db4@2 c4@2 db4@5 ~@7", E: "~@6 bb4 ab4 gb4@2 ab4@2 bb4@4", F: "ab4@9 ~@7", G: "~ bb4 ab4 gb4@4 ~",
  H: "~@6 [gb3,b3,eb4] ~@3 b3@2 bb3@2 b3@2", I: "e4@5 ~ eb4@4 db4@2 b3@3 ~",
  J: "~@2 bb3 ~ bb3 ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~", // Eb5
  K: "eb3 ~@3 eb4@3 ~, bb3@2 bb3@5 ~, ~ eb3@2 eb3@4 ~", L: "[ab2,eb3,ab3] ~@3", M: "~@6 eb4 ~ eb4@2 db4@2 eb4@2 db4 ~",
  N: "~@6 [ab2,eb3,ab3] ~@3 [ab2,eb3,ab3]@3 ~@3", O: "~@6 db4@2 eb4@2 db4@2 eb4@2 db4 ~",
  P: "[~@6 eb4 ~ eb4@2 db4@2 ~@2 [f2,f3]@7 ~ [gb2,gb3]@6 ~@2 [db3,ab3]@6 ~@2 e2@3 ~ gb2@4 ~@2]/3", // F Gb Db5
  Q: "a3@4 ab3@2 f3@2 ab3 ~ ab3@2 f3@2 ~@2", R: "gb3@2 ab3 ~ ab3@2 gb3@2 ab3@6 ~@2", S: "gb4@2 eb4 gb4",
  T: "~@2 gb3@2 ab3 ~ c4 ~ db4@2 c4@2 ab3@3 ~", U: "bb4@4 db5 ~ b4@2 ~@2 ab4@4 ~@2",
  V: "[f4@8 eb4@6 f4@7 ~ gb4@7 ~ f4@4 ab4@2 f4@3 ~ e4@4 gb4@2 ~@2]/3", W: "[b2,gb3,b3] ~@3",
  X: "[~@8 eb4@2 gb4 ~ eb5 ~ b4@6 ~@12]/2", Y: "~@8 e4 ~ e4 ~ d4 b3 d4 b3", Z: "~@6 gb4 ~ gb4@2 e4@2 ~@2 [ab2,ab3]@2",
  AA: "[[ab2,ab3]@5 ~ [a2,a3]@6 ~@2 [e3,b3]@6 ~@2 g2@3 ~ a2@4 ~@2]/2", AB: "~@6 gb4 ~ gb4@2 e4@2 gb4@2 e4 ~",
  AC: "~@6 [b2,gb3,b3] ~@3 [b2,gb3,b3]@3 ~@3", AD: "~@6 e4@2 gb4@2 e4@2 gb4@2 e4 ~", AE: "[b2,gb3,b3]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.8)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@2 B@2 C@4 D E F G H I J K L M N O P Q R S T U V@2 T U W@2 D E F G H I J K L M N O P Q R S T U V@2 T U W@2 T U V@2
  T U W@2 X Y@2 ~ Z AA AB@2 Z AA AC@2 Z AA AB@2 Z AA AC@2 Z AA AB@2 AD@2 ~
>`.pickRestart({
  A: "[[ab2,eb3,ab3,c4,eb4]@13 ~ [eb3,bb3,eb4]@18]/2", B: "[[ab2,eb3,ab3,c4,eb4]@13 ~ [eb3,bb3,eb4]@14 ~@4]/2",
  C: "[[ab3,c4,eb4]@4 [ab3,c4]@2 ~@2 [ab3,c4,eb4]@2 [ab2,eb3,ab3,c4,eb4]@4 [eb3,g3,bb3,eb4]@6 [eb3,eb4]@3 ~ [g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@4 [f3,c4]@4 ~@2 f4@2 [gb3,bb3,db4]@4 gb3@2 gb3@2 [db3,ab3,db4,f4]@4 ~@2 [ab3,db4,f4]@2 [e3,ab3,b3,e4]@4 [gb2,gb3,bb3,db4]@4 ~@2, [ab2,eb3]@7 [ab2,eb3]@3 ~@28 [gb2,db3]@8 ~@5 db3@3 ~@10, ~@4 eb4@3 ~@13 [g3,bb3]@2 ~ eb3@3 ~@8 [f3,c4]@4 ~@4 [bb3,db4]@4 ~@18]/4", // Ab Eb F5 Gb Db E Gb Ab5 …
  D: "[ab2,eb3,ab3,c4,eb4]@2 [ab3,c4,eb4] ~@3 [ab2,eb3,ab3,c4,eb4]@2 ~@2 [ab2,eb3,ab3,c4,eb4]@2 [ab2,ab3,db4,f4]@2 [ab2,ab3,c4,eb4]@2", // Ab Db Ab
  E: "~@2 [ab2,ab3,c4,eb4] ~@3 [ab2,ab3,c4,eb4]@3 ~ [ab2,ab3,c4,eb4] ~ [ab2,ab3,db4,f4]@2 [ab2,ab3,c4,eb4]@2", // Ab Db Ab
  F: "[eb3,ab3,c4,eb4] ~ [ab2,eb3,ab3,c4,eb4]@2 ~@2 [ab2,eb3,ab3,c4,eb4]@2 ~@2 [ab2,eb3,ab3,c4,eb4] ~ [ab2,ab3,db4,f4]@2 [ab2,ab3,c4,eb4] ~", // Ab Db Ab
  G: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~@3 [ab2,ab3,c4,eb4] ~@3 [ab2,ab3,c4,eb4] ~ [ab3,db4,f4] ~ [ab3,c4,eb4] ~, ab2 ~@3", // Ab Db Ab
  H: "~@2 [db4,f4]@3 ~ [db3,ab3,db4]@3 ~ [db3,ab3,db4]@2 [db3,ab3,db4,gb4]@2 [db3,ab3,db4,f4] ~, [db3,ab3]@5 ~@11", // Db Db5 Dbsus4 Db Db5
  I: "[db4,f4] ~ [db4,f4] ~@3 [db3,ab3,db4,f4]@2 ~@2 [db3,ab3,db4,f4]@2 [db4,gb4]@2 [db4,f4] ~, [db3,ab3] ~@3", // Db Gb5 Db Db5
  J: "[ab3,c4,eb4] ~ [ab3,c4,eb4]@2 ~@2 [ab2,eb3,ab3,c4,eb4]@2 ~@2 [ab2,eb3,ab3,c4,eb4] ~ [ab2,ab3,c4,f4]@2 [ab2,ab3,c4,eb4] ~, [ab2,eb3] ~@3", // Ab Fm Ab Ab5
  K: "[ab3,c4,eb4]@2 [ab3,c4,eb4] ~@3 [ab2,ab3,c4,eb4]@2 ~@2 [ab2,ab3,c4,eb4] ~ [ab2,ab3,c4,f4]@2 [ab2,ab3,c4,eb4] ~, ab2 ~@3", // Ab Fm Ab
  L: "[f3,ab3,c4,f4]@5 ~ [f3,ab3,c4,f4] ~@3 [f3,ab3,c4]@2 f4@3 ~", // Fm
  M: "[gb3,bb3,db4]@5 ~ [gb3,bb3,db4,f4] ~@3 [gb3,bb3,db4,gb4]@4 ~@2", // Gb Gbmaj7 Gb
  N: "[f3,ab3,c4,f4]@5 ~ [f3,ab3,c4,f4] ~@3 [f3,ab3,c4,f4] ~@3 f4 ~", // Fm
  O: "[gb3,bb3,db4,gb4]@4 ~@2 gb4 ~@3 [gb3,bb3,db4,gb4] ~@3 [gb3,bb3,db4,gb4] ~", // Gb
  P: "[b2,gb3,b3,eb4]@5 ~ [b2,gb3,b3,eb4] ~ gb3 ~ [gb3,b3,eb4] ~@5", // B
  Q: "[e3,ab3]@6 ~ [e3,ab3] [b3,e4]@2 [e3,ab3]@2 [b3,e4]@4, [b3,e4]@2 ~ [b3,e4] ~@4", // E E5 E E5
  R: "[eb4,g4] eb4@2 [bb3,eb4]!3 [eb3,bb3,eb4]!2, ~ g4@7", // Eb Eb5
  S: "[bb3,eb4]@2 [bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@2 [eb3,bb3,eb4] ~ [eb3,bb3,eb4]@4 [eb3,bb3,eb4] ~, eb3 ~@3", // Eb5
  T: "[ab3,c4,eb4]@2 [ab3,c4] ~ [ab3,c4,eb4] [ab2,eb3,ab3,c4,eb4]@2 ~, [ab2,eb3]@7 [ab2,eb3]@3 ~@6, ~@4 eb4@3 ~@9", // Ab Ab5
  U: "[eb3,g3,bb3,eb4]@4 [eb3,eb4]@3 ~ [g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@4 ~@2, ~@4 [g3,bb3]@2 ~ eb3@3 ~@6", // Eb Gm
  V: "[[ab3,c4,eb4]@4 [ab3,c4]@2 ~@2 [ab3,c4,eb4]@2 [ab2,eb3,ab3,c4,eb4]@4 [eb3,g3,bb3,eb4]@6 [eb3,eb4]@3 ~ [g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@4 ~@2, [ab2,eb3]@7 [ab2,eb3]@3 ~@22, ~@4 eb4@3 ~@13 [g3,bb3]@2 ~ eb3@3 ~@6]/2", // Ab Eb Ab5 Gm
  W: "[[f3,c4] ~ f4 [gb3,bb3,db4]@2 gb3!2 [db3,ab3,db4,f4]@2 ~ [ab3,db4,f4] [e3,ab3,b3,e4]@2 [gb2,gb3,bb3,db4]@2 ~, ~@2 [f3,c4]@4 [gb2,db3]@8 ~@5 db3@3 ~@10, ~@5 [bb3,db4]@2 ~@9]/2", // F5 Gb Db E Gb F5 Gb5 Bbm
  X: "[b2,gb3,b3] ~@3", Y: "[~@8 eb4@2 gb4 ~ eb5 ~ b4@6 ~@12]/2",
  Z: "[b3,eb4,gb4]@2 [b3,eb4] ~ [b3,eb4,gb4] [b2,gb3,b3,eb4,gb4]@2 ~, [b2,gb3]@7 [b2,gb3]@3 ~@6, ~@4 gb4@3 ~@9", // B B5
  AA: "[gb3,bb3,db4,gb4]@4 [gb3,gb4]@3 ~ [bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@4 ~@2, ~@4 [bb3,db4]@2 ~ gb3@3 ~@6", // Gb Bbm
  AB: "[[ab3,eb4] ~ ab4 [a3,db4,e4]@2 a3!2 [e3,b3,e4,ab4]@2 ~ [b3,e4,ab4] [g3,b3,d4,g4]@2 [a2,a3,db4,e4]@2 ~, ~@2 [ab3,eb4]@4 [a2,e3]@8 ~@5 e3@3 ~@10, ~@5 [db4,e4]@2 ~@9]/2", // Ab5 A E G A Ab5 A5 Dbm
  AC: "[[b3,eb4,gb4]@4 [b3,eb4]@2 ~@2 [b3,eb4,gb4]@2 [b2,gb3,b3,eb4,gb4]@4 [gb3,bb3,db4,gb4]@6 [gb3,gb4]@3 ~ [bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@4 ~@2, [b2,gb3]@7 [b2,gb3]@3 ~@22, ~@4 gb4@3 ~@13 [bb3,db4]@2 ~ gb3@3 ~@6]/2", // B Gb B5 Bbm
  AD: "[b2,gb3,b3]/2", // B5
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.3)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@5 A B ~ C ~@16 A B A B A B ~ C ~@16 A B A B A B ~ C A B A B A B ~ C ~@4 D E ~ F D E D E D E ~ F D E D E D E ~ F ~@3
>`.pickRestart({
  A: "~@3 [ab3,c4] ~@4", B: "~@3 [g3,bb3] ~@4", C: "~ [ab3,db4,f4] ~@6", D: "~@3 [b3,eb4] ~@4", E: "~@3 [bb3,db4] ~@4",
  F: "~ [b3,e4,ab4] ~@6", // E
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.3)

// chords · percussive organ
const percussive_organ = note(`<
  ~@6 A@3 ~@8 B C B C D E ~@2 F G ~ G F G H@2 I J K L M N O P B C B C D E ~@2 F G ~ G F G H@2 F G ~ G F G H@2 ~@4 Q R
  S@2 Q R ~ R Q R S@2 Q R ~ R Q R S@2 ~@3
>`.pickRestart({
  A: "[~@2 [bb5,eb6] ~ [eb5,eb6] ~@3 [ab5,eb6] ~ [eb5,g5,eb6]@3 ~ [f4,ab4,c5]@7 ~ [gb4,bb4,db5]@7 ~ [ab4,db5,f5]@8 [e4,ab4,b4,e5]@4 [gb4,bb4,db5]@4 ~@2, ~ eb5 ab5 ~ eb5 ~@19]/3", // Eb5 Eb Ab5 Eb Fm Gb Db E …
  B: "[f4,ab4,c5,f5]", C: "[gb4,bb4,db5,gb5]", D: "[b3,b4,eb5,gb5]", E: "[e4,ab4,b4,e5]@15 ~",
  F: "[c5,eb5,gb5,ab5]@3 ~@13", G: "~@2 [bb5,eb6] ~ [eb5,eb6] ~@3 [ab5,eb6] ~ [eb5,g5,eb6]@3 ~@3, ~ eb5 ab5 ~ eb5 ~@3",
  H: "[[f4,ab4,c5]@5 ~ [gb4,bb4,db5]@7 ~ [ab4,db5,f5]@8 [e4,ab4,b4,e5]@4 [gb4,bb4,db5]@4 ~@2]/2", // Fm Gb Db E Gb
  I: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 ab4 ~ [ab4,db5,f5]@2 [ab4,c5,eb5] ~", // Ab Db Ab
  J: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@5 [db5,f5] ~ [ab4,c5,eb5] ~, ~@6 ab4 ~", // Ab Db Ab
  K: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~ [ab4,db5,f5] ~ [ab4,c5,eb5] ~", // Ab Db Ab
  L: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Ab
  M: "~@2 [db5,f5,ab5] ~@3 [db5,f5,ab5] ~@3 [db5,f5,ab5] ~ [db5,gb5]@2 [db5,f5,ab5]@2, ~@12 bb5 ~@3", // Db Gb5 Db
  N: "~@2 [db5,f5,ab5] ~@3 [db5,f5,ab5] ~@3 [db5,f5,ab5]@2 ~@4", // Db
  O: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~ [ab4,db5,f5]@2 [ab4,c5,eb5] ~", // Ab Db Ab
  P: "~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5]@4 ~@2", Q: "[eb5,gb5,a5,b5]@3 ~@13",
  R: "~@2 [db6,gb6] ~ [gb5,gb6] ~@3 [b5,gb6] ~ [gb5,bb5,gb6]@3 ~@3, ~ gb5 b5 ~ gb5 ~@3", // Gb5 Gb B5 Gb
  S: "[[ab4,b4,eb5]@5 ~ [a4,db5,e5]@7 ~ [b4,e5,ab5]@8 [g4,b4,d5,g5]@4 [a4,db5,e5]@4 ~@2]/2", // Abm A E G A
})).s("gm_percussive_organ").gain(0.73)

// chords · piano · Eb Ab
const piano_2 = note("<[~@7 [bb3,eb4,g4]] [[c4,eb4,ab4]@13 ~@3] ~ [[c4,eb4,ab4]@3 ~] ~ [[c4,eb4,ab4]@3 ~] ~@86>")
  .s("gm_piano").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~ A@31 B A@23 B A@7 B A@7 B A@7 B A@8 C ~@2>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@3 x!2 ~ x", C: "x",
})).gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@15 B ~@3 A ~@3 C ~@15 B ~@3 A ~@3 C ~@15 C ~@15 B ~@3>".pickRestart({
  A: "~@9 x ~@2 x!2 ~@2", B: "~@12 x!3 ~", C: "~@3 x!3 ~@2",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@32 [~@7 x] ~@23 [~@7 x] ~@15 [~@7 x] ~@19>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [~ x ~ x]!4 [x!4]!84 ~@3>").gain(0.5)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B@3 A B A B A B A B A B A B A B A B A B A B A B@3 A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B@3 ~@3
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.15)

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@24 A ~@7 B ~@15 A ~@7 B ~@15 B ~@15 A ~@3>".pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@2",
})).gain(0.5)

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

stack(
  bass, piano, overdriven_guitar, acoustic_guitar_steel, acoustic_guitar_steel_2, percussive_organ, piano_2, kick,
  snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash
)

More by Bonnie Raitt