Strudelify
Luv 4 Luv (Stone's Radio Edit) cover art

Luv 4 Luv

Luv 4 Luv (Stone's Radio Edit)

Robin S

KeyG minorTempo118 bpm
0:00/0:00
// Luv 4 Luv (Stone's Radio Edit) — Robin S
// 118 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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.

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A B A B C D C E F ~@3 F ~ F G F ~@3 F ~ F ~ F ~@3 F H F ~ F ~@3 F H F ~ C D C E F ~@3 F ~ F ~ F ~@3 F H F ~ F ~@3 F ~
  F ~ F ~@3 F H F ~ C D C E C D C E A B A B A B A B F ~@3 F H F ~ F ~@3 F H F ~ F ~@3 F H F ~ C D C E C D C I
>`.pickRestart({
  A: "g2 ~@4 g2 bb2 c3", B: "f2 ~@7", C: "g2@2 ~@4 g2@2 g2@2 g2 c3@2 ~ c3@2", D: "~ f2@2 ~ f2@2 ~@2 f2@2 ~ d2@3 d2@2",
  E: "~ f2@2 ~ f2@2 ~@2 f2 ~ c3 d2@3 d2@2", F: "g2 ~@7", G: "g2 ~ g2!3 ~ g2 ~", H: "~@13 f2@2 ~",
  I: "~ f2@2 ~ f2@2 ~@10",
})).s("gm_lead_2_sawtooth").gain(0.4)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@8 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 C A B A D A B A C A B A D A B A C A B A
  D A B A C A B A D ~@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 ~@8
>`.pickRestart({
  A: "g1@2 ~@2 g1@2 g1 bb1@2 ~ bb1@2 ~ g1 bb1 c2", B: "f1@2 ~@2 f1@2 f1 c2@2 ~ c2@2 ~ bb1 c2 f1",
  C: "f1@2 ~@2 f1@2 f1 c2@2 ~ c2@2 ~ g1 c2 d2", D: "f1@2 ~@2 f1@2 f1 d1@2 ~ d1@2 ~ d1 f1 d1",
})).s("gm_synth_bass_2").gain(0.64)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@9 A@2 B ~@4 C D E F G H I J K L M N O P Q R S T U@3 V W X ~@4 Y@2 Z F AA AB AC AD AE@2 AF AG O P AH AI AJ ~ U@3 AK W
  AL AM ~ U@3 AK W X ~@8 AN AO AP AQ AR AS AT@2 AJ ~ U@3 AK W AL AM ~ U@3 AK W AU AM ~ U@3 AK W X ~@8
>`.pickRestart({
  A: "[~@14 f4@5 ~ f4@2 d4@2 f4@2 f4@2 d4@2 f4@2]/2", B: "f4@2 g4@2 a4 g4 f4 d4 c4 d4 c4@3 bb3@2 ~",
  C: "~@2 d4 ~ d4 ~ d4@2 ~@2 bb3 ~ g3!2 ~ c4", D: "~ d4@3 c4@4 ~@8", E: "~@6 d4 ~ d4@2 c4@2 bb3@2 c4@2",
  F: "d4@2 ~ f4@3 g4@6 ~@4", G: "~@2 d4 ~ d4 ~ c4@3 ~ bb3 ~ bb3 ~ bb3@2, ~@6 db4 ~@9", H: "d4@2 f4 ~ d4@2 g4@4 f4@6",
  I: "~@2 d4 ~ d4 ~ db4 c4@3 bb3 ~ bb3@2 bb3@2", J: "bb4@3 g4@2 ~ f4 g4 [g4,ab4] ~ f4@5 ~",
  K: "~@2 d4 ~ d4!2 ~ d4@3 c4 ~ bb3@2 bb3@2", L: "d4@2 ~ c4@9 ~@4", M: "~@2 d4 ~ d4 ~ d4 g4@3 d4@2 bb3 ~ bb3@2",
  N: "d4@2 [d4,eb4] c4@9 ~@4", O: "~@2 d4 ~ d4 ~ d4 d4@3 c4@2 bb3@2 bb3@2", P: "~@2 bb4 ~ g4 ~ g4@3 [g4,ab4] f4@5 ~",
  Q: "~@2 bb3@2 d4 ~ d4 bb3@3 bb3@3 ~ bb3@2", R: "d4@2 ~ f4@3 g4@2 ~@2 g3@2 g4!3 ~", S: "f4 g4 ~@6",
  T: "g4@4 d4@3 c4@2 bb3@6 ~",
  U: "[~@2 d4 ~ d4!2 d4@2 d4@4 f4@3 c4@2 bb3@7 ~@4 bb3 ~ bb3 d4@3 f4 ~ f4@2 d4 g4@4 ~ bb3 ~ bb3@2]/3",
  V: "bb4@2 g4 ~ g4@2 bb4 g4@2 f4@5 ~@2", W: "~@2 d4 ~ d4!2 d4@2 d4@4 f4@4", X: "c4 bb3@3 ~@4",
  Y: "[~ g4@3 f4 ~ d4 g4@3 d4 ~ bb3 ~ bb3 c4@2 d4@7 ~@8]/2", Z: "~@2 d4 ~ d4 ~ d4 d4@3 c4@2 bb3@2 c4@2",
  AA: "~@2 d4 ~ d4 ~ d4 d4@3 bb3 ~ bb3@3 ~", AB: "a4@2 ~ f4@2 ~ f4@2 [g4,ab4] f4@3 ~@4",
  AC: "~@2 d4 ~ d4 ~ d4 c4@3 bb3@2 bb3@2 bb3@2", AD: "d4@3 f4@2 ~ g4@6 ~@4",
  AE: "[~@2 d4 ~ d4!2 ~ d4@3 c4 ~ bb3@2 bb3 d4@2 c4@6 ~@9]/2", AF: "g4@3 ~ f4@2 ~ d4 f4@2 d4@2 f4@2 d4@2",
  AG: "f4 d4 c4@4 ~@2", AH: "g4@3 ~ bb4@2 g4@2 bb4@4 ~@2 f4@2", AI: "g4@2 ~ bb4@2 ~ c5@3 ~ d5@2 c5 bb4!2 ~",
  AJ: "c5@4 bb4@3 g4 f4@2 g4@6", AK: "bb4@2 g4 ~ g4 bb4 ~ g4@2 f4@6 ~", AL: "c4@2 bb3@4 g4@2 d5@2 ~ eb5@3 d5@2",
  AM: "c5 bb4 g4@2 f4@8 ~@4", AN: "~@4 d4@3 ~ c4@4 c4@3 bb3", AO: "c4 bb3 c4!3 d4 c4@2", AP: "~@4 d4@7 ~ d4@3 c4",
  AQ: "d4 eb4 d4@4 d4@2 d4@2 c4@2 bb3@4", AR: "~@4 d4 ~ d4 c4 d4 ~ d4@3 ~ d4 ~", AS: "d4 c4 d4@2 d4@5 c4@3 c4@2 bb3@2",
  AT: "[~@8 d5@4 c5@8 c5@7 d5 c5 bb4 g4@2]/2", AU: "c4@2 bb3@4 d4@2 d5@2 ~ eb5@3 d5@2",
})).s("gm_electric_guitar_jazz").gain(0.56)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@32 A B A B A B A B ~@20 A B A B A B A B A B A B A B A B ~@16 A B A B A B A B A B A B A B A B A B A B A B A B ~@8
>`.pickRestart({
  A: "[g3,a3,bb3,d4,f4]", B: "[g3,a3,c4,e4,g4]",
})).s("gm_synth_strings_1").gain(0.16)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@84 A@4 B@4 ~@32>".pickRestart({
  A: "[~@7 [f4,f5], [g4,g5], ~ [g3,d5]]/4", B: "[g3,g4,d5,g5]/4",
})).s("gm_string_ensemble_2").gain(0.32)

// other · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@31 A ~@19 A ~@15 A ~@23 A ~@15 A ~@16>".pickRestart({
  A: "~@10 g3 d4 g4 a4 g4 d4",
})).s("gm_epiano1").gain(0.56)

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

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

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!15 ~ [~ x ~ x]!42 ~ [~@3 x] [~ x ~ x]!64>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~ x ~ x]!4 [x!4]!11 [x!2 ~ x] [x!4]!42 [x!2 ~@2] ~ [x!4]!64>").gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4
  [~ x ~ x ~ x ~ x]!11
  [~ x ~@3 x ~@2]
  [~ x ~ x ~ x ~ x]!42
  [~ x ~@6]
  [~@7 x]
  [~ x ~ x ~ x ~ x]!64
>`).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [x!16]!54 ~@2 [x!16]!63 [x!15 ~]>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  A ~@2 B A@5 ~@2 C A ~@2 D A ~@2 E A ~@2 E A ~ A F A ~@2 G A@3 H A@3 G A@5 ~@2 I A ~ A J A ~ A F A K A L A@3 M A B A G
  A@3 M A@3 G A@5 N A G A ~@2 C A ~ A@3 B A M A M A G A O A P A M A G A@3 B A@3 G A@3 B A B A G
>`.pickRestart({
  A: "x", B: "x ~@6 x", C: "~@7 x", D: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", E: "~@11 x ~@2 x ~", F: "~@11 x ~@4",
  G: "x ~@3 x ~@3 x ~@2 x ~@2 x ~", H: "x ~@2 x", I: "~@3 x", J: "~@4 x ~@3 x ~@2 x ~@2 x ~", K: "~@13 x ~@2",
  L: "~ x ~@2 x ~@3 x ~@2 x ~@2 x ~", M: "x ~@10 x ~@2 x ~", N: "x ~@12 x ~@2", O: "x ~@12 x!2 ~", P: "x ~@10 x ~@4",
})).gain(0.4)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@8 A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B ~@2 A B A B A B A
  B A B A B A B A B ~@16 A B A B A B A B A B A B A B A B A B A B A B A B ~@8
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@8 x ~@2 x ~@4",
})).gain(0.63)

// drums · shaker
const shaker = s("sh").struct(`<
  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 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
  ~@2 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 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
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@9 x ~@6",
})).gain(0.48)

stack(
  lead_2_sawtooth, bass, electric_guitar_jazz, synth_strings_1, string_ensemble_2, epiano1, kick, snare, clap, hihat,
  open_hat, tambourine, crash, bongos, shaker
)

More by Robin S