Strudelify

Luv 4 Luv

Robin S

KeyD minorTempo121 bpm
0:00/0:00
// Luv 4 Luv — Robin S
// 121 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "ORGAN 1" drawbar organ (copy of ch 2 "ORGAN 1" drawbar organ, 0.5 beats late)
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/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 · drawbar organ · "ORGAN 1"
const bass = note(`<
  ~@4 A B A B A B A ~ A B A C A B A D A B A C A B A D A B A C A B A D ~@4 A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B ~@16 A B A C A B A D A B A C A B A D A B A C A B A D ~@2
>`.pickRestart({
  A: "d2@2 ~@2 d2 ~ d2 f2@2 ~ f2 ~@2 d2 f2 g2", B: "c2@2 ~@2 c2 ~ c2 g2@2 ~ g2 ~@2 c2 g2 c2",
  C: "c2@2 ~@2 c2 ~ c2 g2@2 ~ g2 ~@2 c2 g2 a2", D: "c2@2 ~@2 c2 ~ c2 a1@2 ~ a1 ~@2 a1 c2 a1",
})).s("gm_drawbar_organ").gain(0.56).pan(0.3)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_2 = note(`<
  A B A C D ~ D ~ D ~ D E D ~@3 D ~ D ~ D ~@3 D F D ~ D ~@3 D F D ~ A B A G D ~@3 D ~ D ~ D ~@3 D F D ~ D ~@3 D ~ D ~ D
  ~@3 D F D ~ A B A C A B A C H I H I H I H I D ~@3 D F D ~ D ~@3 D F D ~ D ~@3 D F D J E K
>`.pickRestart({
  A: "g1@3 ~@3 g1@2 g1@2 g1 c2@2 ~ c2 ~", B: "~ g1@2 ~ g1@3 ~ g1@2 ~ d1@2 ~ d1 ~",
  C: "~ g1@2 ~ g1@3 ~ g1@2 c2 d1@2 ~ d1 ~", D: "g1 ~@7", E: "g1 ~ g1!3 ~ g1 ~", F: "~@7 f1",
  G: "~ g1@2 ~ g1@3 ~ g1@2 c2 d1@3 d1@2", H: "g3 ~@4 g3 bb3 c4", I: "f3 ~@7", J: "~ g1@3 ~@4 g1 g1@2 g1@2 g1@2 ~",
  K: "g1!2 ~@14",
})).s("gm_lead_8_bass_lead").gain(0.32)

// bass · lead 8 bass lead · "BASS&LEAD" · soft notes
const bass_soft = note("<~@80 A B A B A B A B ~@26>".pickRestart({
  A: "g1 ~@4 g1 bb1 c2", B: "f1 ~@7",
})).s("gm_lead_8_bass_lead").gain(0.18)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@28 A@2 B C A@2 B C ~@20 A@2 B C A@2 B C A@2 B C A@2 B C ~@8 D E F G D E F G A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C
  A@2 B C ~@2
>`.pickRestart({
  A: "[bb3@7 ~ a3@3 ~ [c4,e4,g4]@4, [d4,f4]@3 ~]/2", B: "[bb3,d4,f4]", C: "[c4,e4,g4]@15 ~",
  D: "[g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~", // G5
  E: "[g4,d5] ~ [g4,d5] f4 [g4,d5] ~ [g4,d5] f4 [g4,d5] ~ [g4,d5] f4 [g4,d5] f4 [g4,d5] f4", // G5
  F: "[g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] f4 [g4,d5] ~ [g4,d5] f4", // G5
  G: "[g4,d5] ~ [g4,d5] f4 [g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5] f4 [g4,d5] f4 [g4,d5] f4", // G5
})).s("gm_string_ensemble_2").gain(0.09)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A B A D A B A B A C A D A E A B A D A D A F A B A D A D A F A B A C A B A C A D A E A B A C A D A@3 B A D
  A D A B A B A C A D A F A B A C A D A G ~@8 A B A D A D A F A B A D A D A F A B A D A D A F B H
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@2 x!2 ~@3 x ~@3", C: "x ~@3 x ~@2 x!2 ~@2 x!2 ~ x ~", D: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@3",
  E: "x ~@3 x ~@2 x!2 ~@2 x!4 ~", F: "x!5 ~ x ~", G: "x ~ x!3 ~ x ~", H: "x",
})).gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@80 [~ x ~ x]!8 ~@26>").gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A B@35 A B@17 C ~ B@16 A B@3 A B@3 A B@3 A B@28 C>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x]!54 ~@2 [~ x ~ x ~ x ~ x]!56 [~ x ~ x ~ x ~@2] ~>").gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<[x!16]!28 [~ x!15] [x!16]!59 [~ x!15] [x!16]!15 [~ x!15] [x!16]!8 [x!2 ~@14]>")
  .gain(0.48)

// drums · splash
const splash = s("cr").struct(`<
  A@5 ~@2 B A ~@2 C A ~@2 B A ~@2 B A ~@2 B A ~@2 D A ~@2 B A ~@2 D A@5 ~@2 B A ~ A E A ~@2 F A B A G A@3 H A I A D A@3
  I A@3 D A@7 D A ~@2 B A@5 ~@2 B A ~@2 D A ~@2 B A ~@2 D A ~@2 B A ~@2 D J K
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@3 x ~ x ~ x ~@2 x!2 ~ x ~", D: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~",
  E: "~@4 x ~@3 x ~@2 x ~@2 x ~", F: "~@3 x", G: "~ x ~@2 x ~@3 x ~@2 x!2 ~ x ~", H: "x ~@5 x!2", I: "x ~@6 x",
  J: "x ~@3 x ~ x ~ x ~@2 x!3 ~ x", K: "x!2 ~@14",
})).gain(0.64)

stack(bass, bass_2, bass_soft, string_ensemble_2, kick, snare, clap, pedal_hat, open_hat, tambourine, splash)

More by Robin S