Strudelify

What Time Is Love (LP-mix)

The KLF

KeyB♭ minorTempo122 bpm
0:00/0:00
// What Time Is Love (LP-mix) — The KLF
// 122 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<A@10 ~@16 B@3 C ~@6 A@3 D ~@3 E@2 ~@6 A@4 F ~@17 A@10 ~>".pickRestart({
  A: "[bb1,bb2,bb3]", B: "[bb1,bb2,bb3,ab4]@15 ~", C: "[bb1,bb2,bb3,ab4]", D: "[bb1,db3,bb3]", E: "[bb1,bb2,bb3]/2",
  F: "[bb1,bb2,bb3] ~@7", // Bb
})).s("gm_lead_2_sawtooth").gain(0.25)

// bass · fretless bass · "FRETLESS"
const bass = note("<A@17 ~ A@16 ~@6 A@5 ~@6 A@4 ~@8 A@8 ~@2 A@10 ~>".pickRestart({
  A: "bb1!11 bb1@2 bb1!3",
})).s("gm_fretless_bass").gain(0.26)

// bass · fretless bass · "FRETLESS" · soft notes
const bass_soft = note(`<
  ~@55
  [gb2 ~@2 e2 gb2 ~ e2 c2 gb2 ~ c2!2 gb2 ~ c2 ~]!6
  [gb2 ~@2 e2 gb2 ~ e2 c2 gb2 ~ c2!2 gb2 ~@3]
  ~@22
>`).s("gm_fretless_bass").gain(0.19)

// chords · string ensemble 1 · "STRINGS" · Db
const string_ensemble_1 = note("<~@6 [[db4,f4,ab4] ~]!4 ~@41 [[db4,f4,ab4] ~]!4 [[db4,f4,ab4] ~@7] ~@28>")
  .s("gm_string_ensemble_1").gain(0.28)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note(`<
  A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B ~@2 C D C E B@3 A B ~@6 A B A B ~@8 A B A B A B A
  B ~@2 B@8 ~@3
>`.pickRestart({
  A: "~@2 bb3 ~ bb3!2 ~ bb3!2 ~ bb3 b3 ~ b3 ab3 ~", B: "~@2 bb3 ~ bb3!2 ~ bb3 b3 ~ b3 ab3 ~ ab3!2 ~",
  C: "~ bb4 [bb3,bb4] ~ [bb3,bb4]!2 ~ [bb3,bb4]!2 ~ [bb3,bb4] [b3,bb4] ~ [b3,bb4] [ab3,bb4] ~", // Bb Bmaj7 Absus2
  D: "~ bb4 [bb3,bb4] ~ [bb3,bb4]!2 ~ [bb3,bb4] [b3,bb4] ~ [b3,bb4] [ab3,bb4] ~ [ab3,bb4]!2 ~", // Bb Bmaj7 Absus2
  E: "~ [db4,bb4] [bb3,db4,bb4] ~ [bb3,db4,bb4]!2 ~ [bb3,db4,bb4] [b3,db4,bb4] ~ [b3,db4,bb4] [ab3,db4,bb4] ~ [ab3,db4,bb4]!2 ~", // Gb Bbm Gb Bbm7
})).s("gm_synth_bass_1").gain(0.33)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@18
  [bb4@2 f5@2 bb4@2 f5@7 ~@3]!4
  ~@41
  [bb4@2 f5@2 bb4@2 f5@7 ~@3]!8
  ~@2
  [bb4@2 f5@2 bb4@2 f5@7 ~@3]!8
  ~@3
>`).s("gm_lead_2_sawtooth").gain(0.4)

// other · lead 2 sawtooth · "SAW WAVE" · soft notes
const lead_2_sawtooth_soft = note("<~@18 [~@4 bb4 ~ bb4 f5]!4 ~@41 [~@4 bb4 ~ bb4 f5]!8 ~@2 [~@4 bb4 ~ bb4 f5]!8 ~@3>")
  .s("gm_lead_2_sawtooth").gain(0.2)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note("<~@10 A ~ A B A ~ C A ~@3 D ~@33 A ~ A B A ~ A ~@22>".pickRestart({
  A: "bb4 ~@7", B: "~@7 db5", C: "bb4 ~@6 db5", D: "~@9 c5@2 ~ db5@2 ~@2",
})).s("gm_orchestra_hit").gain(0.5)

// bass · slap bass 1 · "SLAPBASS 1"
const bass_3 = note(`<
  ~@55
  [gb2 ~@2 e2 gb2 ~ e2 c2 gb2 ~ c2!2 gb2 ~ c2 ~]!6
  [gb2 ~@2 e2 gb2 ~ e2 c2 gb2 ~ c2!2 gb2 ~@3]
  ~@22
>`).s("gm_slap_bass_1").gain(0.4)

// drums · rim
const rim = s("rim").struct(`<
  [x!12 ~ x!3]
  x
  [~@5 x!4 ~@2 x ~ x!2 ~]
  [~@8 x ~ x!2 ~ x!2 ~]
  [~@13 x!2 ~]
  [~@8 x ~ x!2 ~ x!2 ~]
  ~@78
>`).gain(0.3)

// drums · kick
const kick = s("bd").struct("<A@10 B@7 A B@16 A@2 ~@4 B@10 C B@4 A@7 ~ B@8 C ~ B@10 C>".pickRestart({
  A: "x!4", B: "x!16", C: "x",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@10 A@7 ~ A@18 ~@4 A@5 ~ B C D E ~ A@4 F@7 ~ A@8 ~@2 A@10 ~>".pickRestart({
  A: "~@2 x ~ x ~@2 x ~ x!2 ~ x ~@3", B: "~@15 x", C: "~ x ~@2 x ~@7 x ~@2 x", D: "~@4 x ~@4 x ~@2 x ~@2 x",
  E: "~@4 x ~@2 x ~@4 x ~@2 x", F: "~ x ~ x",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@18 A@18 B ~@3 A@5 ~@6 A@4 ~@8 A@8 ~@2 A@10 B>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@45 ~@2 B C@2 D A@10 E ~ A@20 D>".pickRestart({
  A: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", B: "~ x ~@2 x!2 ~ x!3 ~@2 x!2 ~ x", C: "x!2 ~@2 x!2 ~ x!3 ~@2 x!2 ~ x", D: "x",
  E: "x!2 ~ x!3 ~ x!3 ~ x!2 ~@3",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<A@45 ~@2 A@3 ~ A@10 B ~ A@20 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.33)

// drums · mid tom
const mid_tom = s("mt").struct("<~@30 [~@10 x!2 ~ x ~@2]!6 ~@48>").gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<~@47 [~ x ~ x]!3 ~@34>").gain(0.37)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@26
  [~ x ~@2 x ~@2 x ~@3 x ~ x ~@2]!10
  ~@4
  [~ x ~@2 x ~@2 x ~@3 x ~ x ~@2]
  [x ~@2 x ~@2 x ~@4 x ~ x ~@2]
  [~ x ~@2 x ~@2 x ~@3 x ~ x ~@2]
  [x ~@2 x ~@2 x ~@4 x ~ x ~@2]
  ~@40
>`).gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct("<A@45 ~@2 B A@2 C A@10 D ~ A@20 C>".pickRestart({
  A: "x!16", B: "~ x!15", C: "x", D: "x!13 ~@3",
})).gain(0.26)

// drums · bongos
const bongos = s("bongo:18").struct("<~@9 [~@7 x] ~@40 x ~@33>").gain(0.98)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@3 A@6 ~@16 A@4 ~@9 B ~@22 C ~@22>".pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~@2", C: "~@3 x",
})).gain(0.44)

// drums · guiro
const guiro = s("guiro:4").struct(`<
  ~@40 A B A B@2 ~@6 A B A B ~@8 A B A B A B A B ~@2 A B A B A B A B@3 C
>`.pickRestart({
  A: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~", B: "x ~ x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~", C: "x",
})).gain(6.29)

stack(
  lead_2_sawtooth, bass, bass_soft, string_ensemble_1, bass_2, lead_2_sawtooth_2, lead_2_sawtooth_soft, orchestra_hit,
  bass_3, rim, kick, snare, low_tom, pedal_hat, open_hat, mid_tom, high_tom, ride_bell, tambourine, bongos, whistle,
  guiro
)

More by The KLF