Strudelify

Lament

The Cure

KeyF majorTempo120 bpm
0:00/0:00
// Lament — The Cure
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · overdriven guitar
const overdriven_guitar = note("<~@72 A B C D A B ~@8 E F E G E F E F E F E G E F E F ~@25>".pickRestart({
  A: "~ d4 f4 d5@2 f4 d4@2", B: "~ d4 f4 c5@2 f4 d4@2", C: "~ d4 f4 a4@2 f4 d4@2", D: "bb3 d4 f4 e4@2 f4 d4@2",
  E: "bb3 d4 f4 a4@2 f4 d4@2", F: "bb3 d4 f4 a4@2 ~@3", G: "bb3 d4 f4 e4@2 ~@3",
})).s("gm_overdriven_guitar").gain(0.14)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@36 A B A@3 B A@2 ~@20 A B A@3 B A@2 ~@6 A B A@3 B A@2 ~@41>".pickRestart({
  A: "bb3 d4 f4 e4@2 f4 d4 bb3", B: "c4 e4 f4 e4@2 f4 d4 bb3",
})).s("gm_acoustic_guitar_nylon").gain(0.64)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@16 A B C D C B C D ~@20 C B C D C B C D ~@34 C B C D C B C D C B C D C B C D C@5 B C D C@3 B C D C D C D C E ~@5
>`.pickRestart({
  A: "[a4,e5] [a4,f5] [a4,e5] [a4,f5] [a4,e5] [a4,f5] [a4,e5] [bb4,f5]", B: "[a4,e5] [a4,f5] [d5,g5] [d5,a5]@4 ~",
  C: "[a4,e5] [a4,f5] [a4,e5] [a4,f5] [a4,e5] [a4,f5] [a4,e5] [a4,f5]", D: "[a4,e5] [a4,f5] [a4,e5] [g4,bb4]@4 ~",
  E: "[a4,e5] ~@7", // A5
})).s("gm_acoustic_guitar_steel").gain(0.64)

// chords · acoustic guitar steel · "Guitar" · soft notes · Dm A5 Dm A5 Dm A5 Dm A5
const acoustic_guitar_steel_2 = note(`<
  ~@121
  [~@3 [a4,f5] [a4,e5] ~@2 [a4,f5]]
  [[a4,e5] ~@2 [a4,f5] [a4,e5] ~@2 [a4,f5]]!4
  [[a4,e5] ~@7]
>`).s("gm_acoustic_guitar_steel").gain(0.16)

// bass · electric bass pick
const bass = note(`<
  A B A B C B C B A B A B C D C D E D C B E D C B E D F G E D F G E D F G H I J G H I J G E D C B E D C B E D F G E D F
  G E D F G H I J G H I J G K L K M K G H I J G H I J G E D C B E D C B E D C B E D C B E D C B E D C B E D C B E D C B
  E D C N ~@5
>`.pickRestart({
  A: "a2@2 a2@2 a2!4", B: "g2@2 g2 g2@2 g2!3", C: "f2@2 f2@2 f2!4", D: "e2@2 e2 e2@2 e2!3", E: "d2@2 d2@2 d2!4",
  F: "f2@2 f2 f2@2 f2 g2!2", G: "bb1@2 bb1 bb1@2 bb1!3", H: "g1@2 g1 g1@2 g1!3", I: "a1@2 a1 a1@2 a1!3",
  J: "bb1@2 bb1@2 bb1!4", K: "d2@2 d2 d2@2 d2 d2@2", L: "bb1@2 bb1 bb1@2 bb1 bb1@2", M: "bb1@2 bb1 bb1@2 bb1 f2!2",
  N: "g2 ~@3",
})).s("gm_electric_bass_pick").gain(0.4)

// other · pan flute
const pan_flute = note(`<
  A B C D E D E F G B C D E D E F H@8 ~@12 I J K@2 I L K@2 H@8 ~@12 I J K@2 I L K@2 ~ M A M A M I J K@2 I L K@2 H@35 ~@6
>`.pickRestart({
  A: "a5", B: "g5@3 a5", C: "d5@3 a5", D: "f5@3 a5, ~@12 d5 ~@3", E: "d5@3 a5, ~@12 d5 ~@3", F: "d5@3 ~",
  G: "a5, d5 ~@15", H: "d5", I: "f5", J: "f5 a5, ~@8 f5 ~@7", K: "[d5@3 ~]/2", L: "f5 [a4,a5], ~@8 f5 ~@7", M: "~ g5",
})).s("gm_pan_flute").gain(0.64)

// other · pad sweep
const pad_sweep = note("<~@122 f3!4 ~>").s("gm_pad_sweep").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  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 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
>`.pickRestart({
  A: "x!2 ~@2 x ~@3", B: "x!2 ~@3 x!3",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@3 x",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct(`<
  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 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
>`.pickRestart({
  A: "~@2 x!2 ~@4", B: "~@5 x!3",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@10 x!3 ~ x ~",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@4 x!6 ~@6",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  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 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
>`.pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~@5 x ~@2",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("x!16").gain(0.4)

stack(
  overdriven_guitar, acoustic_guitar_nylon, acoustic_guitar_steel, acoustic_guitar_steel_2, bass, pan_flute, pad_sweep,
  kick, snare, clap, hihat, low_tom, mid_tom, open_hat, tambourine
)

More by The Cure