Strudelify

Love Is a Stranger

Real McCoy

KeyE minorTempo124 bpm
0:00/0:00
// Love Is a Stranger — Real McCoy
// 124 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "GMIDI Fiddle" named as a string part, played on violin (its fiddle patch is not one)
// note: duplicate parts dropped: ch 2 "GMIDI Fiddle" violin (copy of ch 1 "GMIDI Synth Brass 2" synth brass 2)
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. 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 · string ensemble 2 · "GMIDI String Ensemble 2"
const string_ensemble_2 = note(`<
  ~@8 A@2 B@2 A@2 B@2 ~@12 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C D ~@12 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C D ~@8 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
>`.pickRestart({
  A: "[[e3,g3,b3]@29 ~@3]/2", B: "[[b2,d3,f#3]@29 ~@3]/2", C: "e3 b3 e4 e3 b3 e4 e3 b3", D: "e4 e3 b3 e4 e3 b3 e4 e3",
})).s("gm_string_ensemble_2").gain(0.35)

// bass · synth bass 1 · "GMIDI Synth Bass1"
const bass = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@4 A B C D A B C D A B C D A B C
  D A B C D A B C D A B C D ~@4 A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "e2@3 ~@3 e2@2 ~@2 e2@2 ~@4", B: "e2@3 ~@3 e2@2 ~@2 e2@2 d2@2 e2@2", C: "b1@3 ~@3 b1@2 ~@4 b1@2 ~@2",
  D: "b1@3 ~@3 b1@2 ~@2 b1@2 a1@2 b1@2",
})).s("gm_synth_bass_1").gain(0.26)

// other · lead 7 fifths · "GMIDI Brite Saw"
const lead_7_fifths = note(`<
  ~@16 A B C D A B C D A B C D ~@20 A B C D A B C D A B C D ~@20 E ~ F ~ E ~ F ~@25
>`.pickRestart({
  A: "e3@3 ~@3 e3@10", B: "~@3 e3@2 e3 d3 e3", C: "b2@3 ~@3 b2@10", D: "~@3 b2@2 b2 a2 b2", E: "[e3,e5]@13 ~@3",
  F: "[e3,b5]@13 ~@3", // E5
})).s("gm_lead_7_fifths").gain(0.34)

// other · drawbar organ · "GMIDI Hammond Organ"
const drawbar_organ = note("<~@23 A B C D E ~@27 A B C D E ~@52>".pickRestart({
  A: "~@7 [c4,c5]", B: "[d4,d5] [c4,c5] [d4,d5] [c4,c5] ~@3 [c4,c5]", C: "[d4,d5] [c4,c5] [d4,d5] [c4,c5] ~@3 [b3,b4]",
  D: "[d4,d5] [b3,b4] [d4,d5] [b3,b4] ~@3 [b3,b4]", E: "[d4,d5] [b3,b4] [d4,d5] [b3,b4] ~@4",
})).s("gm_drawbar_organ").gain(0.32)

// other · koto · "GMIDI Koto"
const koto = note(`<
  ~@28 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2
>`.pickRestart({
  A: "e4!8", B: "d4!8",
})).s("gm_koto").gain(0.21)

// other · pad new age · "GMIDI Fantasia Pad"
const pad_new_age = note(`<
  ~@28 A B C D A B E F G@2 H@2 G@2 H@2 ~@16 A B C D A B E F G@2 H@2 G@2 H@2 ~@6 H@2 ~@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2
  H@2 ~@8
>`.pickRestart({
  A: "e4@2 e4@2 e4@2 d4@4 c4@3 ~ d4@2", B: "e4 f#4 e4 d4 ~@3 d4", C: "e4!2 d4 e4@2 e4!2 ~", D: "e4!3 d4 e4 ~@3",
  E: "e4@2 e4@2 d4@2 e4@4 d4@3 ~ a4@2", F: "~ g4 f#4 g4 ~ a4 ~@2", G: "~@6 g4@2 f#4@3 ~ e4@3 ~",
  H: "f#4!2 e4 f#4@2 f#4 ~@2",
})).s("gm_pad_new_age").gain(0.48)

// other · whistle · "GMIDI Whistle"
const whistle = note("<~@44 A B A B ~@28 A B A B ~@32>".pickRestart({
  A: "e3 b3 e4 e3 b3 e4 e3 b3", B: "e4 e3 b3 e4 e3 b3 e4 e3",
})).s("gm_whistle").gain(0.48)

// other · lead 4 chiff · "GMIDI Chiff Lead"
const lead_4_chiff = note("<~@44 A B A B ~@28 A B A B ~@32>".pickRestart({
  A: "~@2 e5 ~@2 d5 ~@2", B: "b4 ~@2 a4 ~@2 b4 ~",
})).s("gm_lead_4_chiff").gain(0.27)

// chords · pad sweep · "GMIDI Sweep Pad"
const pad_sweep = note("<~@80 A@8 ~@24>".pickRestart({
  A: "[~@16 [b5,e6]@9 ~@7, [e3,b3,e4,b4,e5]@45 ~@19]/4", // E5
})).s("gm_pad_sweep").gain(0.34)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~ x ~ x]!80 ~@8 [x ~@2 x ~ x ~ x]!16 ~@8>").gain(0.72)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!80 ~@8 [~ x ~ x]!16 ~@8>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!80 ~@8 [~ x ~ x]!16 ~@8>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!80 ~@8 [x!4]!16 ~@8>").gain(0.48)

// drums · guiro
const guiro = s("guiro:4").struct("<[~ x ~@3 x ~@2]!80 ~@8 [~ x ~@3 x ~@2]!16 ~@8>").gain(8.45)

stack(
  string_ensemble_2, bass, lead_7_fifths, drawbar_organ, koto, pad_new_age, whistle, lead_4_chiff, pad_sweep, kick, rim,
  snare, hihat, guiro
)

More by Real McCoy