Strudelify

Head Over Heels

Tears for Fears

KeyA minorTempo103 bpm
0:00/0:00
// Head Over Heels — Tears for Fears
// 103 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: ch 3 "Strings" named as a string part, played on string ensemble 1 (its acoustic guitar nylon patch is not one)
// 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(103/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.

// chords · piano · "El Piano"
const piano = note(`<
  A@4 B@2 C@7 D@8 E@6 F@8 G@2 H@8 I J I J I J I J I J I J K L M N K L G@2 ~@2 O@2 P@4 O@4 P@4 O@2 P@6 O@2 P@4 O@4 P@4
  O@4
>`.pickRestart({
  A: "[~@9 g5@4 f#5@2 e5@2 d5@4 e5@2 c5@4 g5@2 f#5@2 ~ e5@2 d5@2 e5@2 c5@2 ~@2 g5@4 f#5@2 e5@2 d5@4 e5@2 ~ c5@4 g5@2 f#5, ~@9 g3@31 ~@2 a3@22]/4",
  B: "[~ e5@2 d5@2 e5@2 c5@2 ~@2 g5@4 f#5@2 ~ e5@2 d5@4 e5@2 c5@4 g5@2, ~@11 g3@21]/2",
  C: "[f#5@2 e5@2 d5@2 e5@2 c5@2 ~@3 g5@4 f#5@2 e5@2 d5@4 e5@2 c5@4 g5@2 f#5@2 e5@2 ~ d5@2 e5@2 c5@2 ~@2 g5@4 f#5@2 e5@2 d5@4 e5@2 c5@4 ~ g5@2 f#5@2 e5@2 d5@2 e5@2 c5@2 ~@2 g5@4 f#5@2 e5@2 d5@4 ~ e5@2 c5@4 g5@2 f#5@2 e5@2 d5@2 e5@2 c5@2 ~@2, ~@13 a3@29 ~@4 g3@31 ~@2 a3@28 ~@5]/7",
  D: "[[b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2, ~@3 a4@16 a4@16 a4@16 a4@13]/8", // Bsus4 A Cmaj7 C Bsus4 A Cmaj7 C …
  E: "[[b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2, ~@3 a4@16 a4@16 a4@13]/6", // Bsus4 A Cmaj7 C Bsus4 A Cmaj7 C …
  F: "[[b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [d5,g5,b5,d6]@16 [e5,g5,b5,d6]@14 ~@2 [d5,g5,b5,d6]@15 ~ [e5,g5,b5,d6]@15 ~ [d5,g5,b5,d6]@16 [e5,g5,b5,d6]@14 ~@2, ~@3 a4@61]/8", // Bsus4 A Cmaj7 C G Em7 G Em7 …
  G: "[[e5,a5,c6]@31 ~]/2", // Am
  H: "[[b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2 [b4,c#5,e5,f#5]@6 [c#5,e5,a5]@8 ~@2 [b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2, ~@3 a4@61]/8", // Bsus4 A Cmaj7 C Bsus4 A Cmaj7 C …
  I: "[b4,c#5,e5,f#5]@3 [c#5,e5,a5]@4 ~", J: "[b4,c5,e5,g5]@5 ~ [g4,c5,e5,g5]@8 ~@2", K: "[d5,g5,b5,d6]",
  L: "[e5,g5,b5,d6]@7 ~", M: "[d5,g5,b5,d6]@15 ~", N: "[e5,g5,b5,d6]@15 ~",
  O: "[g5@3 ~ f#5@2 e5@2 d5@4 e5@2 c5@4 g5@2 f#5@2 e5@2 d5@2 e5@2 c5@2 ~@2]/2",
  P: "[g5@2 f#5 e5 d5@2 e5 c5@2 g5 f#5 e5 d5 e5 c5 ~]/2",
})).s("gm_piano").gain(0.37).pan(0.6)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@4 A@2 B@7 C@8 D@6 E@7 F@5 G@8 H I H I H I H I H I J K L@8 ~@4 M@2 N@2 O@6 N@2 P@2 Q@2 P@2 R@2 P@2 S@2 T@6 U@4 V@2
>`.pickRestart({
  A: "[~@11 [g4,c5]@21]/2", B: "[~@13 [a4,d5]@33 [g4,c5]@33 [a4,d5]@31 ~@2]/7",
  C: "[[b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2, ~@3 a3@16 a3@16 a3@16 a3@13]/8", // Bsus4 A Cmaj7 C Bsus4 A Cmaj7 C …
  D: "[[b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2, ~@3 a3@16 a3@16 a3@13]/6", // Bsus4 A Cmaj7 C Bsus4 A Cmaj7 C …
  E: "[[b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [d4,g4,b4,d5]@16 [e4,g4,b4,d5,e5]@16 [d4,b4,d5]@16 [e4,b4,d5,e5]@16 [d4,b4,d5]@16, ~@3 a3@53, ~@64 g4@47 ~]/7", // Bsus4 A Cmaj7 C G Em7 G E7 …
  F: "[[e4,g4,b4]@14 ~@2 [c4,e4,a4,f5]@27 ~@5 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2, d5, e5@8 a3@19 a3@13]/5", // Em Fmaj7 Bsus4 A Cmaj7 C
  G: "[[b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2 [b3,c#4,e4,f#4]@6 [c#4,e4,a4]@8 ~@2 [b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2, ~@3 a3@61]/8", // Bsus4 A Cmaj7 C Bsus4 A Cmaj7 C …
  H: "[b3,c#4,e4,f#4]@3 [c#4,e4,a4]@4 ~", I: "[b3,c4,e4,g4]@5 ~ [g3,c4,e4,g4]@8 ~@2", J: "[d4,g4,b4,d5]",
  K: "[e4,g4,b4,d5,e5]", // Em7
  L: "[[d4,b4,d5]@16 [e4,b4,e5]@16 [d4,b4]@15 ~ [e4,g4,b4]@14 ~@2 [c3,e4,f4,a4,f5]@27 ~@37, g4@47 ~ e5@16 ~@64, ~ d5@7]/8", // G E5 G Em Fmaj7
  M: "[[c4,g4,c5], e4@15 ~]/2", N: "[[d4,f#4,a4]@31 ~]/2",
  O: "[[e4,g4,c5]@31 ~ [f#4,a4]@30 ~@2 [c4,e4,g4]@32, c4@30 ~ d4@31 c5@34]/6", P: "[c4,e4,g4,c5]/2", Q: "[d4,f#4,a4]/2",
  R: "[[d4,a4]@31 ~, f#4@29 ~@3, c4 ~@31]/2", S: "[[d4,a4]@31 ~, f#4@29 ~@3]/2",
  T: "[g4@3 ~ g4@25 ~@3 [f#4,a4]@31 ~ [c4,e4,g4]@31 d4, c5@32 ~@31 c5@33, [c4,e4]@30 ~ d4@32 ~ d#4@2 ~@30, c6 ~@7]/6", // F#m C
  U: "[[f#4,a4]@31 ~ [c4,g4]@31 ~, ~@31 c5@33, ~@31 e4@31 ~@2]/4", V: "[[d4,f#4,a4]@15 ~]/2",
})).s("gm_string_ensemble_1").gain(0.16)

// chords · tremolo strings · "Synth"
const tremolo_strings = note("<~@6 A@4 B@8 ~@13 C D C E F@2 ~@22 C D C E F@2 ~@10 G@4 H I@8 J@4 K@8 L@7>".pickRestart({
  A: "[~@13 e5@6 d5@6 a5@6 g5@7 a6@4 g6@3 ~ c6@4 b5 ~ b5 a5@2 b5@3 e5@4 ~@2, ~@25 g#5 ~@12 g#6 ~@12 c6@13]/4",
  B: "[~ c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ e5@6 d5@6 ~ a5@6 g5@6 a6@4 g6@4 ~@80, ~ c6@31, ~@3 a5 ~@60]/8", C: "a5 g5 f#5 g5",
  D: "e5@2 b4 e5@2 b4 e5@2", E: "e5@2 b4 e5@2 b4 e5@2, d#5 ~@15", F: "[c5@27 ~@5]/2",
  G: "[c6@4 b5 ~ b5 a5@2 b5@3 e5@4 ~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ e5@6 d5@6 a5@6 g5@6 a6@4 g6@3 ~, ~@5 c6@13 ~@3 c6@43, ~@23 a5@2 ~@39]/4",
  H: "c6@4 b5 ~ b5 a5@2 b5@3 e5@4, ~@5 c6@11",
  I: "[~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ [d5,e5]@6 ~@12 g5@6 a6@4 g6@4 c6@4 b5 ~ b5 ~@2 b5@3 e5@4 ~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ [d5,e5]@6 ~@12 g5@6 a6@4 g6@4 c6@4 b5 ~ b5 ~@2 b5@3 e5@4, ~@5 c6@43 ~@5 c6@13 ~@3 c6@43 ~@5 c6@11, ~@7 a5@2 ~@7 [f#5,d6]@30 ~@34 [f#5,d6]@30 ~@18, ~@16 a5@12 a5@27 a5@16 a5@9 a5@12 a5@27 a5@9, ~@16 e6 ~@5 d5@58 e6 ~@5 d5@42]/8", // Dsus2 D
  J: "[~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ [d5,e5]@6 ~@12 g5@6 a6@4 g6@4 c6@4 b5 ~ b5 ~ b5@4 e5@4, ~@5 c6@43 ~@5 c6@11, ~@7 a5@9 [f#5,d6]@30 ~@18, ~@16 a5@12 a5@27 a5@9, ~@16 e6 ~@5 d5@42]/4", // Dsus2 D
  K: "[~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ e5@6 ~@12 g5@6 a6@4 g6@4 c6@4 b5 ~ b5 ~ b5@3 ~ e5@4 ~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ e5@6 ~@12 g5@6 a6@4 g6@3 ~ c6@4 b5 ~ b5 ~ b5@4 e5@4, ~@5 c6@43 ~@5 c6@13 ~@3 c6@43 ~@5 c6@11, ~@7 a5@21 a5@27 a5@16 a5@21 a5@27 a5@9, ~@11 d5@53]/8",
  L: "[~@2 c6@2 b5 ~ b5 ~ b5@4 e5@3 ~ e5@6 ~@12 g5@6 a6@4 g6@4 c6@4 b5 ~ b5 ~@2 b5@3 e5@4 ~@4 b5 ~ b5 ~ b5@4 e5@3 ~ e5@6 ~@12 g5@6 a6@4 g6@3 ~, ~@5 c6@43 ~@5 c6@17 ~@42, ~ a5@3 a5@10 ~@2]/7",
})).s("gm_tremolo_strings").gain(0.4)

// bass · bassoon · "Bass"
const bass = note("<~@2 A@4 B@7 ~@94>".pickRestart({
  A: "[~@10 [d1,d2]@31 ~@2 [c1,c2]@21]/4", B: "[~@13 [d1,d2]@31 ~@2 [c1,c2]@30 ~@3 [d1,d2]@31 ~@2]/7",
})).s("gm_bassoon").gain(0.37).pan(0.3)

// bass · oboe · "Bass"
const bass_2 = note(`<
  ~@13 A B C D E B C F C B C G E B A F H I J K H L M@2 C B N O E B P F C B N Q E B R F E S C F H I J K H L M@2 ~@2 T U V
  W T U V X T U V X T U V X T U V X T U V X T U V X T U V X T U V X T U V Y
>`.pickRestart({
  A: "a1@2 ~@2 b1@2 ~@2 c2 ~@7", B: "c2@2 ~@2 a2@2 ~@4 g2 ~ g2@2 a2@2", C: "a1 ~ b1 ~ c2 ~@3",
  D: "g2@2 ~@2 f#2 ~@3 e2 ~@2 d2 d2@2 e2 ~", E: "a1 ~@3 b1@3 ~ c2@2 ~@6", F: "g2 ~@3 f#2 ~@5 d2 ~ d2@2 e2 ~",
  G: "g2@2 ~@2 f#2 ~@3 e2 ~ d2 ~ d2@2 e2 ~", H: "g1@3 a1@3 b1@2", I: "e2@6 [b1,d2] ~ e2 ~ e2 ~ e2@4", J: "g1@5 a1 b1@2",
  K: "e2", L: "e2@6 [b1,d2] ~ e2 ~ e2 ~ e2@2 ~@2", M: "[d2@15 ~]/2", N: "a1@2 ~@2 b1 ~@3 c2@2 ~@6",
  O: "g2@2 ~@2 f#2@2 ~@2 e2 ~@2 d2 d2@2 e2 ~", P: "a1 ~@3 b1@2 ~@2 c2 ~@7", Q: "g2@2 ~@2 f#2@2 ~@2 e2 ~ d2 ~ d2@2 e2 ~",
  R: "a1 ~@3 b1@2 ~@2 c2@2 ~@6", S: "c2@2 ~@2 a2 ~@5 g2 ~ g2@2 a2@2", T: "c2@7 e2 g3@2 f#3@2 d3@4",
  U: "c2@6 [e2,f2] g3@3 f#3@2 d3@4", V: "d2@4 g3 f#3 d3@2, ~@8 f3 ~@7", W: "d2@7 ~ g3@2 f#3@2 d3@3 ~",
  X: "d2@8 g3@2 f#3@2 d3@3 ~", Y: "d2@8 g3@2 f#3 ~ d3@3 ~",
})).s("gm_electric_bass_finger").gain(0.56).pan(0.3)

// bass · oboe · "Bass" · soft notes
const bass_soft = note(`<
  ~@15 A ~@7 B ~@15 A ~@7 B ~@10 C ~@8 D E F G D E F G D E F G D E F G D E F G D E F G D E F G D E F G D E F G D E F G
>`.pickRestart({
  A: "~@9 b1 ~@6", B: "~@8 b1 ~@7", C: "~@12 f2 ~@3", D: "~@7 d2 ~@8", E: "~@6 [d2,g2] a2 ~@8", F: "~@11 g3 ~@4",
  G: "~@7 e2 f2 ~@7",
})).s("gm_electric_bass_finger").gain(0.24).pan(0.3)

// other · piano · "MIDIFEX"
const piano_2 = note(`<
  ~@20
  [~@2 a5 ~ g5 ~ e5 ~ e6 ~ a5 ~ d6 ~ b5 ~]
  ~@23
  [~@2 a5 ~ g5 ~ e5 ~ e6 ~ a5 ~ d6 ~ b5 ~]
  ~@62
>`).s("gm_piano").gain(0.37)

// drums · kick
const kick = s("bd").struct("<~@12 [x!2 ~@2 x ~@3] [x ~@3 x!2 ~@2]!70 ~@24>").gain(0.46)

// drums · snare
const snare = s("sd").struct("<~@13 [~ x ~ x]!70 ~@24>").gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@12 [~@6 x!3 ~@7] [~ x ~ x]!70 ~@24>").gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@13 [~ x!2 ~@2 x!2 ~]!70 ~@24>").gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 [~@9 x!2 ~@5] ~@94>").gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@12 [~@4 x!2 ~@10] ~@94>").gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@12 [~@3 x] ~@94>").gain(0.46)

stack(
  piano, string_ensemble_1, tremolo_strings, bass, bass_2, bass_soft, piano_2, kick, snare, low_tom, hihat, mid_tom,
  high_tom, crash
)

More by Tears for Fears