Strudelify
We Don't Need Another Hero (Thunderdome) cover art

1985 · Tina!

We Don't Need Another Hero (Thunderdome)

Tina Turner

KeyB majorTempo115 bpm
0:00/0:00
// We Don't Need Another Hero (Thunderdome) — Tina Turner
// 115 bpm, 4/4, key B major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "Strings" named as a string part, played on string ensemble 1 (its synth choir patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// 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(115/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.

// other · blown bottle · "Flute"
const blown_bottle = note("<A@4 ~@86>".pickRestart({
  A: "[~@6 g4!2 g4@2 a#4@2 d5@2 c5@6 ~@2 g4!2 g4@2 a#4@2 d5@2 c5@6 ~@4 g4@2 a#4@2 d5@2 c5@6 a4@12]/4",
})).s("gm_blown_bottle").gain(0.3)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@4 A B A B C B D E F B G B H B D E C I@4 J K L K L M L N O P B A B H B D E G Q F B C B D E C I@4 D E K L K L M L R S
  B T D U C U C K L K L M L N O K L K L M L V@3 W
>`.pickRestart({
  A: "a#1@15 a#1", B: "f2@15 f2", C: "d#2@15 d#2", D: "c2@15 c2", E: "c2", F: "g2@15 ~", G: "g2@15 g2", H: "d#2@15 ~",
  I: "[f2@8 c2@15 ~ c2@16 d#2@15 ~ f2@8]/4", J: "c2@15 ~", K: "f2@5 ~ f2@2 d#2@4 f2@4", L: "d#2@5 ~ f2@7 ~ f2@2",
  M: "d2@5 ~ d2@2 a#1@5 ~ a#1@2", N: "c2@6 c2@9 ~", O: "c2@3 c2@5", P: "a#1@15 ~", Q: "f2@15 ~",
  R: "c2@5 ~ c2@2 a#1@5 ~ a#1@2", S: "g#2@15 ~", T: "g#2@15 g#2", U: "c#2@15 c#2", V: "c2@5 ~ c2@10", W: "c2@9 ~@7",
})).s("gm_fretless_bass").gain(0.55).pan(0.8)

// chords · epiano1 · "Piano"
const epiano1 = note(`<
  ~@4 A B C D E D F@2 G B H B I J K@2 L M@4 N O P Q R S T U@2 V B W X Y Z F@2 AA B H J L AB AC@2 AD AE@4 AF@2 AG T AH R
  AI AJ AK AL D AL AM AN L AO Y AP AQ AP AJ AR P AS@2 AT AU AG AQ AV AJ AW AX AY AZ
>`.pickRestart({
  A: "f3@5 ~@2 a#4, d4, a#4@7 ~, ~@5 f3@3, ~@3 f4", B: "[a3,c4,a4]", C: "[f3,a#3,f4]",
  D: "c4@3 [c4,f4]@2 c4@2 c4, f5, a4@4 ~ f4@3, ~@3 a3@5", E: "a#3@3 [a#3,d#4]@2 a#3@2 a#3, d#5, g4@4 ~ d#4@3, ~@3 g3@5",
  F: "[~@6 g4 ~@7 c4@2, c4@4 c4@3 ~, g4@6 ~ g4@9, ~@5 e5@11, ~@13 g3@3]/2",
  G: "a#3@3 [a#3,d4]@2 a#3@2 a#3, d5, f4@4 ~ d4@3, ~@3 g3@5", H: "a#3@5 ~@2 d5, f4, d5@7 ~, ~@5 a#3@3, ~@3 g4",
  I: "~@3 a#4@5, [d#2,g3], ~ d#4@7, ~ g4@3", J: "c4@3 [c4,f5]@5, a4",
  K: "[~@14 g4@2 g4@5 ~@5 e5@6, c3, g4@14 ~@7 g4@11, c4@3 c4 c4@4, ~@5 g3@11]/2", L: "a#3@3 [a#3,d#5]@5, g4",
  M: "[a3@2 ~ f4 ~@14 a#3@2 a#3@3 [a#3,d#4]@2 a#3@2 a#3 a3@2 ~ f4, [f2,a4,c5]@4 ~ a#3@13 ~@12 a3@2, f4@3 ~@2 c4@15 g4@4 ~ d#4@3 f4@3 ~, ~@2 a3@2 g3@13 g3@3 ~@3 g3@5 [f2,a4,c5]@4, ~@3 d#4@7 d#5@4 ~@2]/4", // D#5 F
  N: "~ g4, [g3,a#3,d#4]", O: "a3@2 ~ f4 ~ d#4 [a3,f4]@2, [f2,a4,c5] ~, f4@3 ~@5, ~ a3 g3 ~",
  P: "[g3,a#3,d#4,g4]@3 [a3,c4,f4,a4]@5", Q: "[a3,c4,f4,a4]@4 ~ d#4 ~ f4, ~@2 g3 a3",
  R: "[g3,a#3,d#4,g4]@3 ~@3 c5@2, ~@3 [a3,f4,a4]@5", S: "[a3,d4,f4,a4]@2 ~ a#4, ~ [f3,d4,f4]",
  T: "[g3,a#3,d#4,g4]@3 a3@3 ~ f4, ~@3 [f2,a4,c5]@5, ~@3 f4@4 ~, ~@3 a3", // D# F
  U: "[~@6 g4 ~@7 c4@2, c4@4 c4@3 ~, g4@6 ~ g4@9, ~@5 d#5@11, ~@13 g3@3]/2",
  V: "a#3@3 [a#3,d4]@2 a#3@2 a#3, d5, f4@4 ~ d4@3, ~@3 f3@5", W: "a#3@3 [a#3,d5]@5, f4",
  X: "a3@5 ~@2 c5, f4, c5@7 ~, ~@5 a3@3, ~@3 a4", Y: "[g3,a#3,g4]", Z: "~@3 [c4,f4], [a3,a4], [c4,f4]@3 ~, ~@5 f2@3",
  AA: "~@3 d5@5, [g2,a#3], ~ f4@7, ~ g4@3", AB: "~@3 c5@5, [f2,a3], ~ f4@7, ~ a4@3",
  AC: "[~@7 c4, g3@13 g3@3, ~ e4@15, ~ c4@13 ~@2, ~ g4@7]/2", AD: "g3@5 ~@2 a#4, d#4, a#4@7 ~, ~@5 g3@3, ~@3 g4",
  AE: "[a3@2 ~ f4 ~@13 c5@3 a#3@3 [a#3,d#5]@5 [a3,c4,f4,a4]@4, [f2,a4,c5] c3@4 ~@3, f4@6 ~@2 g4@14 d#4@7 d#4@11 g4@16 ~@8, ~ a3 d#4@3 a#3 [a#3,g4]@4 ~@6, ~@4 a#3@5 g3@11 ~@12]/4", // D#5 F D#
  AF: "[~@13 c5@3, c3, g4@14 d#4@7 d#4@11, d#4@3 a#3 [a#3,g4]@4, a#3@5 g3@11]/2", // D#
  AG: "~@2 c5@2 [g3,d#4]@2 ~ f4, [a3,f4,a4]@2 ~ a3", AH: "~@2 c5@2 ~ d#4 ~ f4, [a3,f4,a4]@2 g3 a3",
  AI: "a3@2 ~ f4 f3@2 ~ d4, [d3,a4,d5] [a#2,f4,a#4], f4@3 ~ d4@3 ~, ~ a3 ~ f3", // D5 A#5
  AJ: "~@2 a#4 a3@3 ~ f4, [g3,d#4,g4]@3 [f2,a4,c5]@5, ~@3 f4@4 ~, ~@3 a3", AK: "~ c5 [f3,a#3,d4,f4]@2, [g3,d#4,g4] ~",
  AL: "~@3 [d#4,g#4], [c4,c5], [d#4,g#4]@3 ~, ~@5 g#2@3", AM: "g3@5 ~@2 c5, d#4, c5@7 ~, ~@5 g3@3, ~@3 g4",
  AN: "~@3 c#5@5, [c#3,g#3], ~ f4@7, ~ g#4@3", AO: "g#3@5 ~@2 c#5, f4, c#5@7 ~, ~@5 g#3@3, ~@3 g#4",
  AP: "~@2 c5@2 ~ d#4 [a3,f4]@2, [a3,f4,a4]@2 g3 ~", AQ: "g3@2 g3 [a3,c4,f4,a4]@5, [d#2,d#4,g4,a#4]@3 ~@5",
  AR: "a3@2 ~ f4 ~@2 a#4@2, [d3,a4,d5] [f3,d4,f4], f4@3 ~@5, ~ a3 ~@2", // D5 Dm
  AS: "[~@14 g4@2 g4@5 ~@5 d#5@6, c3, g4@14 ~@7 g4@11, c4@3 c4 c4@4, ~@5 g3@11]/2",
  AT: "a3@2 ~ f4 [g3,d#4]@2 ~ f4, [f2,a4,c5] ~, f4@3 ~@5, ~ a3 ~ a3", // Cm F
  AU: "~@2 a#4 ~@3 c5@2, [g3,d#4,g4]@3 [a3,f4,a4]@5", AV: "[a3,d4,f4,a4] [f3,a#3,d4,f4]", AW: "c4@3 [c4,d#5]@5, g4",
  AX: "c4@3 [c4,d#4]@2 c4@2 c4, d#5, g4@4 ~ d#4@3, ~@3 g3@5", AY: "c4@5 ~ g4@2, g3, g4@3 ~, ~@5 c4@3",
  AZ: "[g3,c4,g4]@5 ~@3", // C5
})).s("gm_epiano1").gain(0.16)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@4 A B A B C B D@2 E B E B F B D@2 C G@4 H I J I J K J L@2 A B M B F B D@2 E B E B F B D@2 C N@4 O@2 P J P J Q J R S
  B S T U C U C I J I V Q J L@2 I J I J K J T@2 W X
>`.pickRestart({
  A: "[a#3,d4,f4]", B: "[a3,c4,f4]", C: "[g3,a#3,d#4]", D: "[g3,c4,e4]/2", E: "[a#3,d4,f4,g4]", F: "[a#3,d#4,g4]",
  G: "[[a3,c4,f4] [a#3,c4,d#4,g4]@4 [a#3,d#4,g4]@2 [a3,c4,f4]]/4", H: "[a#3,c4,d#4,g4]",
  I: "[a3,c4,f4]@2 [g3,a#3,d#4] [a3,c4,f4]", J: "[g3,a#3,d#4]@3 [a3,c4,f4]@5", K: "[a3,d4,f4] [a#3,d4,f4]",
  L: "[g3,c4,d#4]/2", M: "[f3,a#3,d4]", N: "[[a3,c4,f4] [a#3,c4,d#4,g4]@4 [g3,a#3,d#4]@2 [a3,c4,f4]]/4",
  O: "[a#3,c4,d#4,g4]/2", P: "[a3,c4,f4]@2 [a#3,d#4,g4] [a3,c4,f4]", Q: "[a3,d4,f4] [f3,a#3,d4]",
  R: "[g3,c4,d#4] [a#3,d4,f4]", S: "[g#3,c4,d#4]", T: "[g3,c4,d#4]", U: "[g#3,c#4,f4]",
  V: "[a#3,d#4,g4]@3 [a3,c4,f4]@5", W: "[g3,c4,d#4,g4]@15 ~", X: "[g3,c4,d#4,g4]@9 ~@7",
})).s("gm_string_ensemble_1").gain(0.16)

// other · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~@26 A B C D E F G H ~@23 I D J B K F L ~@8 M N O N P Q G H R S T N U F V G ~@2
>`.pickRestart({
  A: "f3!2 ~@2 f3!2 f2 f3 d#3!4 f3!2 ~@2", B: "d#3!2 ~@2 d#3 ~ f3@2 ~ f3 ~ f2 f3!2 f2 f3",
  C: "f3!2 ~ f2 f3!2 f2 f3 d#3!2 ~ d#2 f3!2 ~ f2", D: "d#3!5 ~ f3@2 ~ f3 ~ f2 f3!2 f2 f3",
  E: "f3!2 ~@2 f3!2 c3 f3 d3!2 ~@2 d3!2 a#2 d3", F: "d#3!5 ~ f3@2 ~ f3 ~@2 f3!2 f2 f3",
  G: "d#3!6 a#2 d#3 ~ d#3 ~ a#2 d#3!2 ~@2", H: "d#3!2 ~ d#3!2 ~ a#2 d#3 ~ d#3 ~ a#2 d#3!2 a#2 ~",
  I: "f3!2 ~ f2 f3!2 f2 f3 d#3!4 f3!2 ~@2", J: "f3!2 ~@2 f3!2 f2 f3 d#3!2 ~ d#2 f3!2 ~@2",
  K: "f3!6 c3 f3 d3!2 ~@2 d3!2 a#2 d3", L: "d#3!2 ~@2 d#3!2 a#2 d#3 d3!6 a#2 d3",
  M: "f3!2 ~ f2 f3!2 f2 f3 d#3!2 ~ d#2 f3!4", N: "d#3!2 ~ d#2 d#3 ~ f3@2 ~ f3 ~@2 f3!2 f2 f3",
  O: "f3!6 f2 f3 d#3!4 f3!2 ~@2", P: "f3!2 ~@2 f3!2 c3 f3 d3!2 ~ a#2 d3!2 a#2 d3",
  Q: "d#3!2 ~@2 d#3 ~ f3@2 ~ f3 ~@2 f3!2 f2 f3", R: "f3!6 f2 f3 d#3!2 ~ d#2 f3!2 ~ f2",
  S: "d#3!2 ~@2 d#3 ~ f3@2 ~ f3!5 f2 f3", T: "f3!6 f2 f3 d#3!4 f3!4", U: "f3!2 ~@2 f3!2 c3 f3 d3!6 a#2 d3",
  V: "d#3!2 ~ a#2 d#3!2 a#2 d#3 ~ d#3 ~ a#2 d#3 ~ a#2 ~",
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.4)

// other · electric guitar muted · "Guitar" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@26 A B C D E F G ~@24 H D I B J F K ~@8 L M N M O P G ~ Q R ~ M S F T G ~@2
>`.pickRestart({
  A: "~@2 f2!2 ~@10 f2!2", B: "~@2 d#2!2 ~@6 f3 ~@5", C: "~@2 f3 ~@7 d#3 ~@3 f3 ~", D: "~@10 f3 ~@5",
  E: "~@2 c3!2 ~@6 a#2!2 ~@4", F: "~@10 f2!2 ~@4", G: "~@8 d#3 ~@5 a#2!2", H: "~@2 f3 ~@11 f2!2",
  I: "~@2 f2!2 ~@6 d#3 ~@3 f2!2", J: "~@10 a#2!2 ~@4", K: "~@2 a#2!2 ~@12", L: "~@2 f3 ~@7 d#3 ~@5",
  M: "~@2 d#3 ~@7 f2!2 ~@4", N: "~@14 f2!2", O: "~@2 c3!2 ~@6 d3 ~@5", P: "~@2 d#2!2 ~@6 f2!2 ~@4",
  Q: "~@10 d#3 ~@3 f3 ~", R: "~@2 d#2!2 ~@12", S: "~@2 c3!2 ~@12", T: "~@2 d#3 ~@7 d#3 ~@2 d#3 ~ a#2",
})).s("gm_electric_guitar_muted").gain(0.19).pan(0.4)

// other · overdriven guitar · "Overdrive Guitar"
const overdriven_guitar = note("<~@10 A B ~@6 A B ~@2 C ~@2 B ~@14 A B ~@6 A B ~@2 C ~@2 B ~@34>".pickRestart({
  A: "g4@3 ~ f4@2 d4@2 g4@2 g4@2 f4@2 d4@2", B: "g4@3 ~ f4@2 d4@2 g4@3 ~@5", C: "c5@3 ~ a#4@2 g4@2 c5@3 ~@5",
})).s("gm_overdriven_guitar").gain(0.25).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A@11 B A@7 B A@2 C A@3 D E D E D E B E A@22 B D E D E D E@2 A@8 D E D E D E B E D E D E D E B E A F
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@3 x ~@2 x", D: "~@2 x!4 ~@2", E: "x ~@2 x!2 ~@2 x", F: "x",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct("<~@25 A ~@15 A ~@7 A ~@3 B ~@13 A ~@3 A ~@11 C ~@6>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@3 x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!89 x>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 A ~@15 B ~@7 C ~@3 D ~@13 C ~@3 A ~@11 C ~@6>".pickRestart({
  A: "~@13 x ~@2", B: "~@13 x ~ x", C: "~@15 x", D: "~@5 x ~@10",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@33 [~@15 x] ~@26 [~@15 x] ~@18 [~@15 x] ~@10>").gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@15 A ~@7 A ~@3 B ~@13 A ~@3 A ~@11 C ~@6>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~@7 x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@26 A ~@3 A ~@26 A ~@3 A ~@10 A ~@3 A ~@3 A ~@3 A ~@5>".pickRestart({
  A: "x",
})).gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@89 x>").gain(0.36)

// drums · congas
const congas = s("conga:13").struct("<[~ x ~ x]!89 ~>").gain(1.73)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@7 A ~@9 B ~ C D E ~@5 F ~ G ~ F ~@3 E ~@4 E ~@2 E ~@8 B ~@3 H ~ G ~ G ~ G ~@2 E ~@2 E ~@3 E G ~ I E F ~ B ~ F D G ~
  G ~@4
>`.pickRestart({
  A: "~@7 x ~@7 x", B: "~@7 x ~@8", C: "~@11 x ~@4", D: "~@11 x ~@3 x", E: "~@15 x", F: "~@6 x ~@8 x", G: "~@3 x ~@4",
  H: "~@3 x ~@12", I: "~@6 x ~@4 x ~@4",
})).gain(2.13)

// drums · shaker
const shaker = s("sh").struct(`<
  A@7 B A@9 C A D E F A@5 F A@3 F A@3 F A@4 F A@2 F A@8 C A@3 G A@8 F A@2 F A@3 F A@2 D F@2 A C A F E A@6 ~
>`.pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", C: "x ~ x!3 ~ x ~ x ~ x!3 ~ x!2",
  D: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", E: "x ~ x!3 ~ x!3 ~ x ~ x ~ x ~", F: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~",
  G: "x ~ x ~ x ~ x!3 ~ x!3 ~ x!2",
})).gain(0.36)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<[~ x ~@3 x ~@3 x ~@3 x ~@2]!89 ~>").gain(0.12)

stack(
  blown_bottle, bass, epiano1, string_ensemble_1, electric_guitar_muted, electric_guitar_muted_2, overdriven_guitar,
  kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, congas, cabasa, shaker, shaker_soft
)

More by Tina Turner