Strudelify

I Thank You

Sam & Dave

KeyE♭ majorTempo116 bpm
0:00/0:00
// I Thank You — Sam & Dave
// 116 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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.

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@14 A@2 B@2 C@2 D E F@2 G H I@3 J A@2 K@2 L@2 M N F I F O I@2 P Q R@2 C@4 S T U V W V X Y Z AA ~@2 AB F G I O@2 H I
  ~@3 AC@2 AD@2 AE AF AG AH@3 ~@5
>`.pickRestart({
  A: "[eb3@3 db3@11 ~@2]/2", B: "[eb3@5 ~ db3@23 ~@3]/2", C: "[eb3@6 db3@21 ~@5]/2", D: "eb3@3 db3@5", E: "a2@13 ~@3",
  F: "~@7 gb3@2 [g3,bb3] g3 ~ bb3@2 g3 ~", G: "~@7 gb3@2 [g3,bb3] [gb3,g3] ~ bb3@2 g3 ~",
  H: "~@7 gb3@2 bb3 [gb3,g3] ~ bb3@2 g3 ~", I: "~@7 gb3@2 bb3 g3 ~ bb3@2 g3 ~", J: "~@7 gb3@2 bb3 g3 ~ bb3@2 gb3 ~",
  K: "[eb3@6 db3@19 ~@7]/2", L: "[eb3@3 db3@9 ~@4]/2", M: "d3@6 db3@9 ~", N: "bb2@11 ~@5",
  O: "~@7 gb3@2 [g3,bb3] ~@2 bb3@2 g3 ~", P: "~@7 gb3@2 ~ bb3 ~ bb3@2 g3 ~", Q: "~@6 gb3@2 ~ bb3 ~@2 bb3@2 g3 ~",
  R: "[eb3@6 db3@23 ~@3]/2", S: "eb3@6 db3@9 ~", T: "bb2@3 ~", U: "~@4 [db4,f4,bb4] ~@7 [db4,f4,bb4] ~@3",
  V: "~@4 [bb3,eb4,ab4] ~@7 [bb3,eb4,ab4] ~@3", W: "~@4 [db4,f4,bb4] ~@7 [g3,db4,f4,bb4] ~@3",
  X: "~@4 [c4,eb4,g4] ~@7 [g3,c4,eb4,g4] ~@3", Y: "~@4 [db4,f4,ab4] ~@7 [ab3,db4,f4,ab4] ~@3",
  Z: "~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4] ~@3", AA: "~@4 [db4,f4,ab4] ~@7 [ab3,c4,f4,ab4] ~@3",
  AB: "~@7 gb3 ~ bb3 g3 ~ bb3@2 g3 ~", AC: "[~@6 eb5 db5@6 d5 db5 d5]/2",
  AD: "[bb4@2 ab4@2 f4@4 ~@2 f4@2 [gb4,eb5]@2 db5@9 ~@3 db5@3 db5@3]/2", AE: "bb4@5 ~@3",
  AF: "~@2 eb5@2 gb5@7 ~ eb5@2 ~@2", AG: "~@2 d5@3 ~ bb4@8 ab4 ~", AH: "[ab4@7 ~ ab4@4 ~@2 db5@12 d5@3 ~ bb4@13 ~@5]/3",
})).s("gm_overdriven_guitar").gain(0.33).pan(0.2)

// other · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note(`<
  ~@38 A B ~@4 C@2 ~@7 D E ~ F G ~ H ~ H ~@2 A ~@3 I C ~@5 J ~@4 K ~ L ~ M ~@5
>`.pickRestart({
  A: "~@6 d3 ~@9", B: "~@9 g3 ~@6", C: "~@10 g3 ~@5", D: "~@12 g2 ~@3", E: "~@4 g3 ~@7 g3 ~@3", F: "~@4 g3 ~@11",
  G: "~@4 gb3 ~@11", H: "~@4 ab3 ~@11", I: "~@10 gb3 ~@5", J: "~@13 db5 ~@2", K: "~@14 db5 ~", L: "~@12 gb4 ~@3",
  M: "~@11 g4 ~@4",
})).s("gm_overdriven_guitar").gain(0.05).pan(0.2)

// bass · fretless bass · "FRETLESS"
const bass = note("<~@6 A@8 B@7 C A@8 B@7 C A@8 B@7 C D@2 E@2 F@2 G H A@10 I@3 J K@3 L K@3 L M@3 J N O>".pickRestart({
  A: "eb2!2 eb3!2 eb2!2 eb3!2", B: "eb2!5 gb2 ab2 bb2", C: "bb2@4 bb1@4 bb2@4 bb1@3 ~",
  D: "[eb2@4 eb2 c2 bb1 ab1@2 ab1 c2@2 db2@2 d2@2]/2", E: "[eb2@8 eb2@2 c2@2 bb1@2 ab1@8 ab1 ~ bb1@4 b1@2 b1@2]/2",
  F: "[c2@6 c2@2 c2@5 ~ db2@8 db2@2 db2@6 ~@2]/2", G: "c2@3 c2 c2@3 ~", H: "db2 f1 gb1 g1 ab1@3 ~",
  I: "[eb2@8 eb2@2 c2@2 a1@2 ab1@9 ~ ab1@2 bb1@2 c2@2 db2@9 ~ db2@2 c2@2 b1@2 bb1@2]/3", J: "~ bb1 ~ bb1 ~ bb1 ~ bb1",
  K: "[eb2@3 ~ eb2 gb2 g2 ab2@4 ~ ab2 bb1 c2 db2@4 ~ db2 c2 b1 bb1]/3", L: "~@2 bb1@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 bb1 ~",
  M: "[eb2@7 ~ eb2@2 gb2@2 g2@2 ab2@8 ~@2 ab2@2 bb1@2 c2@2 db2@8 ~@2 db2@2 c2@2 b1@2 bb1@2]/3", N: "eb2", O: "eb2@3 ~",
})).s("gm_fretless_bass").gain(0.44).pan(0.3)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@9 A@2 ~@2 B C@2 D@2 E F G H ~@3 I@2 ~@2 J K@2 L@2 M N O P ~@3 Q@2 ~@2 R S@2 T U V@2 W X Y Z AA AB AC AD AE AF AG
  AH@2 ~ AI AJ@2 ~@2 AK@4 AL AM@8 AN@5 ~
>`.pickRestart({
  A: "[~@6 bb4!2 db5@2 bb4@2 ~@2 [g3,bb3,eb4]@14 ~@4]/2", B: "~@5 [eb3,g3,db4]@3",
  C: "[[eb3,g3,bb3] ~@9 [ab3,db4,gb4]@4 ab4@4 [ab3,db4,gb4]@2 ~@2 [g3,bb3,eb4]@7 ~@3]/2", // Eb Dbsus4 Eb
  D: "[~@10 gb3@2 g3@2 ~@2 [ab3,c4,eb4]@2 db3@2 ~@2 [eb3,g3,bb3]@5 ~@5, ~@7 eb3@2 ~@7]/2", E: "~@10 c5 ~@2 eb5 ~@2",
  F: "[ab3,db4,gb4]@2 [ab3,db4,gb4]@2 ~@2 [g3,bb3,eb4]@5 ~@5", G: "~@10 [gb3,bb3]@2 g3@2 [g3,bb3] ~",
  H: "[bb3,d4]@6 ab3@5 ~@5, ~@6 d4@3 ~@7", I: "[~@2 bb5@2 eb5@2 bb4 ~ bb3@2 [db4,gb4]@4 [eb3,bb3,eb4]@7 ~@11]/2",
  J: "~@6 ab4@2 ~@2 gb4@5 ~", K: "[~@10 [ab3,db4,gb4]@11 ~ [g3,bb3,eb4]@6 ~@4]/2",
  L: "[~@5 gb3 g3 ~ [ab3,c4,eb4] db3 d3 [eb3,g3,bb3]@2 ~@3, ~@7 eb3@2 ~@7]/2", M: "~@5 [db4,gb4,bb4] ~ [eb4,gb4,bb4]",
  N: "~@2 [ab3,db4,gb4]@2 [e4,f4] ~ [g3,bb3,eb4]@5 ~@5", O: "~@10 [eb3,bb3,eb4]@5 ~", P: "[bb3,d4]@3 [ab3,d4]@4 ~",
  Q: "[~@2 bb4!2 gb4@2 eb4@2 db4@2 [g3,db4,gb4]@2 ~@2 [g3,bb3,eb4]@6 ~@12]/2", R: "~@6 [db4,gb4,bb4]@7 ~@3",
  S: "[~@10 [ab3,db4,gb4]@2 [e4,f4] ~ [bb3,eb4]@4 gb3@4 [g3,bb3,eb4]@4 ~@6, ~@14 g3@3 ~@15]/2", // Dbsus4 Fmaj7 Eb5 Eb
  T: "~@5 [eb4,ab4,db5] ~ [ab3,db4,gb4,bb4]", U: "~@2 [db3,g3]@3 ~ [eb3,g3]@6 ~@4",
  V: "[~@10 [ab3,db4]@2 ~@2 [ab3,db4,gb4]@7 ~ [eb3,bb3,eb4]@6 ~@4, ~@14 f4 ~@17]/2", W: "~@5 [gb3,g3] bb3 ~",
  X: "[bb2,f3,bb3]@3 ~@4 f3@5 ~@2 [gb3,bb3]@2, ~@6 [bb2,ab3]@5 ~@5", // Bb5 Gb Bb7
  Y: "~@2 [gb3,bb3]@2 [g3,bb3]@2 eb3@2 [gb3,bb3]@2 [g3,bb3]@2 eb3 ~ [ab3,c4]@2", // Gb Gm Gb Gm Ab
  Z: "~@2 [gb3,c4]@4 eb3 ~ ab3@2 eb3@2 [d3,gb3,c4]@2 ~@2, ~@2 c4 ~", // Gbdim D7
  AA: "[gb3,bb3]@2 [g3,bb3]@2 eb3 ~ [gb3,bb3]@2 ~@2 eb3 ~ [gb3,bb3] ~ [ab3,c4]@2, ~@2 [g3,bb3] ~", // Gb Gm Gb Ab Gm
  AB: "~ [gb3,c4]@3 ~ [ab3,c4] [gb3,c4] ~", AC: "eb4@2 eb4@7 ~@3 [c3,g3,c4]@2 ~@2, [g3,c4]@5 ~@3",
  AD: "[ab3,db4]@5 ~ [ab3,db4,f4] ~", AE: "[c4,eb4]@15 ~, g3@3 ~", AF: "[ab3,db4]@6 ~@2 [ab3,c4,gb4]@7 ~",
  AG: "~@3 bb4 db5 ~ bb4!2 ab4@2 gb4@2 eb4 ~ db4 ~",
  AH: "[eb4@2 db4 ~ bb3@2 ab3 ~ [g3,db4,gb4] ~ [g3,db4,gb4]@2 ~@2 [g3,bb3,eb4]@10 ~@8]/2", // Gb Eb
  AI: "~@4 a5 ~ eb6@6 ~@4, ~@5 bb5@7 ~@4", AJ: "[~@4 gb4 eb4 ~@2 gb4 eb4 db4@4 [bb3,eb4]@6 ~@12]/2",
  AK: "[~@4 bb4 ~ bb4 ~ db5@2 eb5@2 ~@2 eb5@4 ~@2 [g3,bb3,eb4]@5 ~@3 [bb3,eb4] ~ [gb3,c4,eb4]@7 ~@3 c4@2 [c4,eb4]@2 [c4,eb4,g4] ~ b3@6 b3 ~@3 b3@2 [f3,b3,eb4]@2 [f3,b3,eb4,ab4] ~@3, ~@20 gb3@2 ~ [f3,eb4]@4 ~@5]/4", // Eb Eb5 Cdim Cm Fm7b5 F7
  AL: "~@2 [f3,bb3,d4,f4,bb4] ~@7 [db4,ab4]@3 ~ eb4 ~, ~@13 gb4@3", // Bb Db5
  AM: "[[g3,bb3,eb4]@7 ~@5 [g3,bb3,eb4] ~ [gb3,c4,eb4]@8 ~@2 gb3@2 [gb3,c4,eb4]@2 [gb3,c4,eb4] ~ [f3,b3,eb4]@6 ~@2 [f3,b3]@2 [f3,b3]@2 [f3,b3,eb4]@2 b3 ~ d4@2 d4@2 ~@4 [f3,d4,ab4]@2 ~@2 [f3,d4,ab4,db5]@2 ~@2 [g3,db4,f4,bb4]@6 ~@6 [db4,f4,bb4] ~@3 [gb3,c4,eb4,ab4]@8 ~@4 [gb3,c4,eb4,ab4]@2 ~@2 [b3,eb4,ab4]@7 ~@5 [f3,b3,eb4,ab4]@2 ~@2 [f3,bb3,d4]@6 ~@2 [bb2,f3]@4 [ab4,db5]@2 [ab4,db5]@2 ~@2, ~@46 [bb2,f3]@4 ~@44 gb3 ~@23 e3 ~@3 [bb2,f3,d4]@4 ~@2]/8", // Eb Cdim Fm7b5 Fdim Fm7b5 Ddim Db Gm7b5 …
  AN: "[~@2 [g3,db4,f4]@2 [g3,db4,f4,bb4]@3 [f4,bb4] ~@4 [g3,db4] ~ [gb3,c4,eb4,ab4]@6 [gb3,c4,eb4] ~@5 [gb3,c4,eb4] ~@3 [eb4,ab4]@6 [eb4,ab4]@2 [b3,eb4] ~ f2 ~ [f3,b3,eb4,ab4] ~@3 d4@2 ~@2 [bb3,d4,f4,bb4]@2 ~@2 [ab3,d4,f4] ~@3 [ab4,db5]@2 ~@2 [eb3,g3,db4,gb4]@16 ~@2, ~@14 b3 ~@15 [f3,b3]@8 ~@8 f3@6 ~@4 bb2@6 ~@18, ~@58 d4@4 d4 ~@17, ~@58 [f3,bb3] ~@21]/5", // Gm7b5 Bb5 Gdim Ab7 Cdim Ab5 B Fm7b5 …
})).s("gm_electric_guitar_jazz").gain(0.38).pan(0.7)

// chords · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@10 A ~@3 B ~@4 C ~ D ~@29 E F ~@5 G ~@2 H ~ I ~@3 J@2 ~@4 K@2 L ~ M@3 N@2 O ~ P Q R@2 S T
>`.pickRestart({
  A: "~@12 gb3 ~@3", B: "d3 ~@15", C: "~@11 gb3 ~@4", D: "~@11 f3 ~@4", E: "~@12 [ab3,a3,d4] ~@3", F: "~@7 ab2",
  G: "~@10 gb3 ~@5", H: "f4@3 ~@5", I: "~@13 f4 ~@2", J: "[~@6 db4 ~@7 g3@6 ~@12]/2",
  K: "[~@9 eb4 ~@2 gb3 ~ ab4@7 ~@3 f3@2 ab4@2 ~@4]/2", L: "~@2 bb2 ~@13",
  M: "[~@8 c4@2 ~@4 ab4@6 ~@6 ab4@2 ~@2 f4 ~ e4@2 ~@4 db5@2 ~@8, ~@15 ab3@2 ~@7]/3",
  N: "[~@4 b4 ~@7 d3 ~ db3@8 ~@10]/2", O: "~@4 f3 ~@3", P: "~@2 eb3@6 ~@2 db4@2 bb4 ~@3",
  Q: "~@4 ab4 ~@3 gb3@2 ab4 ~ eb3@2 ~@2", R: "[~@16 d4@2 ~@4 bb4 ~ d4 ~@5 b4 ~, ~@7 [bb2,bb3,f4]@2 ~@7]/2",
  S: "~@14 [d3,gb3,c4,f4] [db3,f3,b3,eb4,e4]", T: "[b2,c3,bb3,d4] ~@15",
})).s("gm_electric_guitar_jazz").gain(0.11).pan(0.7)

// chords · alto sax
const alto_sax = note(`<
  ~@8 A ~@3 B ~@11 B ~@3 B ~ C@4 D@3 E ~@2 F ~@3 B ~ G@4 H@3 I ~@4 J@2 K@4 ~@2 B ~@3 B ~ L M N O L M N O P Q R S P Q R S
  T@2
>`.pickRestart({
  A: "~@4 [bb3,gb4,g4] ~@11", B: "~@2 [bb3,g4] ~@5, ~@4 gb4 ~@11",
  C: "[db4@25 ~@3 eb4 ~ bb3@26 ~@2 bb3 ~ c4@2 bb3 ~]/4", D: "[db4@23 ~@5 eb4 ~ bb3@14 ~@4]/3", E: "bb4@13 ~@3",
  F: "~@4 [gb4,g4] ~@11, ~@2 bb3 ~@5", G: "[db4@24 ~@4 eb4 ~ bb3@26 ~@2 bb3 ~ c4@2 bb3 ~]/4",
  H: "[db4@24 ~@4 eb4 ~ bb3@14 ~@4]/3", I: "bb4@3 ~", J: "[c4@8 eb4@2 g4 ~@3 g4@5 ~ eb4@2 db4@2 eb4@4 db4 ~@3]/2",
  K: "[c4@8 eb4@2 g4@2 ~@2 g4@6 eb4@2 db4@2 eb4@2 ~@2 c4@2 bb3@19 ~@15]/4", L: "~@4 [db4,g4]@3 ~ [db4,g4]!2 ~@6",
  M: "~@4 [c4,gb4]@3 ~ [c4,gb4]!2 ~@6", N: "~@4 [b3,f4]@3 ~ [b3,f4]!2 ~@6",
  O: "~@2 [d4,ab4] ~@3 [d4,ab4] ~@3 [d4,ab4] ~@3 [d4,ab4] ~", P: "~@4 [g4,db5]@3 ~ [g4,db5]!2 ~@6",
  Q: "~@4 [gb4,c5]@3 ~ [gb4,c5]!2 ~@6", R: "~@4 [f4,b4]@3 ~ [f4,b4]!2 ~@6",
  S: "~@2 [ab4,d5] ~@3 [ab4,d5] ~@3 [ab4,d5] ~@3 [ab4,d5] ~", T: "[~ [db4,g4]@6 ~]/2",
})).s("gm_alto_sax").gain(0.44).pan(0.6)

// other · trumpet
const trumpet = note(`<
  ~@8 A ~@3 A ~@11 A ~@3 A ~ B@4 C@3 D ~@2 A ~@3 A ~ E@4 F@3 G ~@4 H@2 I@3 ~@3 A ~@3 A ~ J K L M K@2 L M N O@2 M N O@2 M
  P@2
>`.pickRestart({
  A: "~@4 db5 ~@11", B: "[db5@24 ~@4 eb5 ~ bb4@24 ~@4 bb4@2 c5@2 bb4 ~]/4", C: "[db5@24 ~@4 eb5 ~ bb4@14 ~@4]/3",
  D: "bb5@12 [f5,g5,ab5,a5] e5 ~@2", E: "[db5@24 ~@4 eb5@2 bb4@25 ~@3 bb4@2 c5@2 bb4@2]/4",
  F: "[db5@25 ~@3 eb5 ~ bb4@13 ~@5]/3", G: "bb5@3 ~", H: "[c5@8 eb5@2 g5 ~@3 g5@6 eb5@2 db5 ~ eb5@4 db5 ~@3]/2",
  I: "[c5@8 eb5@2 g5 ~@3 g5@6 eb5@2 db5@2 eb5@2 ~@2 c5@2 bb4@18]/3", J: "~@4 eb5@4 eb5!2 ~@6",
  K: "~@4 eb5@3 ~ eb5!2 ~@6", L: "~@4 db5@3 ~ db5!2 ~@6", M: "~@2 bb5 ~@3 bb5 ~@3 bb5 ~@3 bb5 ~",
  N: "~@4 bb5@3 ~ bb5!2 ~@6", O: "~@4 ab5@3 ~ ab5!2 ~@6", P: "[~ gb5@6 ~]/2",
})).s("gm_trumpet").gain(0.49).pan(0.4)

// other · trombone
const trombone = note(`<
  ~@8 A ~@3 A ~@11 A ~@3 A ~ B@4 C@3 D ~@2 A ~@3 E ~ F@4 G@3 D ~@4 H@2 I@3 ~@3 E ~@3 E ~ J K L M J K L M N K O P N K O P
  Q@2
>`.pickRestart({
  A: "~@4 eb3 ~@11", B: "[db3@25 ~@3 eb3 ~ bb2@25 ~@3 bb2 ~ c3@2 bb2 ~]/4", C: "[db3@24 ~@4 eb3 ~ bb2@14 ~@4]/3",
  D: "bb3@3 ~", E: "~@2 eb3 ~@5", F: "[db3@24 ~@4 eb3 ~ bb2@26 ~@2 bb2@2 c3@2 bb2 ~]/4",
  G: "[db3@25 ~@3 eb3 ~ bb2@14 ~@4]/3", H: "[c3@8 eb3@2 g3@2 ~@2 g3@6 eb3@2 db3@2 eb3@4 db3 ~@3]/2",
  I: "[c3@4 eb3 g3 ~ g3@3 eb3 db3 eb3 ~ c3 bb2@9]/3", J: "~@4 eb3@3 ~ eb3!2 ~@6", K: "~@4 ab3@3 ~ ab3!2 ~@6",
  L: "~@4 db3@3 ~ db3!2 ~@6", M: "~@2 bb2 ~@3 bb2 ~@3 bb2 ~@3 bb2 ~", N: "~@4 eb4@3 ~ eb4!2 ~@6",
  O: "~@4 db4@3 ~ db4!2 ~@6", P: "~@2 bb3 ~@3 bb3 ~@3 bb3 ~@3 bb3 ~", Q: "[~ eb3@6 ~]/2",
})).s("gm_trombone").gain(0.49).pan(0.8)

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

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

// drums · clap
const clap = s("cp").struct("<A@5 B A@7 B A@7 B A@7 B A@15 B A@7 B A@17 B A@3 ~ A@3 ~ A@3 ~ A@3 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@5 [~@15 x] ~@23 [~@14 x!2] ~@41 [~@15 x] ~@17 [~@11 x ~@4]>").gain(0.44)

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

// drums · high tom
const high_tom = s("ht").struct("<~@5 A ~@7 B ~@31 A ~@15 A ~@9 A ~@18>".pickRestart({
  A: "~@3 x", B: "~@12 x!2 ~@2",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@15 A ~@20 B ~ B ~@11 B@3 C D B@2 C D B@2 C D E@2 F G@2>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~ x ~ x ~ x ~@2", D: "x ~@6 x", E: "~@5 x ~ x", F: "~@5 x!3", G: "x",
})).gain(0.44)

// drums · ride
const ride = s("rd").struct(`<
  ~@14 A@7 B ~@8 A@7 C ~@8 A@7 B A D A@2 D E D A ~@10 D@3 ~ F D@2 ~ F D@2 ~ G H I J ~@2
>`.pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x!6 ~@2", D: "x!7 ~", E: "~ x!7", F: "~@2 x!5 ~", G: "~ x!6 ~", H: "x!5 ~ x ~",
  I: "~ x!4 ~ x ~", J: "~ x ~ x ~@4",
})).gain(0.33)

stack(
  overdriven_guitar, overdriven_guitar_soft, bass, electric_guitar_jazz, electric_guitar_jazz_2, alto_sax, trumpet,
  trombone, kick, snare, clap, low_tom, mid_tom, high_tom, crash, ride
)

More by Sam & Dave