Strudelify

Lullaby

The Cure

KeyC♯ minorTempo100 bpm
0:00/0:00
// Lullaby — The Cure
// 100 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// chords · acoustic guitar steel · "guitar1"
const acoustic_guitar_steel = note(`<
  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 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 C@2 B@2 C@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 A@2 B@2 ~
>`.pickRestart({
  A: "c#3@2 ~@2 [b3,g#4] ~ c#3 ~ c#3@2 ~@2 [b3,g#4] ~@3", B: "a2@2 ~@2 [b3,e4] ~ a2@2 a2@2 ~@2 [b3,e4] ~@3",
  C: "f#2@2 ~@2 [g#3,c#4] ~ f#2 ~ f#2@2 ~@2 [g#3,c#4] ~@3", // C#5
})).s("gm_acoustic_guitar_steel").gain(0.26)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@7 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E
  F G D E F G D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E H
>`.pickRestart({
  A: "~@3 b2", B: "c#3@3 b2 c#3@2 ~@2", C: "c#3@3 b2 c#3@2 e3@2", D: "a2@3 g#2 a2@2 ~@2", E: "a2@3 g#2 a2@2 b2@2",
  F: "f#2@3 e2 f#2@2 ~@2", G: "f#2@3 e2 f#2@2 g#2@2", H: "c#3 ~@7",
})).s("gm_electric_bass_finger").gain(0.26)

// bass · electric bass pick · "bass reinforcement"
const bass_2 = note(`<
  ~@7 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E
  F G D E F G D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E H
>`.pickRestart({
  A: "~@3 b1", B: "c#2@3 b1 c#2@2 ~@2", C: "c#2@3 b1 c#2@2 e2@2", D: "a1@3 g#1 a1@2 ~@2", E: "a1@3 g#1 a1@2 b1@2",
  F: "f#1@3 e1 f#1@2 ~@2", G: "f#1@3 e1 f#1@2 g#1@2", H: "c#2 ~@7",
})).s("gm_electric_bass_pick").gain(0.26)

// other · tremolo strings · "string"
const tremolo_strings = note(`<
  ~@16 A B C ~ A B C ~@17 A B C ~ A B C ~@25 D E F@2 D E F@2 D E F@2 D E F@2 A B C ~ A B C ~ A B C ~ A B C ~@2
>`.pickRestart({
  A: "b4", B: "g#4", C: "e4", D: "g#4 a4 g#4 f#4 g#4 ~ g#4 a4 g#4 f#4 g#4 ~@5", E: "~@6 g#4 a4 b4 ~ a4 ~ g#4 ~ f#4 ~",
  F: "[f#4@4 g#4 ~ e4@22 ~@4]/2",
})).s("gm_tremolo_strings").gain(0.26)

// other · pizzicato strings · "background"
const pizzicato_strings = note(`<
  ~@18 A@2 ~@2 A@2 ~@8 B C D E B C D E ~@2 A@2 ~@2 A@2 ~@8 B C D E B C D E F@2 D E F@2 D E ~@18 A@2 ~@2 A@2 ~@2 A@2 ~@2
  A@2 G
>`.pickRestart({
  A: "~@2 c#5!2 d#5@2 c#5 e5@2 c#5 e5@2 d#5@2 c#5@2", B: "c#5 ~@5 b4 ~ c#5!2 ~@6", C: "c#5 ~@5 b4 ~ c#5!2 ~@2 e5 ~@3",
  D: "a4 ~@5 g#4 ~ a4!2 ~@6", E: "a4 ~@5 g#4 ~ a4!2 ~@2 b4 ~@3", F: "f#4 ~@5 e4 ~ f#4!2 ~@6", G: "c#5 ~@15",
})).s("gm_pizzicato_strings").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@2 B A@3 B C A@2 B A@3 B C A@2 B A@3 B D A@2 B A@3 B C A@2 B A@3 B C A@2 B A@3 B D A@2 B A@3 B C B@8 A@2 B A@3 B
  C A@2 B A@3 B C A@2 B A@3 B C A@2 B A@3 B@2 ~
>`.pickRestart({
  A: "x ~@5 x ~ x!2 ~@6", B: "x ~@2 x!2 ~@3", C: "x", D: "x ~@7 x ~ x!3 ~@3",
})).gain(0.26)

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

// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~@15 B ~@15 A ~@7 B ~@23 A ~@7 A ~@17>".pickRestart({
  A: "~ x", B: "~@7 x",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@7 A ~@7 A ~@15 A ~@7 A ~@31 A ~@7 A ~@7 A ~@3 A ~ A ~ A>".pickRestart({
  A: "x",
})).gain(0.26)

stack(acoustic_guitar_steel, bass, bass_2, tremolo_strings, pizzicato_strings, kick, snare, open_hat, crash)

More by The Cure