Strudelify
Barracuda cover art

1985 · Little Queen

Barracuda

Heart

KeyE minorTempo138 bpm
0:00/0:00
// Barracuda — Heart
// 138 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Vocal" brass section (copy of ch 1 "Vocal" brass section, 0.133 beats late); ch 16 "Vibes" vibraphone (copy of ch 15 "MusicBox" music box)
// note: Full arrangement: all 148 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): Mute Guitar, Distorted.
setcpm(138/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 pick · "Bass"
const bass = note(`<
  ~@8 A B@3 A C@3 A@2 D E A@4 D E A@2 F@2 G H I@2 J ~ A B@3 A C@3 A@2 D E A@4 D E A@2 F@2 G H I@2 J ~ A K A K L@2 M N A
  K A K L@2 M N A O P Q@2 R@2 S T U V W@2 X Y A O P Z@2 AA AB AC@4 AD A@3 AE AF@27 AG T U V A O P AH T AI
>`.pickRestart({
  A: "e1 ~ e1!3 ~ e1!3 ~ e1!3 ~ e1!2", B: "[e1 ~ e1!3 ~ e1!3 ~ e1 ~ f1@2 g1@30 g1@4]/3",
  C: "[e1 ~ e1!3 ~ e1!3 ~ e1 ~ f1@2 g1@31 ~@3]/3", D: "e1 ~ e1!2 c2@12", E: "c2 b1 a1 g1",
  F: "[c2@6 b1@4 g1@2 a1@6 e1@2 ~@2 e1 ~ e1@5 ~@3]/2", G: "g1@3 ~ a1@2 b1@2 d2@2 b1@2 a1@2 g1@2",
  H: "~@2 e1 ~@3 e1 ~ e1@6 ~@2", I: "d2/2", J: "a1", K: "e1 ~ e1!3 ~ e1!2 g1@2 b1@2 d2@2 e2@2",
  L: "[c3@5 ~ b2@6 a2@6 g2@6 g2@2 f#2 ~ e2@4]/2", M: "a1@5 ~ b1@6 c#2@4", N: "~ d2@3 e2@2 g2@2",
  O: "e1@2 f#1@2 ~@2 g1@3 ~ a1@2 e1 ~ e1!2", P: "e1 ~ e1!3 ~ e1!3 ~ e1!2 e1@2 f#1@2",
  Q: "[~@2 g1@3 ~ a1@2 c2@5 ~ b1@6 a1@6 g1@6]/2", R: "[g1@2 f#1 ~ e1@4 a1@5 ~ b0@6 c#1@5 ~ d1@6]/2",
  S: "e1@4 g1@4 e1 ~ e1!3 ~ e1!2", T: "e1 ~ e1!3 ~ e1!2 e1@2 f#1@2 ~@2 g1@2", U: "~@2 a1@2 e1 ~ e1!3 ~ e1!3 ~ e1!2",
  V: "e1 ~ e1!2 e1@2 f#1@2 ~@2 g1@3 ~ a1@2", W: "[c2@5 ~ b1@6 a1@6 g1@6 g1@2 f#1 ~ e1@4]/2", X: "a1@5 ~ b0@6 c#1@4",
  Y: "~ d1@3 e1@2 g1@2", Z: "[~@2 g1@3 ~ a1@2 c2@6 b1@4 g1@2 a1@6 e1@2 ~@2 e1 ~]/2", AA: "e1@5 ~@3 g1@3 ~ a1@2 b1@2",
  AB: "d2@2 b1@2 a1@2 g1@2 ~@2 e1 ~@3 e1 ~", AC: "[e1@3 ~ d2@16 a1@8 ~@4]/4", AD: "~@8 e1 ~ e1!3 ~ e1!2",
  AE: "e1 ~ e1!3 ~ e1!3 ~ e1!2 g1@2 e1!2", AF: "e1 ~ e1!2 g1@2 e1@2 e1 ~ e1!2 g1@2 e1!2",
  AG: "e1 ~ e1!2 g1@2 e1@2 e1 ~ e1!3 ~ e1!2", AH: "~@2 g1@3 ~ a1@2 e1 ~ e1!3 ~ e1!2", AI: "~ a1 ~@6",
})).s("gm_electric_bass_pick").gain(0.8).pan(0.4)

// other · electric guitar muted · "Mute Guitar"
const electric_guitar_muted = note(`<
  ~@3 A ~@3 B ~@3 A ~@3 A ~@3 C ~@5 C ~@13 A ~@7 C ~@5 C ~@14 D@2 E F ~@4 D@2 E F ~@3 G@2 H@2 I ~@3 J@2 E F ~@53
>`.pickRestart({
  A: "~@13 f#2@3", B: "~ [f#4,f#5]", C: "c3 b2 a2 g2", D: "[c4@5 ~ b3@6 a3@6 g3@6 ~@2 f#3 ~ e3@4]/2",
  E: "~@3 b2@3 c#3@2", F: "~ d3@3 e3@2 g3@2", G: "[~@7 b3@3 a3@3 g3@3]/2",
  H: "[~@2 f#3 ~ e3@4 ~@6 b2@6 c#3@5 ~ d3@6]/2", I: "e3 g3 ~@2", J: "[~@6 b3@6 a3@6 g3@6 ~@2 f#3 ~ e3@4]/2",
})).s("gm_electric_guitar_muted").gain(0.8).pan(0.7)

// bass · lead 2 sawtooth · "Saw"
const bass_2 = note(`<
  A B@3 A C@3 A B@3 A B@3 A@2 D@2 A@4 D@2 A@2 ~@2 E F ~@4 A B@3 A B@3 A@2 D@2 A@4 D@2 A@2 ~@2 E F ~@4 A G A G ~@4 A G A
  G ~@24 H I J ~@3 K A@3 L ~@37
>`.pickRestart({
  A: "e2 ~ e2!3 ~ e2!3 ~ e2!3 ~ e2!2", B: "[e2 ~ e2!3 ~ e2!3 ~ e2 ~ f#2@2 g2@31 ~@3]/3",
  C: "[e2 ~ e2!3 ~ e2!3 ~ e2 ~ f#2@2 ~@26 [e4,f#4,f#5]@8, ~@14 g2@31 ~@3]/3", // Esus2
  D: "[e2 ~ e2!2 ~@4 g4@16 [a2,a3]@4 [g2,g3]@4, ~ c3@5 ~@2, ~@5 c4@20 ~@7, ~@6 e4@17 ~@9]/2", // A G
  E: "a3@3 ~ g3@2 a3@2 b3@2 a3@2 g3@2 a3@2", F: "~@2 e2 ~@3 e2 ~ e2@6 ~@2", G: "e2 ~ e2!3 ~ e2!2 g2@2 b2@2 d3@2 e3@2",
  H: "~@8 a3@3 ~ g3@2 a3@2", I: "b3@2 a3@2 g3@2 a3@2 ~@2 e2 ~@3 e2 ~", J: "e2@3 ~@5", K: "~@8 e2 ~ e2!3 ~ e2!2",
  L: "e2 ~ e2!3 ~ e2!2 ~@8",
})).s("gm_lead_2_sawtooth").gain(0.3).pan(0.6)

// chords · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  A B@3 A C@3 A D@3 A E@3 F@2 G@2 F@4 G@2 F@2 H I J K L@2 M ~ A B@3 N@4 F@2 G@2 F@4 G@2 F@2 H I J K L@2 M ~ F O F O P Q
  R S F O F O P Q R S F T U V@2 W@3 X Y Z AA@2 AB@2 F T U AC@2 AD AE AF@4 AG A@3 AH@2 AI@4 AJ@6 AK@8 AL@8 AM X Y Z F T U
  AN X AO
>`.pickRestart({
  A: "[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2", // E5
  B: "[[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2 ~ [f#2,c#3]@2 ~@10 g4@8 ~@12 [g2,d3]@4, ~@7 [g2,d3]@9 [g4,e5]@8, ~@24 e4@11 ~@13]/3", // E5 F#5 G5 C
  C: "[[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2 ~ [f#2,c#3]@2 ~@11 [e4,g4]@23, ~@7 [g2,d3]@9 ~@8, ~@23 [g3,b3]@18 ~@7, ~ d4]/3", // E5 F#5 Em G5 G
  D: "[[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2 ~ [f#2,c#3]@2 ~@10 [g4,b4]@23 ~, ~@7 [g2,d3]@9 ~@8]/3", // E5 F#5 G G5
  E: "[[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2 ~ [f#2,c#3]@2 ~@18 [b4,d5]@16, ~@7 [g2,d3]@9 ~@8, ~@24 d4@17 ~@7, ~@25 [e4,g4]@16 ~@7]/3", // E5 F#5 Bm G5 Em
  F: "[e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2", // E5
  G: "[[e2,b2] ~ e2!2 ~@2 c5@26, ~ [c3,c4]@7, ~@5 [e4,g4]@27]/2", H: "[g2,c3]@3 [g2,b2]@3 [e2,a2]@2",
  I: "~@2 [e2,b2]@2 ~@2 [e2,b2] ~ [e2,b2]@4 ~@4", // E5
  J: "[d2,g2]@3 ~ [e2,a2]@2 [f#2,b2]@2 [a2,d3]@2 [f#2,b2]@2 [e2,a2]@2 [d2,g2]@2", // G5 A5 B5 D5 B5 A5 G5
  K: "~@2 [e1,e2] ~@3 [e1,e2] ~ [e1,e2]@6 ~@2", L: "[d3,a3,d4]/2", M: "[a2,e3,a3]",
  N: "[[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e2,b2]@2 e2 ~ [f#2,c#3]@2 ~@11 [e4,g4]@23, e5@3 d5@3 b4@3 a4@3 g4@2 e4@2 d4@16, ~@15 [g2,d3]@9 ~@8]/4", // E5 F#5 Em G5
  O: "[e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [g2,d3]@2 [b2,g3]@2 [d3,a3]@2 [e3,b3]@2", P: "e3@4 a2 ~ f#3@4 e3 ~ g3@4, a2 ~@7",
  Q: "e3 ~ f#3@4 e3@2 g3@2 e3@2 a3@2 a2@2", R: "a2 e3@2 ~ a2@2 f#3@4 e3@2 g3@4", S: "d3 a3@2 d3 b3@2 d4@2",
  T: "[e2,b2]@2 [f#2,c#3]@2 ~@2 [g2,d3]@3 ~ [a2,e3]@2 [e2,b2] ~ e2!2", // E5 F#5 G5 A5 E5
  U: "[e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [e2,b2]@2 [f#2,c#3]@2", // E5 F#5
  V: "[~@2 [g2,d3]@3 ~ [a2,e3]@2 [c3,g3]@12 [c3,g3]@12]/2", // G5 A5 C5
  W: "[[c3,g3]@3 ~ [c3,g3]@3 ~ [a2,e3]@6 [a2,e3]@5 ~ [a2,e3]@20 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2]/3", // C5 A5 E5
  X: "[e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [e2,b2]@2 [f#2,c#3]@2 ~@2 [g2,d3]@2", // E5 F#5 G5
  Y: "~@2 [a2,e3]@2 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2", // A5 E5
  Z: "[e2,b2] ~ e2!2 [e2,b2]@2 [f#2,c#3]@2 ~@2 [g2,d3]@3 ~ [a2,e3]@2", // E5 F#5 G5 A5
  AA: "[[c3,g3]@12 [c3,g3]@12 [c3,g3]@3 ~ [c3,g3]@3 ~]/2", AB: "[[a2,e3]@6 [a2,e3]@5 ~ [a2,e3]@20]/2",
  AC: "[~@2 [g2,d3]@3 ~ [a2,e3]@2 [g2,c3]@6 [g2,b2]@6 [e2,a2]@4 ~@2 [e2,b2]@2 ~@2 [e2,b2] ~]/2", // G5 A5 C5 G A5 E5
  AD: "[e2,b2]@4 ~@4 [d2,g2]@3 ~ [e2,a2]@2 [f#2,b2]@2", // E5 G5 A5 B5
  AE: "[a2,d3]@2 [f#2,b2]@2 [e2,a2]@2 [d2,g2]@2 ~@2 [e1,e2] ~@3 [e1,e2] ~", // D5 B5 A5 G5 E
  AF: "[[e1,e2]@3 ~ [d3,a3,d4]@16 [a2,e3,a3]@8 ~@4]/4", AG: "~@8 [e2,b2]@2 e2!2 [e2,b2]@2 e2!2",
  AH: "[[e2,b2]@2 e2!2 [e2,b2]@2 e2!2 [e3,g3]@24]/2", // E5 Em
  AI: "[~@8 [f4,g4] ~ [d5,e5]@30 [d5,f#5]@24, ~@7 e4@28 ~@29, ~@9 b4@31 ~@24]/4", // Fsus2 Dsus2 D
  AJ: "[~@8 [e1,e2,b2,e3]@32 ~@9 f#4@21 ~@2 d5@24, ~@23 d3@11 ~@14, ~@16 [a3,d4]@7 ~@9]/6", // E5 D5
  AK: "[~@16 [d4,f#4]@21 ~@29 d5@62, ~@7 d3@11 ~@6 e4@13 ~@27, ~@15 a3@21 ~@11 b4@27 ~@54]/8", // D
  AL: "[~@8 [e4,g4]@15 ~@2 g4@15 [c4,e4,g4]@14 ~@2 [e4,g4]@16 [e4,g4]@16 ~ g4@15 ~ g4@14 ~ [b3,e4,g4]@8, ~@8 b3@9 ~@6 b3@16 ~@16 b3@16 ~ b3@9 ~@7 [b3,e4]@16 [c4,e4]@14 ~@10, ~@3 e4@2 ~@11]/8", // Em C Em E5 C
  AM: "~@8 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2", AN: "~@2 [g2,d3]@3 ~ [a2,e3]@2 [e2,b2] ~ e2!2 [e2,b2] ~ e2!2",
  AO: "~ [a2,e3] ~@6", // A5
})).s("gm_overdriven_guitar").gain(0.79).pan(0.7)

// chords · distortion guitar · "Distorted"
const distortion_guitar = note(`<
  ~@7 A ~@10 B@2 ~@4 B@2 ~@20 B@2 ~ C ~@2 B@2 ~@29 D@4 E ~ F ~ G@2 H@3 I@3 ~@11 J@6 K@8 L@2 M@2 N@2 O@8 ~@10
>`.pickRestart({
  A: "~ [f#4,f#5]", B: "[~@5 [e4,g4]@19 a2@4 g2@4, ~ c4@5 ~@2]/2", C: "~@9 [d3,e3] d3 [d3,e3] e3 d3 [d3,e3]!2",
  D: "[~@8 d5@11 ~ d5@2 b4 ~ f5@12 e5@2 d5@2 g5 ~ g5 ~ a5@2 c#5@4 d5@2 e5@2 a4@3 ~ a4@2 b4@2 a4@2]/4",
  E: "[g4,b4] [a4,c#5] [g4,b4]@2 e4@4", F: "~@4 d5@3 a4 e4@6 ~@2", G: "[e5@6 f#5@5 ~ g5@6 f#5@6 e5@2 d5@2 b4@3 ~]/2",
  H: "[e5@5 ~ f#5@5 ~ g5@6 a5@5 ~ a5@3 g5@3 ~ a5@2 g5@2 e5@9 ~@3 g5, ~@45 [e5,g5]@2 ~, ~@23 [b4,g5]]/3", // Em
  I: "[~ g5 ~@2 g5 ~ g5 ~@3 d5@2 g4@2 g4@10 e4@15 ~@9, [b4,e5]@2 e5@2 ~@3 [e5,g5]@2 [e5,g5]@2 ~@37, ~@3 b4@2 [b4,e5]@2 ~ b4@2 ~@38]/3", // E5 Em E5
  J: "[~ [g4,d5]@4 [e4,b4]@4 d5@3]/6", K: "[~@8 [e4,b4]@32 a4@26 e4@3 g4@3 e4@30 ~@2 a4@24]/8",
  L: "[~ e4@2 g4 e4@12]/2", M: "[~@11 a4@21, ~ d5@3]/2", N: "[~@11 b4@21, ~ e5@3]/2",
  O: "[~ [g4,d5]@2 [g4,c#5]@2 [e4,c5]@2 [e4,b4]@2 [g4,d5]@2 [g4,c#5]@2 [e4,c5]@2 [e4,b4]]/8", // G5 Gdim C E5 G5 Gdim C E5
})).s("gm_distortion_guitar").gain(0.8).pan(0.8)

// chords · music box · "MusicBox"
const music_box = note("<~@105 A@2 ~@41>".pickRestart({
  A: "[~@7 [c5,d5,a5]@14 ~@11]/2", // D7
})).s("gm_music_box").gain(0.72)

// bass · electric bass finger · "Fingerbass"
const bass_3 = note("<~@33 A B C ~@25 A B C ~@40 D E ~@42>".pickRestart({
  A: "~@4 e3 ~ g3 e3, ~@11 e3@2 ~@3", B: "e3@3 a3 e3 ~ g3 e3", C: "a2 ~@15", D: "e3 ~ g3 e3 e3@3 a3, ~@3 e3@2 ~@11",
  E: "e3@2 ~@2 g3@2 e3@2 a2 ~@7",
})).s("gm_electric_bass_finger").gain(0.8).pan(0.7)

// other · overdriven guitar · "Overdrive"
const overdriven_guitar_2 = note("<~@40 A@2 B@2 ~@5 C D ~@79 E@8 F ~@9>".pickRestart({
  A: "[e5@3 d5@3 b4@3 a4@3 g4@2 e4@2]/2", B: "[d4@27 ~@5]/2", C: "~@9 [d3,e3] d3 e3 [d3,e3] d3 [d3,e3] e3",
  D: "d3 ~@15", E: "[~@12 g4@14 ~ g4@13 ~@4 g4@12 ~@3 g4@12 ~@5 g4@12 ~@4 g4@12 ~@4 g4@12 ~@4 g4@4]/8", F: "~@7 g4 ~@8",
})).s("gm_overdriven_guitar").gain(0.5).pan(0.4)

// other · distortion guitar · "Distorted"
const distortion_guitar_2 = note("<~@84 A ~@4 B ~ C ~ D E F ~@52>".pickRestart({
  A: "~@7 b4 ~@8", B: "~@5 d5@3 ~@8", C: "~ e5@6 ~@9", D: "~ e5@5 ~@10", E: "~@12 g5@3 ~", F: "~ g5 ~@6",
})).s("gm_distortion_guitar").gain(0.8).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@20 B C B D E F G ~ A@3 H A@16 B C B D E F G ~ A@3 I B C B D A@3 I B C B D A J K L M N O P Q R S B C B T A J K L
  M U M V W V X Y A@10 I Z A@10 AA A@7 AA A Q R S A J K AB Q AC
>`.pickRestart({
  A: "x ~ x!2 ~@4 x ~ x!2 ~@4", B: "x ~@4 x ~@2", C: "~ x ~ x!3 ~@2", D: "~ x ~ x!3 ~ x", E: "x ~@2 x",
  F: "~@4 x!2 ~ x", G: "x ~@3 x!2 ~ x", H: "x ~ x!2 ~@6 x!2 ~@4", I: "x ~ x!2 ~@4 x ~@3 x ~@3",
  J: "~@2 x ~@3 x ~@3 x ~ x ~ x!2", K: "~@4 x ~ x!2 ~@6 x ~", L: "~ x ~ x!2 ~@3", M: "~ x ~@3 x ~ x",
  N: "x!2 ~@2 x ~@2 x", O: "~@2 x ~@2 x ~ x", P: "x ~ x ~@3 x ~ x ~ x!2 ~@4", Q: "x ~ x!2 ~@6 x ~@3 x ~",
  R: "~@2 x ~ x ~ x!2 ~@4 x ~ x!2", S: "~@3 x ~ x ~ x", T: "~@2 x ~@3 x ~ x ~ x ~@4 x", U: "x!2 ~@2 x ~@3",
  V: "x!2 ~ x!2 ~@3", W: "~ x ~@2", X: "x!2 ~ x ~@4", Y: "~@8 x ~ x!2 ~@4", Z: "x ~@3 x ~@3 x ~ x!2 ~@4",
  AA: "x ~ x!2 ~@4 x ~@7", AB: "~@2 x ~@3 x ~ x ~ x!2 ~@4", AC: "~ x ~@6",
})).gain(0.8).pan(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B@3 C B@3 D B@3 E B@12 F G H I B@3 C B@3 J B@3 K B@11 L F G H I B@3 M B@3 L B@3 M B@3 L B F N O B@2 P Q B R N H
  B H S B F N T B@3 U V W X Y B@2 Z AA B@2 AB AC B@2 M AD B@7 AE B@2 Z AA B@6 Z AA B R N B F N T B ~
>`.pickRestart({
  A: "~@7 x!2 ~ x ~@5", B: "~ x ~ x", C: "~@4 x ~@3 x!2 ~@6", D: "~@2 x ~@2 x!2 ~", E: "~@2 x ~@3 x!2", F: "~ x ~@2",
  G: "x ~@2 x ~@2 x ~", H: "~@3 x ~@2 x ~", I: "x", J: "x ~ x!3 ~ x!3 ~ x!3 ~@3", K: "~ x!3", L: "~@2 x ~ x!2 ~@2",
  M: "~@4 x ~@5 x!2 ~@2 x!2", N: "x!2", O: "x ~@6 x", P: "~ x ~@2 x ~ x ~", Q: "x!2 ~@4 x ~", R: "~ x",
  S: "x ~@3 x ~@3 x ~ x!2 ~@4", T: "x ~@2 x", U: "x ~ x ~ x!2 ~ x ~@4 x ~@3", V: "~@4 x ~@2 x", W: "~@2 x ~@4 x",
  X: "~ x!2 ~", Y: "~@3 x", Z: "~@4 x ~@3 x ~ x!3 ~ x!2", AA: "x ~ x!3 ~@7 x ~@3", AB: "~@4 x ~@3 x!5 ~@3",
  AC: "~ x!2 ~@3 x ~", AD: "~@2 x!2 ~@2 x!2 ~@4 x ~@3", AE: "~@4 x ~ x!2 ~@4 x ~@3",
})).gain(0.8).pan(0.6)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@3 B ~@3 C ~@23 B ~@3 C ~@15 D ~@11 D ~@7 D ~@7 E ~@6 D ~@15 F ~@2 C G ~@15 F ~@7 F ~@9
>`.pickRestart({
  A: "~@7 x", B: "~@13 x!3", C: "~@15 x", D: "~@14 x!2", E: "~@6 x!2 ~@8", F: "~@7 x ~@8", G: "x ~ x!2 ~@2 x!2 ~@8",
})).gain(0.8).pan(0.6)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B ~@8 A B A B ~@4 A B A B ~@4 A
  C D E ~@3 F G H I ~@4 A C D E ~@7 F J@32 G K I L M D N O P
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~@3 x!2 ~ x ~@2", B: "x ~ x!2 ~@2 x ~ x ~ x!2 ~@4", C: "~@4 x ~@3 x ~@3 x ~ x!2",
  D: "~@2 x ~@3 x!2 ~@2 x ~@4 x", E: "~ x ~@2", F: "~@10 x!2 ~@2 x ~", G: "~@2 x!2 ~ x ~@6 x ~@3",
  H: "x ~@3 x ~ x!2 ~@2 x ~@3 x!2", I: "~@2 x ~@4 x ~@4 x ~@3", J: "~@2 x!2 ~ x ~@4 x!2 ~@2 x ~",
  K: "x ~@2 x!2 ~ x!2 ~@2 x ~@3 x!2", L: "x ~ x!2 ~@2 x ~@3 x!2 ~ x ~@2", M: "~@4 x ~@3 x ~@2 x!2 ~ x!2",
  N: "~@4 x ~@3 x ~ x!2 ~@2 x ~", O: "~@2 x!2 ~@2 x ~@4 x ~@4", P: "x!2 ~@2",
})).gain(0.8).pan(0.6)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@3 B ~@3 C ~@23 B ~@3 D ~@50 E ~@7 F ~@7 F ~@2 D G ~@15 H ~@7 H ~@9
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@3 x", C: "~@11 x ~ x!2 ~", D: "~@13 x!2 ~", E: "~@7 x", F: "~@3 x ~@4", G: "~ x ~@3 x ~@10",
  H: "~@5 x!2 ~@9",
})).gain(0.8).pan(0.6)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A@27 B A@27 B A@17 C D E A@4 F G H A@5 C D E A@3 I A@2 J K A@32 F G H A C D E F L
>`.pickRestart({
  A: "x!4", B: "x", C: "x!2 ~ x ~ x!2 ~", D: "x ~ x ~ x ~ x!2", E: "~ x ~ x!2 ~ x ~", F: "x ~ x ~ x!2 ~ x",
  G: "~ x!2 ~ x ~ x ~", H: "x ~ x!2 ~ x ~ x", I: "x ~ x!2", J: "x!3 ~", K: "~@2 x!2", L: "~ x ~@6",
})).gain(0.64).pan(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@27 A ~@19 B ~@11 B ~@7 B ~@7 C ~@6 B ~@7 D ~@7 E ~@37>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@12 x!2 ~@2", C: "~@4 x!2 ~@10", D: "~ x ~@2", E: "~@5 x ~@10",
})).gain(0.8).pan(0.6)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@3 A ~ B ~@13 A ~ A ~ A ~@3 A ~@3 A ~ B ~@13 A ~ A ~ A ~@2 C ~@4 A ~@2 C ~@4 A D ~@5 E ~ B ~@5 A ~@2 E
// … 14 more lines

More by Heart