Strudelify

What's Love Got To Do With It

Tina Turner

KeyC majorTempo102 bpm
0:00/0:00
// What's Love Got To Do With It — TURNER TINA
// 102 bpm, 4/4, key C 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(102/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 C@2 B D C E A B C@2 B D C F@2 G@2 H I J K L M J K L N A B C@2 B D C F@2 G@2 H I J K L M J K L N O P Q R S P Q T U
  V W X Y Z AA AB AC AD AE AF AC AD AE AG AC AD AE AF AC AD AE AH ~@8
>`.pickRestart({
  A: "d2@4 ~@2 d2 ~ d2@5 ~@3", B: "d2@5 ~ d2 ~ d2@6 ~@2", C: "d2@4 ~@2 d2 ~ d2@6 ~@2", D: "d2@5 ~ d2 ~ d2@5 ~@3",
  E: "d2@5 ~ d2 ~ d2@4 ~@4", F: "[a#1@2 ~ c2@11 ~@2]/2", G: "[a#1@4 ~@2 c2@23 ~@3]/2", H: "a#1@5 ~ a#1 ~ a#1@6 ~@2",
  I: "c2@4 ~@2 c2 ~ c2@4 ~@4", J: "~@2 e2@2 e2 ~@3 d2@2 ~@2 c2@2 ~@2", K: "a#1@2 ~@4 a#1@2 c2 ~@7",
  L: "~@2 d#2@2 d2 ~ c2 ~ a#1@2 ~@2 d2@2 ~@2", M: "a#1@2 ~@4 a#1@2 c2 ~ a#2 c3 a2@4", N: "a#1@2 ~@4 a#1@2 c2 ~@3 g#2@4",
  O: "e2@2 f#2@2 f#2 ~@3 e2@2 ~@2 d2@2 ~@2", P: "c2@2 ~@4 c2@2 d2 ~@7", Q: "~@2 f2@2 e2 ~ d2 ~ c2@2 ~@2 e2@2 ~@2",
  R: "c2@2 ~@4 c2@2 d2 ~ c3 d3 b2@4", S: "~@2 f#2@2 f#2 ~@3 e2@2 ~@2 d2@2 ~@2", T: "c2@2 ~@4 c2@2 g1@4 ~@2 g1 ~",
  U: "g1@5 ~@3 g1@5 ~ g1 ~", V: "g1 ~ g1@4 ~@2 g1@4 ~@2 g1 ~", W: "g1@6 g1 ~ g1@4 ~@2 g1 ~",
  X: "g1 ~ g1@6 d#2@5 ~ d#2 ~", Y: "d#2@6 ~@2 d#2@5 ~ d#2 ~", Z: "d#2 ~ d#2@4 ~@2 d2@4 ~@2 d2 ~",
  AA: "d2@5 ~ d2 ~ g1@5 ~ g1 ~", AB: "g1@7 ~@3 f#2@2 f#2 ~@3", AC: "e2 ~ d2 ~ c2 ~@2 c2", AD: "d2 ~@9 f2@2 e2 ~ d2 ~",
  AE: "c2 ~ e2 ~ c2 ~@2 c2", AF: "d2 ~ c3 d3 b2@4 ~@2 f#2@2 f#2 ~@3", AG: "d2 ~@3 a#2@4 ~@2 f#2@2 f#2 ~@3",
  AH: "d2 ~@15",
})).s("gm_electric_bass_finger").gain(0.55)

// other · blown bottle · "BOTTLEBLOW"
const blown_bottle = note("<~@16 A ~ B ~@18 A ~ B ~@50>".pickRestart({
  A: "g5!2 ~@4 g5!2 ~ g5 e5@2 d5@2 e5 ~", B: "g5!2 ~@4 g5!2 ~ g5 f5@2 d5@2 f5 ~",
})).s("gm_blown_bottle").gain(0.29).pan(0.3)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note(`<
  A@2 B@2 A@2 C@2 ~@2 B@2 A@2 C@2 ~@13 A@2 B@2 A@2 C@2 ~@20 D@8 E F G H I J K L M F G H I J K L N ~@8
>`.pickRestart({
  A: "[f4,a4]/2", B: "[e4,g4]/2", C: "[[e4,g4]@15 ~]/2",
  D: "[~@4 [c4,f4,a4]@8 [d4,g4,b4]@8 [f4,a4,c5]@8 a4 b4@7 [g4,a#4,d#5]@8 [a4,c5,f5]@8 [c5,d5,f5]@8 [b4,d5,g5]@4, ~@7 [g4,d5]@2 ~@7]/8", // F G F D# F Dm7 G G5
  E: "~@3 [b4,d5,g5]", F: "[a4,d5,f#5]@3 ~ [g4,c5,e5]@3 ~", G: "[a4,d5,f#5]@2 ~ [g4,b4,e5]",
  H: "[f#4,a4,d5]@4 [e4,g4,c5]@3 ~", I: "g4@3 ~ f#4@3 ~@5 [b4,d5,g5]@4, [a4,d5] ~", J: "[a4,d5,f#5] [g4,c5,e5]",
  K: "[a4,d5,f#5]@8 [g4,b4,e5]@7 ~", L: "[f#4,a4,d5] [e4,g4,c5]", M: "g4@3 ~ f#4@4 ~@4 [b4,d5,g5]@4, [a4,d5] ~",
  N: "[a4,d5] ~, g4@3 ~@13", // D5
})).s("gm_pad_sweep").gain(0.5).pan(0.8)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A@2 B@2 A@2 B@2 C D C D C D C ~@6 E F E G E F H I C D C D C D C ~@6 E F E G E F H I J K J L J K M N O P Q R S A Q T E
  U E V E W X Y E U E V E W X ~@9
>`.pickRestart({
  A: "~@2 f3!2 ~@2 f3!2 ~@2 f3!2 ~@2 f3!2", B: "~@2 e3!2 ~@2 e3!2 ~@2 e3!2 ~@2 e3!2",
  C: "d4 ~@2 d4 ~@2 c4 ~ d4!2 c4 ~ d4 ~@3", D: "d4 ~@2 d4 ~@2 c4 ~ d4!2 ~@2 a3 ~ c4 ~",
  E: "~@2 d4!2 ~@2 d4 ~@3 c4!2 ~@2 c4 ~", F: "~@2 a#3!2 ~@2 a#3 ~@3 c4!2 ~@2 c4 ~",
  G: "~@2 a#3!2 ~@2 a#3 ~@3 a#3 c4 a3@2 c4 ~", H: "~@2 c4 d4 ~@2 d4 ~@3 c4!2 ~@2 c4 ~",
  I: "~@2 a3 a#3 ~@2 a#3 ~@3 c4!2 ~ c4!2 ~", J: "~@2 e4!2 ~@2 e4 ~@3 d4!2 ~@2 d4 ~",
  K: "~@2 c4!2 ~@2 c4 ~@3 d4!2 ~@2 d4 ~", L: "~@2 c4!2 ~@2 c4 ~@3 c4 d4 b3@2 d4 ~",
  M: "~@2 d4 e4 ~@2 e4 ~@3 d4!2 ~@2 d4 ~", N: "~@2 b3 c4 ~@2 c4 ~@3 f3!2 ~@2 f3!2",
  O: "~@2 f3!2 ~@2 f3!2 ~@2 g3!2 ~@2 g3!2", P: "~@2 g3!2 ~@2 g3!2 ~@2 f3!2 ~@2 f3!2",
  Q: "~@2 d3!2 ~@2 f3!2 ~@2 g3!2 ~@2 g3!2", R: "g3!5 ~@5 d#3!2 ~@2 d#3!2", S: "~@2 d#3!2 ~@2 d#3!2 ~@2 f3!2 ~@2 f3!2",
  T: "g3!5 ~@5 e4!2 ~@2 e4 ~", U: "~@2 d4!2 ~@2 d4 ~@3 e4!2 ~@2 e4 ~", V: "~@2 c4 d4 b3@2 d4 ~@3 e4!2 ~@2 e4 ~",
  W: "~@2 d4!2 ~@2 d4 ~@3 d4 e4 ~@2 e4 ~", X: "~@2 d4!2 ~@2 d4 ~@3 b3 c4 ~@2 c4 ~",
  Y: "~@2 d4!2 ~ d4!2 ~@3 e4!2 ~@2 e4 ~",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.7)

// other · pan flute
const pan_flute = note("<A B C@2 A@2 C D ~@23 E F ~@57>".pickRestart({
  A: "~@3 a4 c5 f5 d5 ~@2 a4 c5 f5 d5 ~ d5 ~", B: "~@3 a4 c5 f5 d5 ~@2 a4 c5 f5 d5 ~@3",
  C: "~@3 a4 c5 f5 e5 ~@2 a4 c5 f5 e5 ~ e5 ~", D: "~@3 a4 c5 f5 e5 ~ e5 a4 c5 f5 e5 ~@3", E: "~@9 a4 c5 f5 e5 d5 ~ a4",
  F: "c5 f5 e5 d5 ~ a4 c5 f5 e5 d5 ~ a4 c5 f5 e5 ~",
})).s("gm_pan_flute").gain(0.37).pan(0.3)

// other · pan flute · soft notes
const pan_flute_soft = note("<A B C D E F C G ~@82>".pickRestart({
  A: "~@8 d5 ~@7", B: "d5 ~@7 d5 ~@5 d5 ~", C: "d5 ~@7 e5 ~@7", D: "e5 ~@7 e5 ~@7", E: "e5 ~@7 d5 ~@7",
  F: "d5 ~@7 d5 ~@7", G: "e5 ~@13 e5 ~",
})).s("gm_pan_flute").gain(0.21).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@2 A@2 B@2 C@2 B@2 A@2 D E@2 F@2 G H I J K L I M K N O@2 B@2 A@2 P@3 F@2 G H I J Q L I M Q N R S T U R V T W ~@3
  X@5 Y Z AA AB Y AC AA AD Y Z AA AB Y AC AA AE ~@8
>`.pickRestart({
  A: "[[d3,d4,f4,a4,c5]@31 ~]/2", B: "[d3,c4,e4,g4,c5]/2", C: "[f4,a4,c5]/2", D: "[d3,c4,e4,g4,c5]@7 ~",
  E: "[[a#2,f3,a#3]@3 a#2@3 [c3,g3,c4]@2 c3@20 ~@4, ~@3 f3 ~@28]/2", // A#5 C5
  F: "[[a#2,f3,a#3]@3 ~@3 [c3,g3,c4]@3 [c3,g3]@22 ~]/2", G: "~ a#3@2 f3@13, [a#2,f3]@3 ~@13",
  H: "~ c4@2 g3@13, [c3,g3]@3 ~@13", I: "[a3,d4,f4]@3 ~ [g3,c4,e4]@3 ~",
  J: "[f3,a#3,d4]@6 [a#3,d4] ~@3 e4 [c4,e4] ~@2 [g3,c4,e4] [c4,e4]", // A# C
  K: "~@4 [a3,d4,f4]@2 ~@2 [c4,e4]@4 ~ c4 ~@2, ~@7 g3@5 e4@3 ~", L: "[f3,a#3,d4]@5 ~@3 [f4,a4]@4 g4@4, ~@8 c4@7 ~",
  M: "[f3,a#3,d4]@6 [a#3,d4] ~@3 [c4,e4]!2 ~@2 [c4,e4]!2", N: "[f3,a#3,d4]@5 ~@3 f4@4 e4@3 ~, ~@8 [g3,c4]@7 ~",
  O: "[~ c5@31, [f4,a4]]/2", // F
  P: "[c4@6 ~@10 [a#2,f3,a#3]@3 a#2@3 [c3,g3,c4]@2 c3@20 ~@4, [d3,e4,g4,c5]@2 ~, ~@19 f3 ~@28]/3", // A#5 C5 C
  Q: "~@4 [a3,d4,f4]@2 ~@2 e4@4 ~ c4 ~@2, ~@4 [g3,c4]@3 ~, ~@12 e4@3 ~", R: "[b3,e4,g4]@3 ~ [a3,d4,f#4]@3 ~",
  S: "[g3,c4,e4]@6 [c4,e4] ~@3 f#4 [d4,f#4] ~@2 [a3,d4,f#4] [d4,f#4]", // C D
  T: "~@4 [b3,e4,g4]@2 ~@2 f#4@4 ~ d4 ~@2, ~@4 [a3,d4]@3 ~, ~@12 f#4@3 ~", // Em D5
  U: "[g3,c4,e4]@5 ~@3 [g4,b4]@4 a4@4, ~@8 d4@7 ~", V: "[g3,c4,e4]@6 [c4,e4] ~@3 [d4,f#4]!2 ~@2 [d4,f#4]!2",
  W: "[g3,c4,e4]@5 ~@11", // C
  X: "[[c#5,f#5] [d5,g5]!4 ~@5 [f4,g4]@10 ~@10 c5@4 f5@5 ~@7 f5@6 ~@10 a5@4 g5@3 ~@3 [b3,e4,g4]@6 ~@2, ~@8 d#5@11 ~@7 g4@11 ~@7 c5@8 ~@4 g5@10 ~@14, ~@9 a#4@10 ~@5 f4@15 ~ d4@12 ~@5 b4@4 ~@19, ~@28 a4@6 ~@8 a4@10 ~@5 d5@14 ~@9, ~@29 a4@5 ~@6]/5", // F#5 G5 Fsus2 Em
  Y: "[a3,d4,f#4]@6 ~@2 [g3,c4,e4]@6 [c4,e4] ~", Z: "~@2 f#4 [d4,f#4] ~@2 [a3,d4,f#4] [d4,f#4] ~@4 [b3,e4,g4]@2 ~@2",
  AA: "f#4@4 ~ d4 ~@2 [g3,c4,e4]@5 ~@3, [a3,d4]@3 ~@5, ~@4 f#4@3 ~@9", AB: "[g4,b4]@2 a4@2 [b3,e4,g4]@3 ~, d4@7 ~@9",
  AC: "~@2 [d4,f#4]!2 ~@2 [d4,f#4]!2 ~@4 [b3,e4,g4]@2 ~@2", AD: "g4@4 f#4@3 ~ [b3,e4,g4]@6 ~@2, [a3,d4]@7 ~@9",
  AE: "[a3,d4]@7 ~@9, g4 ~@3", // D5
})).s("gm_electric_guitar_clean").gain(0.21).pan(0.2)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@15 A@2 B@2 C D ~ E F@2 ~ G H@2 ~@7 I@2 J@2 C D ~ E F@2 ~ G H@2 ~ K L@2 ~ M N@2 ~@9 O P Q ~ R P ~@2 O S Q ~ R P ~@9
>`.pickRestart({
  A: "[~@3 a#3@4 ~@2 [g3,c4]@23]/2", B: "[~@3 [a#2,f3,a#3]@4 ~@2 c4@22 ~]/2", C: "~@3 a#2@13, ~@3 a#3@10 ~@3",
  D: "~@3 [c3,c4]@12 ~", E: "~@10 c4 ~ c4 ~@3", F: "[~@6 c#4 ~@7 g3@6 ~@8 e4@4]/2", G: "~@11 g3 c4 ~ g3 ~",
  H: "[~@6 c#4 ~@7 g3@6 ~@12]/2", I: "[~@3 a#3@4 ~@2 [g3,c4]@20 ~@3]/2",
  J: "[~@3 [a#2,f3]@4 ~@2 c4@22 ~, ~@3 a#3 ~@28]/2", K: "~@10 d4 ~ d4 ~@3", L: "[~@6 d#4 ~@7 a3@6 ~@8 f#4@4]/2",
  M: "~@11 a3 d4 ~ a3 ~", N: "[~@6 d#4 ~@7 a3@6 ~@12]/2", O: "~@2 d4 ~ d4 ~@9 d#4 ~", P: "~@3 a3@3 ~@2", Q: "~ f#4 ~@2",
  R: "~@4 [a3,d4] ~ a3 ~@7 d#4 ~", S: "~@6 a3 ~@9",
})).s("gm_electric_guitar_clean").gain(0.07).pan(0.2)

// other · harmonica
const harmonica = note("<~@50 A@2 B C D E F G@2 ~@14 H@2 I@2 J@2 K@2 ~@9>".pickRestart({
  A: "[c5@21 ~@5 f#5@2 e5 ~ g5 ~]/2", B: "a5@3 ~ a5 ~ g5 ~ g5@6 g5 ~", C: "e5@8 ~@4 g#4@2 d5 ~",
  D: "g5!2 f#5 ~ e5 ~@2 d5 e5 e5@2 b4 ~@3 g4", E: "b4@4 ~ a4 f#4 d4", F: "e4@8 d4 g4 b4 d5@3 d5 ~",
  G: "[a4@4 g4@3 ~ g4@16 ~@8]/2", H: "[~ a#4@2 ~]/2", I: "[~@4 a5@3 ~ a5@14 ~@10]/2", J: "[~@4 a4@3 ~ a4@14 ~@10]/2",
  K: "[~@4 b4@2 e5@2 g5@3 ~ g#5@7 ~@13]/2",
})).s("gm_harmonica").gain(0.45).pan(0.6)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@19 A B C D E F E G H I ~@11 J K L D E F E G E I M N O P O Q R S@4 T@5 U V W X W Y W Z U V W X W Y W AA ~@8
>`.pickRestart({
  A: "~@8 f4@3 ~@3 a#3@2, a#3@13 ~@3, ~@3 c4@10 ~@3, ~@3 d4@4 ~, ~@11 a#4@5",
  B: "~@6 f5 e5, c4@2 g4 ~, ~@3 d4@10 ~@3, ~@6 e4@7 ~@3, ~@5 c5@2 ~",
  C: "d4@2 [d5,f5] ~ [g4,c5,e5]@4, d5@2 ~@2 a4 ~@11", D: "[f4,a#4,d5]@4 [g4,c5,e5]@3 ~",
  E: "~@2 [a4,d5,f5] ~ [g4,c5,e5]@4", F: "[f4,a#4,d5]@8 f4@3 ~ e4@4, ~ [g4,c5]", G: "[f4,a#4,d5]@2 [g4,c5,e5] ~",
  H: "~@4 [a4,d5,f5]@2 ~@2 [g4,c5,e5]@7 ~", I: "[f4,a#4,d5]@2 f4 e4, ~ [g4,c5]",
  J: "~@11 a#4 ~@2 a#3@2, a#3@13 ~@3, ~@3 c4@10 ~@3, ~@3 d4@4 ~, ~ f4",
  K: "~@6 f5 e5, c4@5 ~ e4@7 ~@3, ~@3 d4@5 g4@4 ~@4, ~@5 c5@2 ~",
  L: "[d4,d5]@4 [d5,f5]@2 ~@2 [g4,c5,e5]@7 ~, ~@4 a4 ~@11", M: "e4@3 ~ [e5,g5]@2 ~@2 [a4,d5,f#5]@7 ~, ~@4 b4 ~@11",
  N: "[g4,c5,e5]@3 ~ [a4,d5,f#5]@3 ~", O: "~@2 [b4,e5,g5] ~ [a4,d5,f#5]@3 ~",
  P: "[g4,c5,e5]@6 ~@2 g4@3 ~ f#4@4, ~ [a4,d5]", Q: "[g4,c5,e5]@3 ~ [a4,d5,f#5]@2 ~@2",
  R: "~@4 [b4,e5,g5]@2 ~@2 [a4,d5,f#5]@5 ~@3", // Em D
  S: "[[g4,c5,e5]@6 ~@2 [g3,c4,f4]@16 ~ b4@15 ~@14 f4 ~@3 g4@6, ~@8 [g4,a4,d5]@5 ~@11 d4@16 f4@13 ~@4 a4@2 ~@5, ~@24 [g3,g4]@13 ~@3 [g3,c4]@16 [g3,d4]@8, ~@41 a4@11 c5@4 b4@2 ~@6, ~@50 f5@5 ~@9]/4", // C Csus4 Gsus2 G C5 G5
  T: "[g4@2 ~@4 d5@2 [f4,g4,a#4,d#5]@16 ~ f5@15 [d4,a4,c5,f5]@16 [a4,b4,d5]@16 e4@3 ~ [e5,g5]@2 ~@2, ~@2 a4@6 ~@16 [f4,a4,c5]@16 ~@36 b4 ~@3, ~@2 b4@5 ~@21 g5@7 ~@5]/5", // D# Dm7 Bm7 Em F
  U: "[a4,d5,f#5]@7 ~ [g4,c5,e5]@8", V: "[a4,d5,f#5]@3 ~@3 [b4,e5,g5] ~", W: "[a4,d5,f#5] [g4,c5,e5]",
  X: "g4@3 ~ f#4@4 ~@4 [b4,e5,g5]@2 ~@2, [a4,d5] ~", Y: "[a4,d5,f#5]@2 ~@4 [b4,e5,g5] ~",
  Z: "g4@4 f#4@4 e4@3 ~ [e5,g5]@2 ~@2, [a4,d5]@8 ~@4 b4 ~@3", AA: "[a4,d5] ~, g4 ~@3",
})).s("gm_epiano2").gain(0.31).pan(0.6)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@15 A@4 B C ~@15 D@4 E F ~@19 G@4 H ~@24>".pickRestart({
  A: "[~ c6@4 c6@3]/4", B: "c6", C: "c6@5 [c6,d6,e6,g6]@3", D: "[~ c5@4 c5@3]/4", E: "c5", F: "c5@5 [c5,d5,e5,g5]@3",
  G: "[g4 ~@2 d5 [g4,a#4,d#5]@8 [a4,c5,f5]@8 [c5,d5,f5]@8 [b4,d5,g5]@4, ~ a4@3 ~@28, ~ b4 ~@14]/4", // D# F Dm7 G
  H: "g5@2 g5 f#5 ~@4, [d5,a5] ~", // D5
})).s("gm_string_ensemble_2").gain(0.18).pan(0.2)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes · Dm Fsus2 Dm Fsus2
const string_ensemble_2_soft = note("<~@19 [[d5,f5]] [[f5,g5]@5 ~@3] ~@19 [[d4,f4]] [[f4,g4]@5 ~@3] ~@48>")
  .s("gm_string_ensemble_2").gain(0.08).pan(0.2)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@17 B A@3 B A@11 C D A@3 B E A F A E A G A E A F A E A H A@6 I J A K A L A K A M A K A N A K A ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x", C: "~@2 x ~@2 x ~@2", D: "~@3 x ~@8 x ~@3", E: "~@4 x ~@7 x ~ x!2", F: "~ x ~@2",
  G: "~@2 x ~@2 x!3", H: "~@3 x", I: "~ x ~@4 x ~", J: "~ x!2 ~@3 x ~", K: "~@4 x ~ x!2 ~@4 x ~@3",
  L: "~@2 x!2 ~@2 x ~@5 x ~@3", M: "~ x!4 ~ x ~", N: "~@2 x!2 ~@8 x ~@3",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@21 x ~@20 x ~@47>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@37 A ~ A ~@25 B ~@11 C ~@12>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@5 x ~ x ~@8",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@24 A ~@3 B ~@8 C ~ C ~@5 A ~@3 C ~@3 A ~@3 D ~@7 E ~@7 E ~@3 F ~ E ~@10
>`.pickRestart({
  A: "~@6 x!2", B: "~@15 x", C: "~@13 x ~@2", D: "~@4 x!2 ~@10", E: "~@5 x ~@10", F: "~@5 x ~ x ~@8",
})).gain(0.4)
// … 37 more lines

More by Tina Turner