Strudelify
The Best cover art

1989 · Tina!

The Best

Tina Turner

KeyF majorTempo108 bpm
0:00/0:00
// The Best — Tina Turner
// 108 bpm, 4/4, key F major. Source: mcgill + 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(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 · fretless bass · "Bass Gtr"
const bass = note(`<
  ~ A@3 B A@5 B@2 A C@2 D E F@7 G H I J K F@3 L H I M N F@3 O H I M P F@7 G H I J K F@3 L H I M N F@3 O H I M Q R S H T
  R J M U V@3 W X Y H Z V@3 AA AB AC H I V@3 AA X AD H I AE@2
>`.pickRestart({
  A: "f1 ~@5 f1 ~@9", B: "f1@2 ~@4 f1 ~@9", C: "d1 ~@5 d1 ~@9", D: "bb1@2 ~@4 bb1 ~@9", E: "bb1@7 ~",
  F: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", G: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 c2@2",
  H: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", I: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2",
  J: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2", K: "c2 ~ c2 ~ c2 ~@11",
  L: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 a1@2 c2@2", M: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  N: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 d2@2 f2@2", O: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1!2 a1@2 c2@2",
  P: "c2 ~ c2 ~ c2 ~ c2@2 d2@2 f2@2 d2@2 c2@2", Q: "c2 ~ c2 ~ c2 ~ c2@2 c2@2 c2@2 g1@2 c2@2",
  R: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~", S: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2 c2@2",
  T: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 c2@2", U: "c2 ~ c2 ~ c2 ~ d2@3 ~ d2 ~ d2 ~ d2 ~",
  V: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", W: "g1 ~ g1 ~ g1 ~ g1@2 b1@2 d2@2 e2@2 d2@2",
  X: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", Y: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1@2",
  Z: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 b1@2", AA: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 b1@2 d2@2",
  AB: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", AC: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2",
  AD: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1@2 e2@2", AE: "[g1@7 ~]/2",
})).s("gm_fretless_bass").gain(0.44)

// chords · epiano2 · "E.Piano"
const epiano2 = note(`<
  ~ A@4 B A C D A@2 C E F@2 G@2 B A H I A J K L M@2 N O P Q@2 R@2 S T@2 P U@4 V W@2 B A H I A J K L M@2 N O P Q@2 R@2 S
  T@2 P U@4 V W@2 X@2 Y@2 X@2 Z AA AB AC@4 AD AE@2 AB AC@4 AD AE@2 AB AC@4 AD AE@2 AF@2
>`.pickRestart({
  A: "f2 ~@5 f2 ~@9", B: "f2@2 ~@4 f2 ~@9", C: "[f3,a3,c4]@3 [f3,a3,d4]@5, f2 ~@5 f2 ~@9",
  D: "[f3,a3,e4]@3 [f3,a3,f4]@5, f2 ~@5 f2 ~@9", E: "[f3,a3,e4]@3 [f3,a3,f4]@4 ~, f2 ~@5 f2 ~@9",
  F: "[d2@2 ~@4 d2@4 ~@6 d2 ~@5 d2 ~@9, d3@15 ~, ~ f3@14 ~, ~@2 a3@13 ~, ~@3 d4@12 ~]/2",
  G: "[bb1@2 ~@4 bb1@2 ~@8 bb1 ~@15, d3@15 ~, ~ f3@14 ~, ~@4 bb3@25 ~@3, ~@6 d4@23 ~@3]/2",
  H: "[f3,a3,c4]@3 [f3,a3,d4]@5, f2@3 ~@3 f2@2 ~@8", I: "[f3,a3,e4]@3 [f3,a3,f4]@5, f2 ~@2 f2 ~@4",
  J: "f2 ~@5 f2@2 ~@8", K: "[f3,a3,c4]@3 [f3,a3,d4]@5, f2@2 ~@4 f2 ~@9",
  L: "[f3,a3,e4]@3 [f3,a3,f4]@4 ~, f2 ~@2 f2 ~@4", // Fmaj7 F
  M: "[d2 ~@5 d2 ~@9 d2 ~@5 d2 ~@9, d3@15 ~, ~ f3@14 ~, ~@2 a3@13 ~, ~@3 d4@12 ~]/2",
  N: "bb1@2 ~@4 d4@7 ~@3, d3@3 ~, ~ f3@5 ~@2, ~@4 bb3@9 ~@3, ~@6 bb1 ~@9",
  O: "[g3,c4,g4] ~ [g3,c4,g4] ~ [g3,c4,g4] ~@11", P: "~@2 [c4,f4,a4]@3 [c4,f4,g4]@3",
  Q: "[[c4,f4,bb4]@3 [c4,f4,a4]@6 ~ [c4,f4,a4]@3 [c4,f4,g4]@3]/2", // Fsus4 F Csus4
  R: "[[c4,f4,bb4]@5 ~ [c4,f4,a4]@12 ~@2 [c4,f4,a4]@6 [c4,f4,g4]@6]/2", S: "[c4,f4,bb4]@3 [c4,f4,a4]@5",
  T: "[[c4,g4,c5]@29 ~@3]/2", U: "[[c4,f4,bb4]@6 [c4,f4,a4]@13 ~ [c4,f4,a4]@6 [c4,f4,g4]@6]/2",
  V: "[c4,f4,bb4]@6 [c4,f4,a4]@9 ~", W: "[[c4,g4,c5]@7 ~]/2", X: "bb5 f5 d5 bb5 f5 d5 bb5 f5",
  Y: "a5 f5 d5 a5 f5 d5 a5 f5", Z: "c6 g5 e5 c6 g5 e5 c6 g5", AA: "c6 g5 e5 d6 a5 gb5 d6 a5",
  AB: "~@2 [d4,g4,b4]@3 [d4,g4,a4]@3", AC: "[[d4,g4,c5]@6 [d4,g4,b4]@13 ~ [d4,g4,b4]@6 [d4,g4,a4]@6]/2",
  AD: "[d4,g4,c5]@6 [d4,g4,b4]@9 ~", AE: "[[d4,a4,d5]@7 ~]/2", AF: "[[g4,d5]@7 ~]/2",
})).s("gm_epiano2").gain(0.45).pan(0.2)

// chords · overdriven guitar · "LeadGuitr"
const overdriven_guitar = note(`<
  ~@12 A B@2 C D ~@8 E@2 F G H@2 I@2 J@2 K@2 I@2 L@2 M@2 N@2 ~@8 E@2 F G H@2 I@2 J@2 K@2 I@2 L@2 M@2 N@2 O@2 P@2 O@2 Q R
  S@2 T@2 U@2 V@2 T@2 W@2 X@2 Y@2 S@2 T@2 U@2 V@2 Z@2
>`.pickRestart({
  A: "~@7 [c3,g3]", B: "[[d3,a3]@15 ~]/2",
  C: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", D: "[bb2,f3]",
  E: "d3/2", F: "bb2", G: "[c3,g3]!3 ~@5", H: "[~@4 [f3,f4]@5 ~ [g3,g4]@5 ~ [bb3,bb4]@5 ~ [a3,a4]@10, f2@31 ~]/2",
  I: "[~@4 [f3,f4]@5 ~ [g3,g4]@4 ~@2 [bb3,bb4]@5 ~ [a3,a4]@10, f2@31 ~]/2", // F G Bb A
  J: "[~@4 [f3,f4]@4 ~@2 [g3,g4]@5 ~ [bb3,bb4]@5 ~ [a3,a4]@10, d2@31 ~]/2", // F G Bb A
  K: "[~@2 [c3,g3] ~@2 [c3,g3] ~ c3 d3 c3 g3 c3@5, c2@31 ~]/2", // C5
  L: "[~@2 [f3,f4]@2 ~ [g3,g4]@2 ~ [bb3,bb4]@2 ~ [a3,a4]@5, f2@31 ~]/2", // F G Bb A
  M: "[~@4 [f3,f4]@4 ~@2 [g3,g4]@4 ~@2 [bb3,bb4]@5 ~ [a3,a4]@10, d2@31 ~]/2", // F G Bb A
  N: "[~@2 [c3,g3] ~@2 [c3,g3] ~ c3 d3 c3 g3 c3@5, c2]/2", O: "[[bb2,f3,bb3]@31 ~]/2", P: "[d3,a3,d4]/2",
  Q: "[c3,g3,c4]", R: "[c3,g3,c4]@3 [d3,a3,d4]@5", S: "[~@4 [g3,g4]@5 ~ [a3,a4]@5 ~ [c4,c5]@5 ~ [b3,b4]@10, g2@31 ~]/2",
  T: "[~@4 [g3,g4]@5 ~ [a3,a4]@4 ~@2 [c4,c5]@5 ~ [b3,b4]@10, g2@31 ~]/2", // G A C B
  U: "[~@4 [g3,g4]@4 ~@2 [a3,a4]@5 ~ [c4,c5]@5 ~ [b3,b4]@10, e2@31 ~]/2", // G A C B
  V: "[~@2 [d3,a3] ~@2 [d3,a3] ~ d3 e3 d3 a3 d3@5, d2@31 ~]/2", // D5
  W: "[~@2 [g3,g4]@2 ~ [a3,a4]@2 ~ [c4,c5]@2 ~ [b3,b4]@5, g2@31 ~]/2", // G A C B
  X: "[~@4 [g3,g4]@4 ~@2 [a3,a4]@4 ~@2 [c4,c5]@5 ~ [b3,b4]@10, e2@31 ~]/2", // G A C B
  Y: "[~@2 [d3,a3] ~@2 [d3,a3] ~ d3 e3 d3 a3 d3@5, d2]/2", Z: "[g2@7 ~]/2",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.2)

// other · alto sax · "Sax Solo"
const alto_sax = note("<~@80 A@3 B C D@2 E F ~@18>".pickRestart({
  A: "[~@10 e4@2 g4 ~ d5@12 b4@2 a4 ~ g4@4 e4 ~@5 [bb4,b4] ~ b4 ~ b4 ~ b4 ~, ~@10 eb4 ~@3 db5 ~@11 bb4 ~@21]/3", // Bmaj7
  B: "b4@2 a4@2 g4 ~ g4@4 e4@2 d4@2 ~@2, bb4 ~@15", C: "~@2 b4@2 b4 ~ b4 ~ [bb4,b4] ~ b4 ~ b4 ~ b4@2, ~@2 bb4 ~@13",
  D: "[bb4@2 a4@2 g4 ~ e4@4 d4@2 b3 ~ b3@4 d4@3 ~@3 d4@4 ~@4]/2", E: "d5@3 ~@5 d5@3 ~ b4@2 d5@2, ~@12 bb4 ~@3",
  F: "~ c6@7",
})).s("gm_alto_sax").gain(0.64).pan(0.8)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A@2 ~@2 B@2 C D B@2 E D F@2 G@2 B@2 H@2 B@2 C I F@2 J K L@6 M@2 N@6 O@2 B@2 P Q B@2 C I F@2 J R L@6 M@2 L@6 S@2 T@2
  U@2 T@2 V@2 W@6 X@2 Y@6 U@2 Y@6 Z@2 AA@2
>`.pickRestart({
  A: "[f2,f3]/2", B: "[[f2,f3]@31 ~]/2", C: "[f2,f3,a3,c4]@6 [f2,f3,a3,d4]@9 ~", D: "[f2,f3,a3,e4]@6 [f2,f3,a3,f4]@9 ~",
  E: "[f2,f3,a3,c4]@5 ~ [f2,f3,a3,d4]@9 ~", F: "[d2,d4,f4,a4]/2", G: "[[bb1,d4,f4,bb4]@31 ~]/2",
  H: "[[f2,f3,a3,c4]@6 [f3,a3,d4]@9 ~ [f3,a3,e4]@6 [f3,a3,f4]@9 ~, ~@6 f2@25 ~]/2", // F Dm Fmaj7 F
  I: "[f2,f3,a3,e4]@3 [f2,f4]@5, ~@3 [f3,a3]@4 ~", J: "[bb1,d4,f4,bb4]@15 ~",
  K: "[c2,c4,g4,c5] ~ [c2,c4,g4,c5] ~ [c4,g4,c5] ~@11, ~@2 c2 ~@5", L: "[f2@2 d2, [f3,c4,f4]@95 ~]/6",
  M: "[c2,c4,g4,c5]/2", N: "[f2@2 d2, [f3,c4,f4]]/6", O: "[c2@3 ~ c2@28, [c4,g4,c5]]/2",
  P: "[f2,f3,c4]@6 [f2,f3,d4]@9 ~, a3@15 ~", Q: "[f2,f3,e4]@3 [f2,f3,f4]@5, a3",
  R: "[c2,c4,g4,c5] ~ [c2,c4,g4,c5] ~ [c2,c4,g4,c5] ~@11", S: "[[c2,c4,g4,c5], d5 ~@31]/2", T: "[bb1,bb3,f4,bb4]/2",
  U: "[d2,d4,a4,d5]/2", V: "[[c2,g4,c5]@11 [d2,d4,a4,d5]@5, c4@5 ~@3]/2", W: "[g1@2 e2, [g3,d4,g4]@95 ~]/6",
  X: "[[d2,d4,a4], d5@15 ~]/2", Y: "[g2@2 e2, [g3,d4,g4]@95 ~]/6", Z: "[[d4,a4,d5]@15 ~, d2]/2",
  AA: "[[g2,g3,d4,g4]@7 ~]/2", // G5
})).s("gm_string_ensemble_1").gain(0.3).pan(0.7)

// chords · electric guitar muted · "Stacc.Gtr"
const electric_guitar_muted = note(`<
  ~ A B C D E F G H I@2 J K L M N ~ O P O@3 P O@2 Q R S T U@4 V Q W@2 U@4 R@2 X W Y O@7 R Z AA T U@4 R Q W@2 U@4 R@2 W@2
  AA@2 AB@2 AA@2 W AC AD@4 AE@2 AB@2 AD@4 AF AE AG AH AD@4 AE@2 AB@2 ~@2
>`.pickRestart({
  A: "[f2,c3] ~@3 f2 ~ [f2,c3] ~@5 [f2,c3] ~ f2 ~", B: "[f2,c3] ~@5 [f2,c3] ~ [f2,c3] ~@3 [f2,c3] ~ c3 ~",
  C: "[f2,c3] ~ c3 ~@3 [f2,c3] ~ [f2,c3] ~@3 f2 ~ f2 ~", D: "[f2,c3] ~ f2 ~ f2 ~ [f2,c3] ~ c3 ~ f2 ~ [f2,c3] ~ f2 ~",
  E: "[f2,c3] ~ [f2,c3] ~@3 [f2,c3] ~ [f2,c3] ~@3 [f2,c3] ~ f2 ~", // F5
  F: "[f2,c3] ~ f2 ~ f2 ~ [f2,c3] ~ [f2,c3] ~@3 [f2,c3] ~ [f2,c3] ~", // F5
  G: "[f2,c3] ~ f2 ~ [f2,c3] ~ [f2,c3] ~ f2 ~ f2 ~ [f2,c3] ~ f2 ~", // F5
  H: "[f2,c3] ~ c3 ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ f2 ~ [f2,c3] ~ f2 ~", // F5
  I: "[f2,c3] ~ f2 ~ f2 ~ [f2,c3] ~ f2 ~ f2 ~ [f2,c3] ~ [f2,c3] ~", J: "[f2,c3] ~ f2 ~ f2 ~ [f2,c3] ~@5 f2 ~ [f2,c3] ~",
  K: "[f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~@3 [f2,c3] ~ [f2,c3] ~", // F5
  L: "[d2,a2] ~@5 [d2,a2] ~ a2 ~@3 [d2,a2] ~ a2 ~", M: "[d2,a2] ~@3 [d2,a2] ~ [d2,a2] ~ a2 ~ a2 ~ [d2,a2] ~ [d2,a2] ~",
  N: "[bb2,f3] ~ bb2 ~ [bb2,f3] ~ [bb2,f3] ~@3 [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  O: "[f2,c3] ~ [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] f4", // F5
  P: "[f2,c3] ~ [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] ~ [f2,c3] ~ [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] f4", // F5
  Q: "[d2,a2] ~ a2 ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~", // D5
  R: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~", // D5
  S: "bb2 ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  T: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~@11", // C5
  U: "[f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // F5
  V: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ a2 ~", // D5
  W: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
  X: "[c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~", // C5
  Y: "f2 ~ [f2,c3,f4] f4 ~@2 [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] f4 [f2,c3] ~ [f2,c3,f4] f4", // F5
  Z: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~@3", // D5
  AA: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  AB: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  AC: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // C5 D5
  AD: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  AE: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~", // E5
  AF: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ b2 ~ [e2,b2] ~ [e2,b2] ~", // E5
  AG: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ d3 ~", // D5
  AH: "[d3,a3] ~ d3 ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ d3 ~ [d3,a3] ~ [d3,a3] ~", // D5
})).s("gm_electric_guitar_muted").gain(0.48).pan(0.8)

// chords · electric guitar muted · "Stacc.Gtr" · soft notes
const electric_guitar_muted_2 = note(`<
  ~ A B C D E F G H I@2 J K L M N ~@2 O ~@3 O ~@2 P ~ Q ~@5 R P ~@8 S ~ T ~@8 U ~@7 P ~@30 V ~ W X ~@10
>`.pickRestart({
  A: "~@2 [f2,c3] ~ c3 ~@3 [f2,c3] ~ [f2,c3] ~@3 c3 ~", B: "~@2 [f2,c3] ~ [f2,c3] ~@5 [f2,c3] ~@3 f2 ~",
  C: "~@2 f2 ~ [f2,c3] ~@5 [f2,c3] ~ c3 ~ c3 ~", D: "~@2 c3 ~ c3 ~@3 f2 ~ c3 ~@3 c3 ~",
  E: "~@4 [f2,c3] ~@5 [f2,c3] ~@3 c3 ~", F: "~@2 c3 ~ c3 ~@5 [f2,c3] ~@5", G: "~@2 c3 ~@5 c3 ~ c3 ~@3 c3 ~",
  H: "~@2 f2 ~@7 c3 ~@3 c3 ~", I: "~@2 c3 ~ c3 ~@3 c3 ~ c3 ~@5", J: "~@2 c3 ~ c3 ~@3 [f2,c3] ~ [f2,c3] ~ c3 ~@3",
  K: "~@10 [f2,c3] ~@5", L: "~@2 [d2,a2] ~ [d2,a2] ~@3 d2 ~ [d2,a2] ~@3 d2 ~", M: "~@2 [d2,a2] ~@5 d2 ~ d2 ~@5",
  N: "~@2 f3 ~@5 [bb2,f3] ~@7", O: "~@7 f4 ~@8", P: "~@2 d2 ~@13", Q: "f3 ~@15", R: "~@14 d2 ~",
  S: "~@2 g3 ~@3 g3 ~@3 g3 ~@3 g3 ~", T: "c3 ~@3 [f2,c3] ~@11", U: "~@14 [d2,a2] ~", V: "~@10 e2 ~@5", W: "~@14 a3 ~",
  X: "~@2 a3 ~@7 a3 ~@5",
})).s("gm_electric_guitar_muted").gain(0.32).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@15 B C D@6 E C@3 F G@3 H G@3 H G@3 H G@3 H C D@6 E C@3 F G@3 H G@3 H G@3 H G@3 H C D@6 E G@3 H G@3 I G@3 H G@3 J
  G@3 H G@3 K ~@2
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~ x!2 ~@4", C: "x ~@3 x!2 ~@2", D: "x!2", E: "x ~@3 x!2 ~ x", F: "x!3 ~@5",
  G: "x ~@2 x!2 ~@3", H: "x ~@2 x!3 ~@2", I: "~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2", J: "~ x ~ x!3 ~@2",
  K: "~@2 x ~@3 x ~@2 x ~@6",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@16 A B@11 C B@27 C B@15 D B@7 E B@3 F B@3 G B@7 H B@7 I ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x!3 ~@3 x ~", D: "x!4", E: "~@4 x ~@5 x!6", F: "~@4 x ~@7 x ~ x!2",
  G: "x!2 ~@2 x ~ x!2 ~ x!2 ~ x ~ x!2", H: "x ~@3 x ~@3 x ~@3 x!2 ~@2", I: "x ~@3 x!2 ~@2 x ~ x ~@5",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<A B@3 C B@3 D B@3 D B@60 E@32 ~@2>".pickRestart({
  A: "x!4", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2", D: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", E: "x!16",
})).gain(0.3)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@7 B ~@7 C ~@11 A ~@7 B ~@39 D ~@2>".pickRestart({
  A: "~@8 x!2 ~@6", B: "~@4 x!2 ~@2", C: "~@3 x!2 ~@3", D: "~@11 x!2 ~@3",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@11 A ~@2 A ~@8 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@5
>`.pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@43 [~@10 x!3 ~@3] ~@63>").gain(0.4)

// drums · ride
// … 9 more lines

More by Tina Turner