Strudelify

We Don't Need Another Hero (Thunderdome)

Tina Turner

KeyF♯ majorTempo99 bpm
0:00/0:00
// We Don't Need Another Hero (Thunderdome) — TURNER TINA
// 99 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(99/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 · "FINGERDBAS"
const bass = note(`<
  A B A B C D E@2 A B A B C D E@2 F G H I C D E@2 J K L M N O P Q R S T U E@2 A G A G V W E@2 F G H I C D E@2 J K L M N
  X Y P Q R S T Z AA AB AC AD AE AF AG AH ~ AI AJ AK AL AM AN AO AP AQ Q R S T U AR E@2 P Q R S T U AS ~@7
>`.pickRestart({
  A: "b1@4 ~@3 b1!2 ~ b1@3 ~@3", B: "f#1@5 ~@2 f#1!2 ~ f#1@3 ~@3", C: "e1@4 ~@3 e1!2 ~ e1@3 ~@3",
  D: "f#1@4 ~@3 f#1!2 ~ f#1@2 e1@2 f#1 ~", E: "c#2@4 b1 a#1 g#1 ~ c#2 ~ c#2@2 b1 a#1 g#1 ~",
  F: "g#1@4 ~@3 g#1!2 ~ g#1@3 ~@3", G: "f#2@4 c#2 ~@2 f#2!2 ~ f#2@2 c#2 ~@3", H: "g#1@5 ~@2 g#1!2 ~ g#1@3 ~@3",
  I: "f#2@4 c#2 ~@2 f#2!2 ~ f#2@2 c#2@4", J: "e1@5 ~ e1 ~ e1@5 ~ e1@2", K: "f#1@5 ~ f#1 ~ c#2@4 b1 ~@3",
  L: "c#2 ~ c#2@2 b1 ~ g#1 ~ c#2@4 b1 ~ g#1 ~", M: "c#2 ~ c#2@2 b1 ~@3 e1@5 ~ e1 ~", N: "e1@5 ~ e1@2 f#1@5 ~ f#1 ~",
  O: "c#2@4 b1 ~@3 c#2 ~ c#2@2 g#1 ~ c#2@2", P: "~@4 f#1@3 ~ g#1@3 ~ f#1@3 ~", Q: "e2 ~ b1 ~ g#1 ~ f#1@8 f#1 ~",
  R: "f#1@4 f#1 ~ f#1 ~ g#1 ~ g#1 ~ f#1 ~ f#1 ~", S: "e2 ~ b1 ~ g#1 ~ f#1@4 b1 ~ f#1 ~ b1@2",
  T: "d#2!2 d#2@2 d#2@3 ~ d#2@4 d#2 ~ d#2@2", U: "e2 ~ b1 ~ g#1 ~ f#1@3 ~ f#1@4 c#3 f#2", V: "e2@4 ~@3 e2!2 ~ e2@3 ~@3",
  W: "f#2@5 ~@2 f#2!2 ~ f#2@2 e2@2 d#2@2", X: "c#2@4 b1 ~ g#1 ~ c#2 ~ c#2 ~ b1 ~ g#1 ~",
  Y: "c#2@3 ~ b1 ~ g#1 ~ c#2 ~ c#2@2 g#1 ~ c#2@2", Z: "e2 ~ b1 ~ g#1 ~ f#1@3 ~ d#2@2 e2@2 d#2 ~",
  AA: "c#2@7 ~ b1@6 ~@2", AB: "a1@4 a1@3 ~ a1@4 a1@4", AC: "f#1@2 f#1@2 f#1@2 f#1 g#1", AD: "a1@2 a1@2 a1@2 a1 b1",
  AE: "c#2!4", AF: "d2@3 ~ d2@3 ~ d2@4 d2@3 ~", AG: "d2@4 d2@3 ~ d2@3 ~ e2@2 d#2@2", AH: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~",
  AI: "~@4 f#1 ~ f#1 ~ g#1 ~ g#1 ~ f#1 ~ f#1 ~", AJ: "e2 ~ b1 ~ g#1 ~ f#1@6 ~@2 f#1 ~",
  AK: "f#1@3 ~ f#1 ~ f#1 ~ g#1 ~ g#1 ~ f#1 ~ f#1@2", AL: "e1 ~ e1 ~ e1 ~ f#1@7 ~ f#1 ~",
  AM: "f#1@2 ~@2 d#2@4 e2@3 ~ d#2@3 ~", AN: "e2 ~ b1 ~ g#1 ~ f#1@7 ~ f#1 ~",
  AO: "f#1@2 ~@2 f#1 ~ f#1@2 g#1 ~ g#1@2 b1 ~ b1@2", AP: "e1@4 e1@2 f#1@8 f#1 ~", AQ: "f#1 ~@3 f#1@3 ~ g#1@3 ~ f#1@3 ~",
  AR: "c#2@4 b1@2 g#1 ~ c#2 ~ c#2@2 b1@2 g#1 ~", AS: "c#2 ~@3",
})).s("gm_electric_bass_finger").gain(0.39)

// other · pan flute
const pan_flute = note("<A B A B A C ~@2 A B A B A C ~@2 A B A B A C ~@85>".pickRestart({
  A: "~@2 d#5 ~ d#5 ~ d#5 ~@3 d#5 ~ d#5 ~ c#5 ~", B: "~@2 b4 ~ a#4 ~ a#4 ~@3 g#4 ~ f#4 ~@3",
  C: "~@2 b4 ~ a#4 ~ a#4 ~@3 g#4 ~ f#4 ~ g#4 ~",
})).s("gm_pan_flute").gain(0.4).pan(0.8)

// other · pan flute · soft notes
const pan_flute_soft = note("<~@38 A B A B A C ~@2 A B A B A C ~@55>".pickRestart({
  A: "~@2 d#5 ~ d#5 ~ d#5 ~@3 d#5 ~ d#5 ~ c#5 ~", B: "~@2 b4 ~ a#4 ~ a#4 ~@3 g#4 ~ f#4 ~@3",
  C: "~@2 b4 ~ a#4 ~ a#4 ~@3 g#4 ~ f#4 ~ g#4 ~",
})).s("gm_pan_flute").gain(0.25).pan(0.8)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A ~ A ~ B C D ~ E F@2 G H I ~@2 E F@2 G H I ~@2 J K@2 L@2 M N O N O P Q R ~ S T U T V W ~@2 S T U T V W ~@2 J K@2 L@2
  M ~ N O N O P Q X Y Z AA AB AC AD AE AF AG Q AG AH AG AI AG AJ AG AK AG AL AG AM AN ~@2 AG AO AG AP AG AK AQ@2 ~@6
>`.pickRestart({
  A: "~ d#5@11 ~@4, [f#4,g#4]@9 ~@7, ~ b4@8 ~@7", B: "g#4 ~", C: "[a#3,c#4,f#4]@11 ~@5", D: "[f4,g#4]@11 ~@5",
  E: "[g#3,b3,d#4] ~@3", F: "[[f#3,a#3,c#4] ~@3 [b3,d#4] ~@3, ~@15 g#3@4 ~@13]/2", G: "[f#3,a#3,c#4]@5 ~@11",
  H: "[g#3,e4] ~", I: "[a#3,f#4]@11 ~@5", J: "[g#3,b3,e4]@5 ~@3", K: "[[f#3,a#3,c#4]@5 ~@3 [c#3,e3,g#3,d#4]@15 ~@9]/2",
  L: "[~@8 [g#3,b3,e4]@13 ~@3 [f#3,a#3,c#4]@5 ~@3]/2", M: "[g#3,b3,c#4,e4]",
  N: "~@4 [c#4,f#4,a#4]@3 ~ [d#4,g#4,b4]@3 ~ [c#4,f#4,a#4]@3 ~", O: "[e4,g#4,b4]@5 ~ [c#4,f#4,a#4]@10",
  P: "~@4 [c#4,f#4,a#4]@3 ~ [d#4,g#4,b4]@3 ~ [c#4,f#4,a#4]@2 ~@2", Q: "[b3,e4,g#4]@5 ~ [c#4,f#4,a#4]@9 ~",
  R: "[e4,g#4,b4]@15 ~", S: "[b3,d#4,g#4]@7 ~", T: "[a#3,c#4,f#4]@13 ~@3", U: "[b3,d#4,f#4,g#4]@7 ~",
  V: "~ g#4@12 ~@3, [b3,e4]@3 ~", W: "[c#4,f#4,a#4]@13 ~@3", X: "[c#4,e4,g#4]@7 ~ [b3,d#4,f#4]@7 ~", Y: "[a3,c#4,e4] ~",
  Z: "[f#3,a#3,c#4]@11 ~ [f#3,a#3] ~ [g#3,b3,d#4] ~, ~@6 c#4 ~", AA: "[a3,c#4,e4]@7 ~", AB: "[c#4,e4,g#4]@15 ~",
  AC: "[d3,f#4,a4]@15 ~", AD: "[b3,e4,g#4]@15 ~", AE: "[f#4,a4]@13 ~@3, d3@15 ~", AF: "[e4,g#4,b4] ~@7",
  AG: "~@4 [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~", // F# G#m F#
  AH: "[d#4,g#4,b4]@2 ~ [c#4,f#4,a#4]@4 ~", AI: "[b3,e4,g#4]@4 [b3,e4] ~ [c#4,f#4,a#4]@7 ~@3, ~@2 g#4 ~@5",
  AJ: "[d#4,g#4,b4]@4 [d#4,g#4,b4] ~ [c#4,f#4,a#4]@7 ~@3", AK: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,f#4,a#4]@6 ~@4",
  AL: "[d#4,g#4,b4]@3 ~ [d#4,g#4,b4] ~ [c#4,f#4,a#4]@6 ~@4", AM: "[b3,e4,g#4]@4 [b3,e4,g#4] ~ [c#4,f#4,a#4]@9 ~",
  AN: "[c#4,e4,g#4]@7 ~@9", AO: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [a#3,c#4,f#4]@6 ~@4",
  AP: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,f#4,a#4]@7 ~@3", AQ: "[[c#4,e4,g#4,b4]@23 ~@9]/2",
})).s("gm_epiano2").gain(0.13)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note(`<
  A B ~ C D ~ E@2 A B ~ C D ~ E@2 A F G H I ~ E@2 J K@4 ~ L M@2 N@2 O P@2 Q R S@2 T@2 U@2 Q R S@2 T@2 U@2 V K@4 ~@2 L
  M@2 W@2 O X Y Z AA AB AC@4 L AD@2 AE@4 O L AE@4 O AF@3 L O L AE@2 O AG@3 ~@5
>`.pickRestart({
  A: "b3@15 ~", B: "c#4@15 ~", C: "c#4", D: "f#4@3 g#4@11 ~@2, e4", E: "[f4,g#4]/2", F: "~@3 a#5, c#4@15 ~",
  G: "g#5@5 ~@3", H: "~ f#5 g#5 ~, c#4", I: "f#4@3 g#4@11 ~@2, e4, g#5@13 ~@3", J: "[g#3,b3,e4]",
  K: "[[g#3,a#3,c#4,f#4] [e3,g#3,c#4,d#4]@4 [b3,e4]@2 a#3]/4", L: "~ [c#4,f#4,a#4] [d#4,g#4,b4] [c#4,f#4,a#4]",
  M: "[[e1,e4,g#4,b4]@3 [c#4,f#4,a#4]@9 [d#4,g#4,b4]@2 [c#4,f#4,a#4]@2, ~@3 f#1@12 ~]/2", // E F# G#m F#
  N: "[[e1,e4,g#4,b4]@3 [c#4,f#4,a#4]@7 [c#4,f#4,a#4]@2 [d#4,g#4,b4]@2 [c#4,f#4,a#4]@2, ~@6 f#1@9 ~@17]/2", // E F# G#m F#
  O: "[e4,g#4,b4]@3 [c#4,f#4,a#4]@5", P: "[[c#4,e4,g#4,b4]@3 ~, c#1@7 ~@9]/2", Q: "~@2 d#5@2 ~@8 d#5 ~@3, b3@15 ~",
  R: "~@4 a#4 ~ a#4@4 ~@2 f#4@3 ~, c#4@15 ~", S: "[~@2 d#5@2 ~@8 d#5 ~@9 a#4@4 g#4 ~ f#4@3 ~, ~@7 c#5@2 ~@7, ~ c#4]/2",
  T: "[~@2 d#5@2 ~@8 d#5 ~ c#5@4 ~@14, e4 ~]/2", U: "g#3/2", V: "[b3,e4], g#3 ~@15",
  W: "[[e1,e4,g#4,b4]@3 f#1@5 ~@2 [c#4,f#4,a#4]@2 [d#4,g#4,b4]@2 [c#4,f#4,a#4]@2, ~@3 [c#4,f#4,a#4]@7 ~@6, ~ d#1]/2", // E F# G#m F#
  X: "[c#4,e4,g#4] [b3,d#4,f#4]", Y: "[a3,c#4,e4]@15 ~", Z: "[f#3,a#3,c#4]", AA: "[a3,c#4,e4]", AB: "[g#3,c#4,e4]",
  AC: "[[a3,f#4]@4 [g#3,b3,e4]@4 [a3,d4,f#4]@4 [g#3,b3,e4] ~@3, d3@51 ~@13]/4", // D E D E
  AD: "[[e4,g#4,b4]@3 [c#4,f#4,a#4]@9 [d#4,g#4,b4]@2 [c#4,f#4,a#4]@2]/2", // E F# G#m F#
  AE: "[[e4,g#4,b4]@3 [c#4,f#4,a#4]@7 [c#4,f#4,a#4]@2 [d#4,g#4,b4]@2 [c#4,f#4,a#4]@2]/2", AF: "[b3,c#4,e4,g#4]/3",
  AG: "[[g#3,b3,c#4]@16 ~ b1 c#2@4 ~@2, c#2@17 ~@7]/3", // C#7
})).s("gm_pad_sweep").gain(0.11)

// chords · pad sweep · "SWEEP PAD" · soft notes
const pad_sweep_soft = note(`<
  A B C D E F G@2 A B C D E F G@2 A H C I E F G@2 ~@3 J@2 K ~@8 L M N O P Q R@2 S M N O P Q R@2 ~@3 J@2 T@2 ~@40 U@2 ~@4
>`.pickRestart({
  A: "[g#3,d#4,f#4]@15 ~", B: "[a#3,f#4]@15 ~", C: "[g#3,b3,d#4,f#4]", D: "[a#3,f#4]", E: "b3@15 ~", F: "[a#3,c#4,f#4]",
  G: "c#4/2", H: "~@4 f#5@3 ~ g#5@3 ~@5, [a#3,f#4]@15 ~", I: "~@3 a#5, [a#3,f#4]", J: "[~ g#3@2 [g#3,c#4,f#4]]/2",
  K: "[g#3,b3,c#4,e4]", L: "~@6 d#5 ~ d#5 ~ d#5 ~@3 c#5@2, [g#3,d#4]@15 ~", M: "~@2 b4 ~@7 g#4 ~@5, [f#3,a#3]@15 ~",
  N: "~@6 d#5 ~ d#5 ~ d#5 ~@5, [g#3,b3,d#4,f#4]", O: "~@2 b4 ~ a#4 ~@11, a#3, f#4@3 ~",
  P: "f#4@4 ~@2 d#5 ~ d#5 ~ d#5 ~@5, b3@15 ~, ~@4 g#4@11 ~",
  Q: "~@2 b4 ~ a#4 ~ a#4@3 ~ g#4 ~ f#4 ~ g#4@2, [a#3,c#4], f#4@3 ~", R: "[c#4,f4]/2",
  S: "g#3 ~@5 d#5 ~ d#5 ~ d#5 ~@3 c#5@2, d#4@15 ~", T: "[g#3,b3,c#4,e4]/2", U: "[~@3 c#1@5]/2",
})).s("gm_pad_sweep").gain(0.07)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B A B C B D E F G H G I J D E F G H G I J D E K L M ~ N O ~@8 P Q P Q R J S T P Q P Q R J S T ~@53
>`.pickRestart({
  A: "b3@4 g#3 ~@3 b3 ~ b3@2 g#3 ~@3, a#3 ~@15", B: "a#3@4 f#3 ~@3 a#3 ~ a#3@2 f#3 ~@3, g#3 ~@15",
  C: "g#3@4 e3 ~@3 g#3 ~ g#3@2 e3 ~@3, f#3 ~@15",
  D: "c#3@3 c#4 [b2,b3] a#2 [g#2,g#3] ~ [c#3,c#4] ~@2 c#4 [b2,b3] a#2 [g#2,g#3] ~, c#4 ~@9 c#3@2 ~@4", // B G# C# B G#
  E: "c#4 ~ c#4!2 [b2,b3] a#2 [g#2,g#3] ~ [c#3,c#4] ~@2 c#4 [b2,b3] a#2 [g#2,g#3] ~, c#3@2 ~@3 c#3 ~@2", // B G# C# B G#
  F: "b3@3 ~ g#3 ~@3 b3 ~ b3@2 g#3 ~@3, a#3 ~@15", G: "a#3@3 ~ f#3 ~@3 [f#3,a#3] ~ a#3@2 g#3@2 f#3 ~, g#3 ~@15",
  H: "b3@4 g#3 ~@3 [f#3,b3] ~ b3@2 g#3 ~@3, a#3 ~@15", I: "g#3@3 ~ e3 ~@3 [e3,g#3] ~ g#3@2 e3 ~@3, f#3 ~@15",
  J: "a#3@3 ~ f#3 ~@3 [f#3,a#3] ~ a#3@2 f#3 ~@3, g#3 ~@15", K: "~@8 [e3,g#3] ~@7",
  L: "[f#3,a#3] ~@7 [c#4,e4]@4 ~@4, ~@8 d#4 ~@7", // F# C#m
  M: "[c#4,e4] ~ [c#4,e4] d#4 ~@4 [c#4,e4]@4 d#4 ~ [c#4,e4] ~, ~@8 d#4 ~@7", N: "[e3,g#3] ~@7 [f#3,a#3] ~@7",
  O: "[c#4,e4]@4 ~@4 [c#4,e4] ~ [c#4,e4] ~ d#4 ~ [c#4,e4] ~, d#4 ~@15", // C#m
  P: "b3@4 g#3 ~@2 b3 [g#3,b3] ~ [g#3,b3]@2 g#3 ~@3, g#3 ~@15", Q: "a#3@4 f#3 ~@3 a#3 ~ a#3@2 g#3@2 f#3 ~, g#3 ~@15",
  R: "g#3@3 ~ [e3,g#3] ~@3 [e3,g#3] ~ g#3@2 [e3,g#3] ~@3", S: "c#4 ~@2 c#4 b3 ~ g#3 ~ c#4 ~@2 c#4 b3 ~ g#3 ~",
  T: "c#4 ~ c#4!2 b3 ~ g#3 ~ c#4 ~@2 c#4 b3 ~ g#3 ~",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.1)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@6 A@2 ~@6 A@2 ~@6 A@2 ~@2 B@2 ~@16 A@2 ~ C D E@3 F G H ~ B@2 ~@25 I J ~@22
>`.pickRestart({
  A: "c#3@4 b2 a#2 g#2 ~ c#3 ~ c#3@2 b2 a#2 g#2 ~", B: "[~@6 g#3 ~ b3@4 c#4@2 g#3@8 ~@10]/2", C: "~@7 b3 d#4@5 ~ d#4@2",
  D: "~ c#4@3 ~@12", E: "[~ g#4@5]/3", F: "c#3@4 b2@2 ~@2 c#3 ~ c#3@2 ~@2 g#2 ~, g#2 ~@7",
  G: "c#3@4 b2@2 g#2 ~ c#3 ~ c#3@2 ~@2 g#2 ~, g#2 ~@7", H: "[b3,e4] ~@15", I: "~@12 g#4 ~ [e4,g#4] g#4",
  J: "[e4,f#4,g#4] ~ f#4@2 f#4 ~@11", // E
})).s("gm_distortion_guitar").gain(0.22)

// other · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft = note("<~@26 A ~@20 B ~@4 C D ~@2 A ~@26 E F ~@22>".pickRestart({
  A: "~@8 a#3 ~@7", B: "~@6 b3 ~@9", C: "~@6 g#2 ~@5 b2@2 ~@2", D: "~@6 b2 ~", E: "~@13 f#4 ~ f#4",
  F: "~ [f#4,g#4] ~ g#4 ~@12, ~ e4 ~@6", // F#sus2
})).s("gm_distortion_guitar").gain(0.11)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<A B C@2 D E ~@32 F G H@2 I@2 ~@2 F G H@2 I@2 ~@4 J@2 ~@21 K L ~@26>".pickRestart({
  A: "~ g#4@10 ~@5, [b3,d#4]@11 ~@5", B: "~ [c#4,f#4]@10 ~@5, g#3@11 ~@5",
  C: "[[b3,d#4,g#4]@11 ~@6 f#4@8 ~@7, ~@15 a#3@9 ~@8, ~@16 c#4@9 ~@7]/2", D: "~ e4@10 ~@5, [g#3,b3]@11 ~@5",
  E: "[c#4,f#4]@7 ~@9, a#3 ~@15", F: "~@2 d#5@2 ~@2 d#5 ~ d#5 ~ d#5 ~ d#5 ~ c#5@2",
  G: "~@2 b4 ~ a#4 ~ a#4@4 g#4 ~ f#4@3 ~",
  H: "[~@2 d#5@2 ~@2 d#5 ~ d#5 ~ d#5 ~ d#5 ~ c#5@4 b4 ~ a#4 ~ a#4@4 g#4 ~ f#4@3 ~]/2",
  I: "[~@2 d#5@2 ~@2 d#5 ~ d#5 ~ d#5 ~ d#5 ~ c#5@4 b4 ~ a#4 ~ a#4@3 ~ g#4 ~ f#4 ~ g#4@2]/2",
  J: "[~@6 g#3 ~ b3@4 c#4@2 g#3@8 ~@10, ~@8 a#3 ~@23]/2", K: "~@9 f#5 d#5 [c#5,f#5] d#5 [c#5,f#5] [a#4,d#5] [g#4,c#5]",
  L: "[a#4,d#5] [g#4,c#5] [f#4,a#4] [d#4,g#4] [f#4,a#4] [d#4,g#4] [c#4,f#4] d#4 [c#4,f#4] d#4 c#4 ~@5", // D#5 C#5 F# G#5 F# G#5 F#5
})).s("gm_electric_guitar_clean").gain(0.08)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@69 A@2 B C D E@2 ~@31>".pickRestart({
  A: "[~@8 [g#4,g#5]@3 [f#4,f#5]@3 [c#4,c#5]@9 ~@9]/2", B: "~ [e3,e4]", C: "[f#3,f#4]", D: "[g#3,g#4]",
  E: "[[f#3,f#4]@8 [a3,a4]@7 [b3,b4]@2 ~@15]/2", // F# A B
})).s("gm_string_ensemble_1").gain(0.17)

// drums · kick
const kick = s("bd").struct("<A@30 B A@30 C A@13 D B A@7 B A@8 B A@5 D ~@7>".pickRestart({
  A: "x!2", B: "~ x!3", C: "x!4", D: "x",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<A@30 ~ A@30 ~ A@13 ~@2 A@7 ~ A@8 ~ A@5 ~@8>".pickRestart({
  A: "~ x ~ x",
})).gain(0.43)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@53 A ~@6 B ~@6 C ~@3 D ~@2 E ~@4 F G ~@2 F H F H I ~@4 J ~@5 D ~@8>".pickRestart({
  A: "~@5 x ~@2", B: "~@2 x!3 ~ x ~ x ~ x ~ x ~@3", C: "~@12 x!3 ~", D: "~@5 x!2 ~", E: "~@15 x", F: "~@14 x!2",
  G: "x!2 ~@14", H: "x", I: "~@10 x!5 ~", J: "~@2 x!6",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~ A ~@7 A ~@5 A ~ A ~@2 B@2 ~ A C ~@6 D ~ A ~ A ~ A ~ E ~@3 A ~ A ~@4 A ~@4 C ~@45
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x!3", D: "~@9 x!2 ~@3 x ~", E: "~@10 x!2 ~@4",
})).gain(0.27)

// drums · high tom
const high_tom = s("ht").struct("<~@60 x ~@46>").gain(0.21)

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

More by Tina Turner