Strudelify

Golden Eye

Tina Turner

KeyB minorTempo100 bpm
0:00/0:00
// Golden Eye — Tina Turner
// 100 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 88 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · "Fretl.bs"
const bass = note(`<
  ~@10 A B C B C B D E F B C B C B D E G H I J@2 H I K@2 L M N O L M N P Q A B C B C B D E F B C B C B D E G H I J@2 H I
  K@2 L M N O L M N P R C B C B C B C B C S
>`.pickRestart({
  A: "~@7 e1", B: "f#1@3 ~ f#1@2 ~@2 f#1@4 ~@16 e1@4", C: "f#1@4 e1@4 f#1@4 ~@4 f#1@3 ~ c#1@8 e1@4",
  D: "f#1@4 e1@4 f#1@4 ~@4 f#1@3 ~ c#1@8 f#1@4", E: "e1@3 ~ e1@2 ~@6 e1@14 ~@2 e1@4",
  F: "c#1@2 ~@2 c#1@3 ~@5 c#1@16 e1@4", G: "c#1@2 ~@2 c#1@3 ~@5 c#1@20", H: "e1@13 ~ e1@2", I: "d1@13 ~ d1@2",
  J: "[c#1@47 ~ c#1@16]/2", K: "c#1/2", L: "b0@7 b0", M: "c#1@7 c#1", N: "d1@7 d1", O: "e1@7 e1", P: "d1@28 e1@3 ~",
  Q: "f#1@3 ~ f#1@3 ~ f#1@6 ~@18", R: "f#1@3 ~ f#1@3 ~ f#1@6 ~@14 e1@4", S: "f#1@3 ~ f#1@2 ~@2 f#1@4 ~@20",
})).s("gm_fretless_bass").gain(0.34)

// other · string ensemble 2 · "Slow str"
const string_ensemble_2 = note(`<
  ~@26 A@3 B@3 C D E C D F G H@2 I J ~@17 K@3 L@2 M@4 N@2 O@3 P@4 Q@2 R S@2 T U V@2 W
>`.pickRestart({
  A: "[~@8 b4 g5 f#5 e5, ~@8 c#4 e4 g#4 b4 d#5 f#5 a#5 c#6 e6@32, ~@17 d#4@2 f#4@2 a4@2 c#5@2 e5@2 g#5@2 b5@2 d#6@2 ~@63]/3",
  B: "[b5@26 g5 f#5 d5@2 a5@18]/3", C: "b4", D: "c#5", E: "e5", F: "d5", G: "e5@16 f5@5 e5@5 ~ d5@5",
  H: "[b5@48 f6@5 e6@5 ~ d6@5]/2", I: "b5", J: "f6@5 e6@5 ~ d6@5 b6@16",
  K: "[~@16 b5@13 ~@3 f#6@4 g6@4 f#6@4 e6@4, ~@16 a3@2 c#4@2 e4@2 g#4@2 b4@2 d#5@2 f#5@2 a5@2 ~@27 c#6@2 d#6@2 f6@2 ~@31, ~@17 b3@2 d#4@2 f#4@2 a#4@2 c#5@2 e5@2 g#5@2 a#5@2 ~@25 c6@2 d6@2 e6@2 b4@32]/3",
  L: "b5/2",
  M: "[e6@13 ~@3 b6@4 g6@4 f#6@4 ~@4 c#5@16 e5@16, ~@13 f6 g6 a6 b4@16 ~@32, ~@27 f#6@2 g#6@2 a#6@2 ~@23 e6@72]/4",
  N: "[b4@32 ~@16 f6@5 e6@5 ~ d6@5, b5@3 ~, ~ c#5]/2",
  O: "[d5@32 e5@16 f5@5 e5@5 ~ d5@5 c#5@4 d5@4 c#5@4 d5@4 c#5@4 d5@4 c#5@4 d5@4, b5]/3",
  P: "[c#6@16 f6@5 e6@5 ~@22 f6@5 e6@5 ~ d6@21 ~@16 b6@4 ~@28, c#5@16 d5@24 g#4 b4 d5 f#5 a#5 c#6 e6 g#6 ~@16, ~@27 d6@21 ~@33 a#4@2 c#5@2 e5@2 g#5@2 b5@2 d6@2 f#6@2 a#6@2 ~@31]/4",
  Q: "[~@20 g#5@2 g5@2 f#5@4 c#6@9 f#6@5 ~ c#6@5 f#6@5 c#6@5 ~ a5@5]/2", R: "g#5@5 a5@5 ~ b5@5 g#5@5 f#5@5 ~ d5@5",
  S: "[c#5@59 a6@5]/2", T: "g#6@5 e6@5 ~ c#6@5 f#6@5 c#6@5 ~ a5@5", U: "g#5@5 a5@5 ~ b5@5 a5@5 f#5@5 ~ d5@5",
  V: "[c#5@10 g#5 g5 f#5@2 c#6@8 ~@2 c#6@5 ~ e6 ~]/2", W: "f#6@2 ~@2 f#6@2 ~@2 f#6@3 ~@21",
})).s("gm_string_ensemble_2").gain(0.25).pan(0.4)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A@4 B@4 C ~@9 A@4 D@2 E F G H I@2 J K I@2 L M H G L M H@2 ~@8 N O B@4 D@2 E F G H I@2 J K I@2 L M H G L M H P Q@8
  R@2 S
>`.pickRestart({
  A: "c#4/2", B: "f#3/2", C: "f#3", D: "[f#3@60 f#3@3 ~]/2", E: "e3@2 ~@2 e3@3 ~@5 e3@13 ~@3 e3@3 ~",
  F: "c#3@2 ~@2 c#3@3 ~@5 c#3@18 ~@2", G: "[e2,e3]", H: "[d2,d3]", I: "[c#2,c#3]/2", J: "~ g5 f#5 e5, [e2,e3]",
  K: "[d2,d3,d5]", L: "[b1,b2]", M: "[c#2,c#3]",
  N: "[b3,e4,b4] ~@3 [b3,e4,b4]@2 ~@6 [b3,e4,b4]@14 ~@2 [b3,e4,b4]@2 ~@2", // E5
  O: "[g#4,c#5]@2 ~@2 [g#4,c#5]@2 ~@6 [c#4,g#4,c#5]@19 ~, c#4 ~@3 c#4 ~@27", P: "[d2,d3]@13 ~ [e2,e3] ~",
  Q: "[[f#2,f#3] ~ [f#2,f#3] ~ [f#2,f#3] ~@9 [f#2,f#3]@16 [e2,e3] ~]/2", // F# E
  R: "[[f#2,f#3] ~ [f#2,f#3] ~ [f#2,f#3] ~@9 [f#2,f#3]@16 [e4,e5] ~]/2", S: "[f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~@11",
})).s("gm_string_ensemble_1").gain(0.25).pan(0.7)

// other · pizzicato strings · "Pizz.str"
const pizzicato_strings = note(`<
  A B A B A B A B A B A B A B A B C D E B A B A B C D F ~@15 A B A B A B A B C D E B A B A B C D F ~@15 A B A B A B A B
  A B A B
>`.pickRestart({
  A: "~@14 [e2,e3,e4] ~", B: "[f#2,f#3,f#4] ~ [f#2,f#3,f#4] ~ [f#2,f#3,f#4] ~@11", C: "~@14 [f#2,f#3,f#4] ~",
  D: "[e2,e3,e4] ~ [e2,e3,e4] ~@3 [e2,e3,e4] ~@7 [e2,e3,e4] ~", // E
  E: "[c#2,c#3,c#4] ~ [c#2,c#3,c#4] ~@3 [c#2,c#3,c#4] ~@7 [e2,e3,e4] ~", // C# E
  F: "[c#2,c#3,c#4] ~ [c#2,c#3,c#4] ~@3 [c#2,c#3,c#4] ~@9", // C#
})).s("gm_pizzicato_strings").gain(0.31)

// chords · tremolo strings · "Tremolo"
const tremolo_strings = note("<~ A@2 B@2 C@2 D@2 E@2 ~@8 F G F G H I ~@20 J@4 K@2 ~@2 L M N M L M ~@29>".pickRestart({
  A: "[a4@7 g#4@9]/2", B: "[a4@7 b4@9]/2", C: "[[a4,c#5]@7 [g#4,d5]@9]/2", D: "[[a4,d#5]@7 [g#4,d5]@9]/2",
  E: "[[a4,c#5]@9 ~@7]/2", F: "a4", G: "g#4", H: "[a4,c#5]", I: "[g#4,b4]", J: "[f#4,a4]/4", K: "[[f#4,a4]@31 ~]/2",
  L: "c#5", M: "d5", N: "d#5",
})).s("gm_tremolo_strings").gain(0.17).pan(0.7)

// other · brass section · "Brass 1"
const brass_section = note("<~@5 A@3 ~@11 B@6 C D ~@12 E F G@2 ~@10 B@6 C D ~@12 E F G@2 H@8 I@2 J>".pickRestart({
  A: "[~@24 [c4,c5,c6]@4 [b3,b4,b5]@37 ~@31]/3", // C B
  B: "[~@24 [c4,c5,c6]@4 [b3,b4,b5]@37 ~@23 [c4,c5,c6]@4 [b3,b4,b5]@37 ~@23 [c4,c5,c6]@4 [b3,b4,b5]@36]/6", // C B C B C B
  C: "[b3,b4,b5]@3 ~ [b3,b4,b5]@2 ~@6 [b3,b4,b5]@15 ~ [b3,b4,b5]@4", // B
  D: "[c#4,c#5,c#6]@3 ~ [c#4,c#5,c#6]@2 ~@6 [c#4,c#5,c#6]@20", E: "b4", F: "c#5", G: "[d5@29 ~@3]/2",
  H: "[~@24 [c4,c5,c6]@4 [b3,b4,b5]@37 ~@23 [c4,c5,c6]@4 [b3,b4,b5]@37 ~@23 [c4,c5,c6]@4 [b3,b4,b5]@37 ~@23 [c4,c5,c6]@4 [b3,b4,b5]@36]/8", // C B C B C B C B
  I: "[~@24 [c4,c5,c6]@4 [b3,b4,b5]@31 ~ [e5,e6]@2 ~@2]/2", J: "[f#5,f#6] ~ [f#5,f#6] ~ [f#5,f#6] ~@11",
})).s("gm_brass_section").gain(0.29).pan(0.7)

// chords · vibraphone · "Vibes"
const vibraphone = note("<~@27 A@2 B@2 A@2 C@2 D E D F@2 E@2 ~@19 A@2 B@2 A@2 C@2 D E D F@2 E@2 ~@12>".pickRestart({
  A: "~ b5 ~ b5 ~ b5 ~ b5, e6 g6 f#6 e6",
  B: "[~@4 b5@4 ~@4 b5@4 ~@4 b5@4 ~@8 e6@3 ~ b5@4 ~@4 b5@4 ~@4 b5@4 ~@4 b5@4, e6 g6 f#6 e6 ~ g6 f#6 e6, ~@28 b6@9 ~@27]/2",
  C: "[~@4 b5@4 ~@4 b5@4 ~@4 b5@4 ~@8 e6@3 ~ b5@4 ~@4 b5@4 ~@4 b5@4 ~@4 b5@4, e6 g6 f#6 e6 ~ g6 f#6 e6, ~@7 b6@3 ~@6]/2",
  D: "~ b5 ~ b5 ~ b5 ~ b5, ~ f#6 e6 d6", E: "~ b5 ~ b5 f6 e6 ~ b5, ~ f#6 ~ d6",
  F: "[~ b5 ~ b5 e6 f#6 a6 f#6@2 b5 ~ b5 ~ b5 ~ b5, ~ f#6 ~@3 f#6 e6 d6]/2",
})).s("gm_vibraphone").gain(0.29).pan(0.7)

// other · timpani
const timpani = note("<~@40 A B C D ~@30 E B C D F D F D F D F B C D>".pickRestart({
  A: "~@13 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2",
  B: "e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2",
  C: "e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 ~@3 e2 ~@3",
  D: "f#2 ~@3 f#2 ~@3 f#2 ~@23", E: "~@30 e2 b2", F: "~@28 e2 ~@3",
})).s("gm_timpani").gain(0.18).pan(0.4)

// other · timpani · soft notes
const timpani_soft = note(`<
  ~@39
  [~@24 e2 b2 e2 b2 e2 b2 e2 b2]
  [e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 ~@19]
  ~@32
  [~@24 e2 b2 e2 b2 e2 b2 e2 b2]
  [e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 e2 b2 ~@2]
  ~@13
>`).s("gm_timpani").gain(0.09).pan(0.4)

// other · orchestral harp · "Harp"
const orchestral_harp = note("<~ A B A B A B A B ~@9 C D ~@6 E@2 ~@6 F G ~@24 E@2 ~@6 H I ~@6 J K ~@10>".pickRestart({
  A: "~@3 b4 c#5 [d5,e5] f#5 [g#5,a5] b5 [c#6,d6] e6 [f#6,g#6] a6 [a6,b6] g#6 [e6,f#6] d6 [b5,c#6] a5 [f#5,g#5] e5 ~@10 b4", // Dsus2 Amaj7 Dmaj7 F#sus2 Asus2 Esus2 Bsus2 F#sus2
  B: "c#5 [d5,e5] f#5 [g#5,a5] b5 [c#6,d6] e6 [f#6,g#6] a6 [a6,b6] g#6 [e6,f#6] d6 [b5,c#6] a5 [f#5,g#5] ~@16", // Dsus2 Amaj7 Dmaj7 F#sus2 Asus2 Esus2 Bsus2 F#sus2
  C: "~@17 [f#3,g#3] [a3,b3] c#4 [d#4,e4] [f#4,g#4] [a#4,c5] [c#5,d#5] e5 [f#5,g#5] a5 a#5 [b5,c#6] d#6 e6 f#6", // F#sus2 Asus2 Emaj7 F#sus2 A#sus2 C#sus2 F#sus2 Bsus2
  D: "[g#6,a6] ~@31", // Amaj7
  E: "[~@17 [f3,g3] a3 [b3,c4] [d4,e4] [f4,g4] [a4,b4] c5 [d5,e5] f5 ~@6 b6@2 ~@30, ~@25 g5@2 b5@2 e6@2 g6@2 ~@31, ~@26 a5@2 [c6,d6]@2 f6@2 a6 ~@31]/2", // Fsus2 Cmaj7 Dsus2 Fsus2 Asus2 Dsus2 Csus2
  F: "~@24 [f#3,g#3] a3 [b3,c#4] [d#4,e4] f#4 [g#4,a#4] [c5,c#5] [d#5,e5]", G: "f#5 ~@31",
  H: "~@16 f#2 [g#2,a2] b2 [c#3,d#3] [e3,f#3] [g#3,a#3] [b3,c#4] d#4 [e4,f#4] a3 b3 [c#4,d#4] [e4,f#4] [g#4,a#4] [c5,c#5] d#5", // Amaj7 C#sus2 Esus2 G#sus2 Bsus2 Esus2 C#sus2 Esus2 …
  I: "f#5 ~@7, e5 ~@31",
  J: "~@4 b6 [g#6,a6] f#6 [d6,e6] c#6 [a5,b5] g#5 [e5,f#5] d5 [b4,c#5] a4 [f#4,g#4] e4 [c#4,d4] b3 [c#4,d4] e4 [f#4,g#4] a4 [b4,c#5] d5 [e5,f#5] g#5 [a5,b5] c#6 [d6,e6] f#6 [g#6,a6]", // Amaj7 Dsus2 Asus2 Esus2 Bsus2 F#sus2 Dmaj7 F#sus2 …
  K: "b6 ~@31",
})).s("gm_orchestral_harp").gain(0.03).pan(0.4)

// other · orchestral harp · "Harp" · soft notes
const orchestral_harp_soft = note("<~ A B A B A B A B ~@79>".pickRestart({
  A: "d4 [e4,f#4] g#4 a4 ~@17 [c#5,d5] b4 [g#4,a4] f#4 [d4,e4] c#4 [a3,b3] d4 [e4,f#4] g#4 a4", // Esus2 Dmaj7 Amaj7 Dsus2 Asus2 Esus2
  B: "~@16 e5 [c#5,d5] b4 [g#4,a4] f#4 [d4,e4] c#4 [a3,b3] g#3 f#3 ~@6", // Dmaj7 Amaj7 Dsus2 Asus2
})).s("gm_orchestral_harp").gain(0.02).pan(0.4)

// chords · flute
const flute = note("<~@45 A B C D A B E F G H I J K@2 L F ~@27>".pickRestart({
  A: "c#5@14 c5 c#5", B: "d5", C: "d#5@14 e5 d#5", D: "d5@21 c#5 ~@2 a4@8", E: "b4", F: "g#4",
  G: "~@4 g#6@4 ~@6 c5 c#5, c#5@7 ~, ~ f#6", H: "e6@7 d6, d5", I: "c#6@4 g#6@4 ~@6 e5 d#5, d#5@7 ~, ~ f#6",
  J: "d5@21 c#5 ~@6 d6@4, e6@7 ~, ~@3 a4", K: "[c#6@4 g#6@4 ~@6 c5 c#5 ~@12 a6@4, c#5@7 ~ d5@8, ~@2 f#6@5 ~]/2",
  L: "b4, e6@21 ~@11",
})).s("gm_flute").gain(0.14).pan(0.7)

// chords · flute · soft notes
const flute_soft = note("<~@48 [~@22 c5 b4 ~@8] ~@7 [~@22 c5 b4 ~@8] ~@31>").s("gm_flute").gain(0.07).pan(0.7)

// other · distortion guitar · "Dist.gt"
const distortion_guitar = note("<~@53 A@6 ~@29>".pickRestart({
  A: "[f#2@3 f#2@3 f#2@3 f#2@2 f#2@3 f#2@3 f#2@3 f#2@3 f#2@2 f#2@3 f#2@3 f#2@3 ~@30]/2",
})).s("gm_distortion_guitar").gain(0.25).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 [~@5 x ~ x] [x ~@4 x ~ x]!38 [x ~ x ~@2 x ~@2] [~@5 x ~ x] [x ~@4 x ~ x]!42 ~>")
  .gain(0.46)

// drums · rim
const rim = s("rim").struct("<~@4 [~@3 x] [~ x ~ x]!38 ~ [~@3 x] [~ x ~ x]!42 ~>").gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@5 [~@11 x ~@20]!39 [x ~@2 x ~@4] [~@11 x ~@20]!42 ~>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@27 [x!2 ~@30] ~@33 [x!2 ~@30] ~@7 x ~@18>").gain(0.29)

// drums · ride
const ride = s("rd").struct("<~@5 [x!8]!38 ~@2 [x!8]!42 ~>").gain(0.17)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@5 [x!8]!38 ~ [~@3 x!5] [x!8]!42 ~>").gain(1.17)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@26
  [~@15 x]
  [~@3 x ~@3 x ~ x ~ x ~@3 x]!16
  ~@17
  [~@15 x]
  [~@3 x ~@3 x ~ x ~ x ~@3 x]!16
  ~@11
>`).gain(2.02)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@27 [x ~ x ~ x!3 ~]!16 ~@18 [x ~ x ~ x!3 ~]!16 ~@11>").gain(2.02)

stack(
  bass, string_ensemble_2, string_ensemble_1, pizzicato_strings, tremolo_strings, brass_section, vibraphone, timpani,
  timpani_soft, orchestral_harp, orchestral_harp_soft, flute, flute_soft, distortion_guitar, kick, rim, snare, crash,
  ride, cabasa, triangle, triangle_2
)

More by Tina Turner