Strudelify

Love Is a Stranger

Eurythmics

KeyC majorTempo124 bpm
0:00/0:00
// Love Is a Stranger — Eurythmics
// 124 bpm, 4/4, key C major. 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(124/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 · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A@8 B@4 C@4 B@4 C@8 B@2 C@4 B@8 C@4 B@4 C@12 B@2 C@4 B@6 C@3 D B@2 C@4 B@2 C@4 B@2 C@4 B@2 C@4 B@2 C@4 B@2 C@4 ~@2
>`.pickRestart({
  A: "[g3,c4,e4]/8", // C
  B: "[g3,c4,e4] ~ [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~", // C
  C: "[f3,a3,c4] ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  D: "[f3,a3,c4] ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4]@3 ~", // F
})).s("gm_lead_2_sawtooth").gain(0.14)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  A@12 B@4 A@4 B@8 A@2 B@4 A@8 B@4 A@4 B@10 C D A@2 B@4 A@6 B@4 A@2 B@4 A@2 B@4 A@2 B@4 A@2 E B@3 A@2 B@4 A@2 B@4 ~@2
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", B: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~",
  C: "f1 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", D: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f1 ~ f1 ~ f1 ~",
  E: "c2 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~",
})).s("gm_synth_bass_1").gain(0.4)

// other · clarinet
const clarinet = note("<A@11 B ~@4 A@4 ~@18 A@4 ~@4 A@4 ~@34 A@2 ~@4 A@2 ~@4 A@2 ~@18>".pickRestart({
  A: "g3 ~ a#3 ~ e3 ~ c3 ~ e3 ~ c3 ~@3 f3 ~", B: "g3 ~ a#3 ~ e3 ~ c3 ~ e3 ~ c3 ~ g3 ~ f3 ~",
})).s("gm_clarinet").gain(0.24).pan(0.1)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~@24 A@3 B C ~ A@3 B C ~@10 D E F G H I@2 ~@5 J K L M@4 N@3 O P@2 ~@9 Q R S@3 ~@2 N@3 O T@2 N@3 O U@2 N@3 O T@2 N@3 O
  U@2 N@3 O ~@2
>`.pickRestart({
  A: "[~ f4 a4 a#4@3 a4@3 f4 a4 a#4@3 a4@3 f4 a4 a#4@3 a4@2]/3", B: "g5 f5 e5 f4", C: "f4 e4@7", D: "~@3 g4",
  E: "e5@2 d5@2 c5@2 f4 e4", F: "f4 e4 f4 f4@2 g4@2 ~", G: "~ d5!2 c5@2 c5!3", H: "c5!4",
  I: "[c5 a#4!2 a#4@2 a4@5 ~@6]/2", J: "~@7 c4", K: "a4@3 g4 a4 g4@3 a4@2 g4@2 a4 g4@3",
  L: "a#4@3 a4@4 g4 a4@2 a#4@4 a4 g4", M: "[a4 g4!2 a4@2 a4 g4 a#4@2 a4 g4 a4@2 g4@15 ~@4]/4",
  N: "[~ a4 c5 d5@3 c5@3 a4 c5 d5@3 c5@3 a4 c5 d5@3 c5@2]/3", O: "a#5 a5 g5 f5", P: "[f5 e5@9 ~@6]/2", Q: "~@7 a#4",
  R: "a#4@3 a#4@2 a#4 a#4@2 a#4@3 a#4@2 a#4 a#4@2", S: "[a#4@3 a#4 a#4@4 a#4@2 a#4@10 a4@28]/3",
  T: "[f5@2 e5@23 ~@7]/2", U: "[f5 e5@11 ~@4]/2",
})).s("gm_synth_brass_2").gain(0.24).pan(0.4)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@68 A B A B A B C D E F G H ~@15 I@2 J@2 ~@17>".pickRestart({
  A: "~@2 c4 ~ g4 ~ e4 ~ e4 ~ c5 ~ g4 ~ g4 ~", B: "e5 ~ c5 ~ c5 ~ g5 ~ g5 ~ a#4 ~ a4 ~ a#4 ~",
  C: "~@2 f4 ~ c5 ~ a4 ~ a5 ~ f5 ~ c5 ~ c5 ~", D: "a5 ~ f5 ~ c5 ~ c6 ~ c6 ~ c5@2 ~@2 c5 ~",
  E: "~@2 f4 ~ c5 ~ a4 ~ a4 ~@5 c5 ~", F: "~@3 [f3,a3,c4]", G: "[e3,g3,c4]@3 ~@5", H: "~@8 g5 ~ a#4 ~ a4 ~ a#4 ~",
  I: "[~@17 g3@6 ~@9, ~@15 [e4,g4]@7 ~@10, ~@8 c4@3 ~@5]/2", J: "[~@8 [g3,c4] ~@7, ~@15 [e4,g4]@3 ~@14]/2",
})).s("gm_synth_brass_1").gain(0.3)

// chords · flute
const flute = note("<~@12 A ~ A ~@5 A ~ A ~ A@4 B ~ A@4 B ~ B ~@5 A ~ A ~@71>".pickRestart({
  A: "[c4,f4,a4]!14 ~@2", B: "[g3,c4,e4]!14 ~@2",
})).s("gm_flute").gain(0.27).pan(0.3)

// chords · flute · soft notes
const flute_soft = note("<~@12 A ~ A ~@5 A ~ A ~ A@4 B ~ A@4 B ~ B ~@5 A ~ A ~@71>".pickRestart({
  A: "~@14 [c4,f4,a4]!2", B: "~@14 [g3,c4,e4]!2",
})).s("gm_flute").gain(0.16).pan(0.3)

// other · shamisen
const shamisen = note(`<
  A ~ B ~ C@2 D ~ E F E F ~@4 E F E F ~@18 E F E F ~@4 E F E F ~@18 E G E F E G ~@15 H I ~@4 J@2 K L ~@17
>`.pickRestart({
  A: "g3@15 ~", B: "g3", C: "[g3@27 ~@5]/2", D: "g3@7 ~", E: "e4 c4 a#3 a3@2 a#3 g3@2", F: "e4 ~ f4 e4@4 ~, ~ d4@2 ~@5",
  G: "e4 ~ f4 e4@4 ~, ~@2 d4@7 ~@7", H: "~@12 g3 ~@3", I: "c3 ~@15",
  J: "[~@17 c3@9 ~@6, ~@15 [c4,e4,g4]@11 ~@6, ~@8 g3@5 ~@3]/2", K: "~@15 [e4,g4]", L: "[c3,g3,c4] ~@15",
})).s("gm_shamisen").gain(0.28).pan(0.4)

// chords · sitar
const sitar = note(`<
  ~@12 A B C B D ~@3 E F G H I ~@17 E F G H ~@4 E F G H ~@11 J K L ~@6 M N O P ~@2 Q@2 R S ~@3 T ~ U ~@3 T ~ U ~@20
>`.pickRestart({
  A: "~@4 f5@2 c5@2 ~@2 [g3,c5] ~@3 [a3,c5] ~, ~@4 c4 ~ a3 ~@9", B: "[a#3,d5] ~@3 [a3,c5] ~@3 [g3,a#4] ~@3 [a3,c5] ~@3",
  C: "[a3,c5] ~@3 [c4,f5] ~ [a3,c5] ~@3 [g3,c5] ~@3 [a3,c5] ~", D: "[g3,c5] ~@15",
  E: "~@4 f5@2 c5@2 ~@2 c5@2 ~@2 [a3,c5] ~, ~@4 c4 ~ a3 ~@3 g3 ~@5", // Am
  F: "d5@2 ~@2 c5@2 ~@2 [g3,a#4] ~@3 [a3,c5] ~@3, a#3 ~@3 a3 ~@11", // Gm Am
  G: "[a3,c5] ~@3 f5@2 c5@2 ~@2 [g3,c5] ~@3 [a3,c5] ~, ~@4 c4 ~ a3 ~@9", // Am C5 Am
  H: "[a#3,d5] ~@3 a3@2 ~@2 [g3,a#4] ~@3 [a3,c5] ~@3, ~@4 c5 ~@11", I: "a3 ~@7, c5 ~@15",
  J: "~@2 [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~", // A#5
  K: "[f4,a#4] ~ [f4,a#4] ~ f4@2 [f4,a#4]@2 [f4,a#4]@2 [f4,a#4]@2 a#4@2 a#4@2, ~@4 a#4 ~@7 f4 ~ f4 ~", // A#5
  L: "a#4 [f4,a#4]!6 ~, f4 ~@15", M: "~@9 a#4!4 ~ a#4!2", N: "a#4 ~@2 a#4 ~ a#4!2 ~ a#4!8", O: "a#4!13 [a#4,f5]!3",
  P: "[a#4,f5]!12 ~@4", Q: "[f4,a#4] f4!15", R: "[f4,a#4] f4!3 [f4,a4] f4!3 [f4,a#4] f4!3 [f4,a4] f4!3",
  S: "[f4,a#4]!16", T: "~@10 g3 ~ [g3,c4] ~ [g3,c4] ~", U: "~@2 f4 ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~@5",
})).s("gm_sitar").gain(0.16).pan(0.6)

// chords · sitar · soft notes
const sitar_soft = note("<~@64 A B ~@8 C D ~@11 E ~ F ~@3 E ~ F ~@20>".pickRestart({
  A: "[f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ [f4,a#4] ~ a#4@2 [f4,a#4] ~, ~@12 f4 ~@3", // A#5
  B: "[f4,a#4] ~@15", C: "~@8 a#4 ~@4 a#4 ~@2", D: "~ a#4 ~@5 a#4 ~@8", E: "~@10 c4 ~@5", F: "[f4,a#4] ~ a#4 ~@13",
})).s("gm_sitar").gain(0.1).pan(0.6)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<~ A ~ A ~ A ~ A ~@21 B ~@5 B ~ B ~@25 A ~@15 A ~@11 A ~@5 A ~@5 A ~@5 A ~@6>".pickRestart({
  A: "g6 [c6,e6] [g5,e6] c6 [e5,g5] [g5,c6] e5 [e4,c5] c4 ~@7, c5@2 ~@2 g4@3 ~@9", // C Em C5 C
  B: "g6 [c6,e6] [g5,e6] c6 g5 [g5,c6] e5 [e4,c5] g5@4 ~@4, c5@3 ~ [g4,e5]@3 ~ c4 ~@7", // C C5 C
})).s("gm_epiano1").gain(0.14).pan(0.9)

// other · taiko drum · "TAIKO"
const taiko_drum = note("<~ A@8 ~@53 B ~@6 B ~ B ~ C ~@42>".pickRestart({
  A: "[~@6 f6 f6@2 ~@7]/2", B: "~@12 f6 ~ f6@2", C: "~@12 f6@3 ~",
})).s("gm_taiko_drum").gain(0.36).pan(0.4)

// other · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~ A ~ A ~ A ~ A ~@21 A ~@5 A ~ A ~@17 B ~ C ~ C ~ D ~@17 A ~@7 E ~@3 A ~ E ~@3 A ~@5 A ~@5 A ~@6
>`.pickRestart({
  A: "~@2 e5 ~ g5@2 ~@2", B: "~@2 c5 ~", C: "~@8 c5@3 ~@5", D: "~@4 c5 ~@3", E: "f5 ~@7 c5 ~@7",
})).s("gm_pad_new_age").gain(0.13).pan(0.7)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@83 A ~@10 B C ~@10 B C ~@4 B C ~@2>".pickRestart({
  A: "~ x ~@3 x ~@3 x ~@6", B: "~@7 x", C: "~ x ~@3 x!2 ~@2 x ~@6",
})).gain(0.27)

// drums · hihat
const hihat = s("hh").struct(`<
  [x!8]!8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!54
  [x!7 ~]
  [x!8]
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!4
  [x!8]!6
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!40
  ~@2
>`).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@73 [~@14 x!2] ~@42>").gain(0.49)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@54 B ~ A@4 ~@6 A@39 C ~@2>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@7 x", C: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~",
})).gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct("<~@72 x ~@43>").gain(0.33)

stack(
  lead_2_sawtooth, bass, clarinet, synth_brass_2, synth_brass_1, flute, flute_soft, shamisen, sitar, sitar_soft,
  epiano1, taiko_drum, pad_new_age, kick, snare, snare_soft, hihat, low_tom, open_hat, tambourine
)

More by Eurythmics