Strudelify

Whatever You Want

Tina Turner

KeyF♯ minorTempo105 bpm
0:00/0:00
// Whatever You Want — TURNER TINA
// 105 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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
const bass = note(`<
  ~ A B A B A B C D C D C D C D C D C D C D C D E F E G H@2 I@8 J@2 K@2 L M L M H@2 N@12 E F E G H@2 I@8 J@2 K@2 L M L M
  H@4 O P O P O Q R S@2 I@8 A B A B A B A B A B A B A B
>`.pickRestart({
  A: "[f#1,f#2] ~@13 [f#1,f#2] ~", B: "[f#1,f#2] ~@15", C: "b1@6 ~@8 [b1,b2] ~, b2 ~@15", D: "[b1,b2] ~@15",
  E: "d1 ~@2 e1 ~@4", F: "e1 ~@2 f#1 ~@4", G: "b0", H: "f#1!16",
  I: "[f#1,f#2]!2 ~ [f#1,f#2] ~@2 [f#1,f#2]!2 ~ [f#1,f#2]!3 [a1,a2]!2 [e1,e2]!2", // F# A E
  J: "[e1,e2]!2 ~ [e1,e2] ~@2 [e1,e2]!2 ~ [e1,e2]!7", K: "[d1,d2]!2 ~ [d1,d2] ~@2 [d1,d2]!2 ~ [d1,d2]!7",
  L: "[g1,g2]!2 ~ [g1,g2] ~@2 [g1,g2]!2 ~ [g1,g2]!7", M: "[f#1,f#2]!2 ~ [f#1,f#2] ~@2 [f#1,f#2]!2 ~ [f#1,f#2]!7",
  N: "[f#1,f#2] ~ f#2 [f#1,f#2]!2 ~@5 [f#1,f#2]@2 [a1,a2]@2 [e1,e2]@2", // F# A E
  O: "[d1,d2]!2 ~ [d1,d2] ~@2 [e1,e2]!2 ~ [e1,e2]!7", P: "[e1,e2]!2 ~ [e1,e2] ~@2 [f#1,f#2]!2 ~ [f#1,f#2]!7",
  Q: "[b0,b1]!2 ~ [b0,b1] ~@2 [b0,b1]!2 ~ [b0,b1]!7", R: "[f#1,f#2]", S: "[f#1,f#2]/2",
})).s("gm_electric_bass_finger").gain(0.31)

// bass · electric bass finger · soft notes
const bass_soft = note(`<
  ~@29 A@8 B@2 C@2 D A D A ~@2 E@12 ~@6 A@8 B@2 C@2 D A D A ~@4 C B C B C F ~@3 A@8 ~@14
>`.pickRestart({
  A: "~@5 [f#1,f#2] ~@10", B: "~@5 [e1,e2] ~@10", C: "~@5 [d1,d2] ~@10", D: "~@5 [g1,g2] ~@10", E: "~@2 f#1 ~@13",
  F: "~@5 [b0,b1] ~@10", // B
})).s("gm_electric_bass_finger").gain(0.18)

// chords · lead 5 charang
const lead_5_charang = note(`<
  ~@5 A@2 ~@20 B@2 C@2 D@2 C@2 D@2 ~@4 E F G@2 H@2 ~@4 I@2 J K ~@8 B@2 C@2 D@2 C@2 D@2 ~@4 E F G@2 H@4 ~@6 L@2 M N O P Q
  N O P Q ~@14
>`.pickRestart({
  A: "[f#2,c#3]/2", B: "[f#2,c#3]!2 ~@4 [f#2,c#3] ~@3 [f#2,c#3] ~@3 [e2,b2]@2", C: "e4 d#4 c#4 b3@4 ~",
  D: "c#4 ~ a3 f#3@5", E: "[g3,b3]@15 ~", F: "[f#3,a3]@15 ~", G: "[f#3,a#3]/2",
  H: "[f#2,c#3]!2 ~@4 [f#2,c#3] ~@3 [f#2,c#3]@2 [a2,e3]@2 [a2,e3] ~", I: "b5/2", J: "a5@9 ~@7", K: "~@12 [f#5,a5]@3 ~",
  L: "[c#5@31 ~]/2", M: "c#5", N: "f#2@2 ~@4 [f#2,c#3] ~@5 c#3 ~ [e2,b2]@2, c#3 ~@15",
  O: "[f#2,c#3] ~ [f#2,c#3] ~@3 [f#2,c#3] ~@5 [f#2,c#3] ~ [e2,b2]@2", // F#5 E5
  P: "[f#2,c#3] ~@3 f#2 ~ [f#2,c#3] ~@5 [f#2,c#3] ~ [e2,b2]@2", // F#5 E5
  Q: "f#2@2 [f#2,c#3] ~@3 [f#2,c#3] ~@5 [f#2,c#3] ~ [e2,b2]@2, c#3 ~@15", // F#5 E5
})).s("gm_lead_5_charang").gain(0.31).pan(0.4)

// chords · lead 5 charang · soft notes
const lead_5_charang_soft = note("<~@29 A@2 B@2 A@2 B@2 ~@16 C D ~@10 A@2 B@2 A@2 B@2 ~@43>".pickRestart({
  A: "[~@5 e4 d#4 b3@4 ~@2 e4 d#4 b3]/2", B: "~ b3 ~@6", C: "~@10 [f#5,a5] [e5,g#5] [c#5,f#5] ~ [c#5,f#5] [e5,g#5]",
  D: "[f#5,a5]@6 [f#5,a5] [e5,g#5] [c#5,f#5] ~ [c#5,f#5] [e5,g#5] ~@4", // F#m E F#5 E
})).s("gm_lead_5_charang").gain(0.18).pan(0.4)

// bass · synth bass 1
const bass_2 = note("<~@5 A@2 ~@22 B@8 C@2 D E F G@3 ~@20 B@8 C@2 D E F G@3 ~@13 B@8 ~@14>".pickRestart({
  A: "[f#1,f#2]/2", B: "f#2@15 ~", C: "e2@7 ~", D: "d2@7 ~", E: "d2@15 ~", F: "g2@7 ~", G: "f#2@7 ~",
})).s("gm_synth_bass_1").gain(0.24).pan(0)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@7 A@16 B C D E F@2 A@8 G@2 H@2 I J K@2 ~@2 A@12 B C D E F@2 A@8 G@2 H@2 I J K@2 ~@4 B C B C L E M@3 A@20 N@2
>`.pickRestart({
  A: "[[b3,d#4] [a3,c#4], f#3]/4", B: "[a3,d4,f#4]@3 [b3,e4,g#4]@3 ~@2", C: "[b3,e4,g#4]@3 [c#4,f#4,a#4]@3 ~@2",
  D: "[a3,d4,f#4]@6 [b3,e4,g#4]@7 ~@3", E: "[b3,e4,f#4]", F: "[f#3,a#3,c#4]/2", G: "[[g#3,b3,e4]@31 ~]/2",
  H: "[a3,d4,f#4]/2", I: "[g3,b3,d4]@15 ~", J: "[a3,c#4,f#4]@15 ~", K: "[a#3,c#4,f#4]/2",
  L: "[a3,d4,f#4]@3 [b3,e4,g#4]@5", M: "[~@2 f#4, [f#3,a#3,c#4]]/3", N: "[[f#3,b3,d#4]@29 ~@3]/2",
})).s("gm_synth_strings_1").gain(0.14).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@17 A@4 ~ B C D C E F@2 ~@8 G@2 H@2 I J K@2 ~@8 A@4 ~ B C D C E F@2 ~@8 G@2 H@2 I J K@2 ~@4 C D C D C L M@3 N@2 O@2
  N@2 O@2 P I Q@2 P I Q@2 P I Q@2 P R
>`.pickRestart({
  A: "[~@20 g#3@4 f#3@4 e3@4 d#3@31 ~, a3]/4", B: "[f#2,f#4] [g#2,g#4] [a2,a4] [c#2,c#5]",
  C: "[d2,f#4,a4]@3 [e2,g#4,b4]@3 ~@2", D: "[e2,g#4,b4]@3 [f#2,a#4,c#5]@3 ~@2", E: "[b1,e4,f#4]", F: "f#2/2", G: "b3/2",
  H: "a3/2", I: "b4", J: "a4", K: "[a#4@31 ~]/2", L: "[b1,e4,f#4,f#6]", M: "f#2/3",
  N: "[f#6@7 e6 d#6@8, [f#5,b5]@31 ~]/2", O: "[f#5,a5,c#6]/2", P: "c#5", Q: "f#4/2", R: "b4@7 ~",
})).s("gm_string_ensemble_1").gain(0.15)

// other · harpsichord
const harpsichord = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B ~@24 C D C D C D C D C D C D ~@43 C D C D C D C D C D C D C E
>`.pickRestart({
  A: "c#5 ~ a4!2 c#5@2 b4 ~@9", B: "c#5@2 a4!2 c#5 ~ f#5 ~@9",
  C: "f#4@2 a4!2 [b3,c#5]@2 c#4@2 ~@4 f#3@2 b3@2, c#5 ~ c#4@2 ~@2 b4 ~@9", // Bsus2
  D: "[c#4,c#5]@2 a4!2 c#4@2 b3@2 ~@4 b3@2 c#4@2, ~@2 f#4@2 c#5 ~ f#5 ~@9", // C#
  E: "[c#4,c#5]@2 a4!2 c#4@2 b3@2 ~@8, ~@2 f#4@2 c#5 ~ f#5 ~@9", // C#
})).s("gm_harpsichord").gain(0.07).pan(0.4)

// other · harpsichord · soft notes
const harpsichord_soft = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B ~@24 A B A B A B A B A B A B ~@43 A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "~@8 c#5@2 b4 ~@5", B: "~@8 c#5 ~ f#5 ~@5",
})).s("gm_harpsichord").gain(0.04).pan(0.4)

// other · brass section
const brass_section = note("<~@89 A B C@2 ~ D@8 ~@14>".pickRestart({
  A: "[d4,d5]@4 ~@2 [e4,e5]@7 ~ [f#4,f#5] ~", B: "[a4,a5] [f#4,f#5] [a4,a5]@6", C: "[f#4,f#5]/2", D: "[f#4@31 ~]/2",
})).s("gm_brass_section").gain(0.29)

// other · piano
const piano = note(`<
  ~ A@16 B@8 C@2 D E F@8 G@2 H@2 I J ~@4 A@8 K@8 D E F@8 G@2 H@2 I J ~@6 L@6 ~@3 F@8 A@8 M@6
>`.pickRestart({
  A: "[~ f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5]/8",
  B: "[~ f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a#4 b4 c#5]/8",
  C: "[~ f#4 c#5 f#5 c#5 ~@4 f#4 c#5 f#5 c#5 b4 c#5 f#5, ~@5 b4@6 ~@5]/2",
  D: "[f#4,c#5]@2 ~@4 [f#4,c#5,f#5] ~@3 [f#4,c#5,f#5] ~@3 [f#4,c#5,f#5]@2, f#5 ~@15", // F#5
  E: "f#6 [c#6,f#6] c#6 [c#6,f#6] f#6 [c#6,f#6]!2 c#6 [c#6,f#6]!2 f#6 [c#6,f#6]!3 c#6 f#6", // F#5
  F: "[~ f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4@2 f#4 a4 b4 c#5 a4 b4 f#4]/8",
  G: "~ e4 b4 e4 ~ e4 b4 e4", H: "~ a4 e5 a4", I: "~ g4 d5 g4", J: "~ b4 c#5 b4",
  K: "[~ f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a#4 b4 c#5@2 f#4 c#5 f#5 c#5 ~@4 f#4 c#5 f#5 c#5 b4 c#5 f#5, ~@53 b4@6 ~@5]/8",
  L: "[~ f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a#4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a#4 b4 c#5@2 f#4 c#5 f#5 c#5 ~@4 f#4 c#5 f#5 c#5 b4 c#5 f#5, ~@37 b4@6 ~@5]/6",
  M: "[~ f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 b4 c#5@2 f#4 c#5 f#5 c#5 b4@6 f#4 c#5 a4 ~@2]/6",
})).s("gm_piano").gain(0.17).pan(0.9)

// other · synth drum
const synth_drum = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B ~@20 A B A B A B A B A B A B A B A B ~@22 A B A B A B ~@11 A B A
  B A B A B A B A B A B
>`.pickRestart({
  A: "a0 ~@13 a0 ~", B: "a0 ~@15",
})).s("gm_synth_drum").gain(0.35)

// other · music box
const music_box = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B D B E ~@20 B C B C B C B C B C B C B D B E ~@22 B D B D B E ~@11 B C B
  C B C B C B C B C B F
>`.pickRestart({
  A: "~@8 f#4@2 a4 ~ c#5@2 f#5 ~", B: "~@2 f#4@2 a4@2 c#5 ~@3 a4 ~ c#5 ~ b4 ~", C: "~@2 c#5 ~@5 f#4@2 a4 ~ c#5@2 f#5 ~",
  D: "~@2 c#5 ~@5 f#4@2 a#4 ~ c#5@2 f#5 ~", E: "~@2 c#5 ~@5 f#4@2 b4 ~ c#5@2 f#5 ~", F: "~@2 c#5 ~@5 f#4@2 a4 ~@5",
})).s("gm_music_box").gain(0.22).pan(0.4)

// chords · pizzicato strings
const pizzicato_strings = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B ~@24 A B A B A B A B A B A B ~@43 A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@2 [c#4,f#4] ~ [a4,c#5] ~ [c#5,f#5] ~@9", B: "~@2 [c#4,f#4] ~ [f#4,a4] ~ [c#4,f#4] ~@9",
})).s("gm_pizzicato_strings").gain(0.11).pan(0.2)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@29 A@2 B@2 A@2 B@2 ~@10 C@2 ~ D E@3 ~@4 F G H G I ~@2 A@2 B@2 A@2 B@2 ~@12 G H G H G I ~@3 A@2 B@2 A@2 B@2 J K L@2 J
  K L@2 J K L@2 J K
>`.pickRestart({
  A: "[e4 d#4 c#4 b3@4 ~ e4 d#4 c#4 b3@4 b3, ~@7 b3@4 ~@5]/2", B: "c#4 b3 a3 f#3@5", C: "[~@4 c#4@19 ~@9]/2",
  D: "~@5 f#3 c#4 f#4", E: "[c#4 e4@2 ~ c#4 f#4 c#4 e4@2 f#3 c#4 f#4 c#4 e4@7 ~@4]/3",
  F: "[f#3,a3] [g#3,b3] [a3,c#4] [c#4,e4]", G: "[d4,f#4]@3 [e4,g#4]@5", H: "[e4,g#4]@3 [f#4,a#4]@5", I: "[b3,e4]",
  J: "e4 d#4 c#4 b3@5", K: "e4 d#4 c#4 b3 e4 d#4 c#4 ~", L: "c#4 ~ a3 f#3@5",
})).s("gm_electric_guitar_clean").gain(0.23).pan(0.2)

// other · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@29 A@2 ~@2 A@2 ~@16 B ~@13 A@2 ~@2 A@2 ~@23 A@2 ~@2 A@2 ~@3 C D@2 ~ C D@2 ~ C D@2 ~@2
>`.pickRestart({
  A: "~@5 e4 d#4 ~", B: "~@3 f#3 ~@4", C: "~@7 b3", D: "~ b3 ~@6",
})).s("gm_electric_guitar_clean").gain(0.13).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@27 A B C@18 ~@16 A B C@26 D ~@2 C@8 D ~@13>".pickRestart({
  A: "x!4", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", C: "x ~ x!2 ~@2 x ~@2 x!2 ~@3 x!2", D: "x",
})).gain(0.35)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@28 A B@18 ~@18 B@26 ~@2 A B@8 ~@14>".pickRestart({
  A: "x", B: "~ x ~@3 x ~ x ~@3 x ~ x ~@2",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B@11 C B@6 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B@11 C B@14
  ~@3 B@8 ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@4 x!4 ~@3",
})).gain(0.31)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~@2]!26 ~@20 [~ x ~@2]!16 ~@39 [~ x ~@2]!14>").gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@27 A B ~@34 A B ~@28 C ~@22>".pickRestart({
  A: "~@12 x!4", B: "x ~@7 x ~@4 x!2 ~", C: "~@12 x!3 ~",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 A B ~@11 C ~@5 D ~@16 A B ~@11 C ~@7 D ~@5 D ~@2 E ~@7 D ~@14>".pickRestart({
  A: "~@4 x!8 ~@4", B: "~@2 x ~@2 x ~@2 x ~@2 x!2 ~@3", C: "~@13 x!3", D: "~@11 x ~@2 x ~", E: "~@3 x!2 ~@4 x!2 ~@5",
})).gain(0.39)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@46 A ~@37 A ~@5 A ~@2 B ~@7 A ~@14>".pickRestart({
  A: "~@13 x ~@2", B: "~ x ~@2 x ~@3",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@29 [~ x!7]!18 ~@18 [~ x!7]!26 ~@3 [~ x!7]!8 ~@14>").gain(0.18)

// drums · high tom
const high_tom = s("ht").struct("<~@27 A B ~@17 C ~@16 A B ~@19 C ~@5 C ~@10 C ~@14>".pickRestart({
// … 26 more lines

More by Tina Turner