Strudelify

Lollipop (Candyman)

Aqua

KeyC minorTempo139 bpm
0:00/0:00
// Lollipop (Candyman) — Aqua
// 139 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(139/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.

// chords · piano
const piano = note(`<
  A B A C A B A C A B A ~ A B A C A B A C D E D F D E D F ~@16 A B A C A B A C A B D E D F D E D F ~@24 A B A C A B A ~
  A B A C A B A ~@9 A B A C A B A C A B A C ~
>`.pickRestart({
  A: "g5 ~ c5 ~ g5 ~ c5 ~ g5 ~ c5 ~ bb5 ~ c5 ~", B: "ab5 ~ f5 ~ ab5 ~ f5 ~ ab5 ~ eb5 ~ ab5 bb5 b5 c6",
  C: "ab5 ~ f5 ~ ab5 ~ f5 ~ ab5 ~ eb5 ~ f5 ~ c5 ~", D: "~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~",
  E: "~@2 [f4,ab4] ~@2 [f4,ab4] ~@2 [eb4,c5] ~@2 [eb4,c5] ~@2 [eb4,c5] ~", // Fm Cm
  F: "~@2 [f4,ab4] ~@2 [f4,ab4] ~@2 [eb4,ab4] ~@2 [eb4,ab4] ~@2 [eb4,ab4] ~", // Fm Ab5
})).s("gm_piano").gain(0.8).pan(0.4)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@36 A B A B A B A B ~@26 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 ~@13
>`.pickRestart({
  A: "~@2 [g4,c5] ~@2 [g4,c5] ~@2 [f4,bb4] ~@2 [f4,bb4] ~@2 [f4,bb4] ~", // C5 Bb5
  B: "~@2 [f4,bb4] ~@2 [f4,bb4] ~@2 [eb4,bb4] ~@2 [eb4,bb4] ~@2 [eb4,bb4] ~", // Bb5 Eb5
})).s("gm_piano").gain(0.48).pan(0.4)

// chords · synth strings 1 · "strings"
const synth_strings_1 = note(`<
  A B A B A B A B A B A ~ A B A B C@4 ~@16 D E D F D E D F ~@4 G@4 ~@18 D E D F D E D F D E D F D E D F ~@12 H@3 ~ D E D
  F D E D F ~@4 G@4 A B A B ~
>`.pickRestart({
  A: "[g4,c5] [eb4,g4]", B: "f4 eb4, ab4", C: "[[g4,c5] [eb4,g4] f4 eb4 [g4,c5] [eb4,g4] f4 eb4, c6, ~ ab4 ~ ab4]/4",
  D: "g5 f6", E: "f5 bb5", F: "bb6 eb6", G: "c6/4", H: "c6/3",
})).s("gm_synth_strings_1").gain(0.48)

// other · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@4 A@8 B C B D B C B D ~@24 B C B D B C B D ~@42 B C B D B C B ~@9 B C B D B C B D ~@5
>`.pickRestart({
  A: "c6/8", B: "g5 ~ c5 ~ g5 ~ c5 ~ g5 ~ c5 ~ bb5 ~ c5 ~", C: "ab5 ~ f5 ~ ab5 ~ f5 ~ ab5 ~ eb5 ~ ab5 bb5 b5 c6",
  D: "ab5 ~ f5 ~ ab5 ~ f5 ~ ab5 ~ eb5 ~ f5 ~ c5 ~",
})).s("gm_string_ensemble_1").gain(0.8)

// bass · synth bass 1 · "techno bass"
const bass = note(`<
  ~@12 A B A B A B A B A B A B A B A B A B A B A B A ~ C D C D C D C D A B A B A B A B ~@2 A B A B A B A B A B A B A B A
  ~ C D C D C D C D C D C D C D C D ~@8 A B A B A B A ~ C D C D C D C D A B A B A B A B ~@5
>`.pickRestart({
  A: "c2 ~ c2@2 c2 ~ c2@2 c2 ~ c2@2 c2 ~ c2@2", B: "f2 ~ f2@2 f2 ~ f2@2 ab2 ~ ab2@2 ab2 ~ ab2@2",
  C: "c2 ~ c3 ~ c2 ~ c3 ~ f2 ~ f3 ~ f2 ~ f3 ~", D: "bb2 ~ bb3 ~ bb2 ~ bb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~",
})).s("gm_synth_bass_1").gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@4 A@7 ~ A@23 ~ A@16 ~@2 A@15 ~ A@7 B A@8 ~@8 A@7 ~ A@16 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.8)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@18 A B ~@23 B ~@6 A B ~@33 B ~@2 C ~@4 D ~@15 B ~@6 A B ~@5>".pickRestart({
  A: "~@12 x!4", B: "x", C: "x!16", D: "~@13 x ~@2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@3 ~ A@23 ~ A@16 ~@2 A@15 ~ A@7 B A@8 ~@8 A@7 ~ A@16 ~@5>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@3 ~ A@23 ~ A@16 ~@2 A@15 ~ A@7 B A@8 ~@8 A@7 ~ A@16 ~@5>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.8)

// drums · splash
const splash = s("cr").struct(`<
  ~@12 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A@2 ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@2 A@2 ~@3 A ~@3 A ~@3 A
  ~@3 A ~@7 A ~@3 A ~@2 A@2 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@12 A@23 ~ A@16 ~@2 A@15 ~ A@7 B A@8 ~@8 A@7 ~ A@16 ~@5>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@8",
})).gain(1.62)

stack(
  piano, piano_soft, synth_strings_1, string_ensemble_1, bass, kick, clap, snare, snare_soft, hihat, open_hat, splash,
  cabasa
)

More by Aqua