Strudelify

Creep

TLC

KeyE♭ majorTempo93 bpm
0:00/0:00
// Creep — TLC
// 93 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 105 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93/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 · rock organ · "Background"
const rock_organ = note(`<
  ~@27 A B C D@2 E F G@2 H ~@7 I J ~@5 A B C K@2 E F G@2 B C K@2 E F G@2 L ~@10 A B C K@2 E F G@2 B C K@2 E F G@2 B C
  K@2 E F G@2 L
>`.pickRestart({
  A: "~@18 [g4,bb4,eb5]@3 [ab4,f5] ~@2, ~@21 c5@2 ~", // Eb Db
  B: "[c5,eb5,g5]@2 ~@7 [ab4,c5,f5]@6 [g4,bb4,eb5]@5 ~ [g4,eb5]@2 ~, ~@9 [bb4,b4,e5] ~@11 bb4 ~@2", // Cm Fm Eb Cm E
  C: "[g4,c5]@2 ~ [bb4,eb5]@2 ~ [ab4,bb4,eb5]@4 [ab4,bb4,eb5] ~ [ab4,c5,f5]@2 ~ [ab4,bb4,eb5]@3 ~@3 [ab4,bb4]@2 ~, eb4 ~@2 ab4 ~@8 [bb4,eb5] ~@8 eb5 ~@2", // C5 Eb5 Absus2 Fm Absus2 Eb5
  D: "[[eb4,g4,c5]@2 ~ [g4,eb5] ~@2 [g4,eb5] ~@2 [g4,bb4,eb5] ~@2 [ab4,c5,f5]@3 [bb4,eb5] ~@2 [eb4,g4,c5] ~@2 [g4,bb4,b4,eb5,e5] ~@5 [bb4,eb5]@11 ~@4 [g4,bb4,eb5]@3 [ab4,c5,f5] ~@2, ~@3 bb4@2 ~ bb4@2 ~@4 [bb4,b4,e5] ~@2 g4@2 ~@4 [ab4,c5,f5]@6 g4@8 ~@13]/2", // Cm Eb Fm Eb5 Cm Eb Eb5 Eb …
  E: "[c5,eb5,g5]@2 ~@7 [bb4,b4,eb5,e5] ~@5 [g4,bb4,eb5]@5 ~ [bb4,eb5] ~@2, ~@9 [ab4,c5,f5]@6 ~@6 g4@2 ~", // Cm Emaj7 Eb Eb5 Fm
  F: "[eb4,g4,c5]@3 [ab4,bb4,eb5]!2 ~ [ab4,bb4,eb5]@2 ~ [ab4,bb4]@2 ~ [bb4,b4,eb5,e5] ~@2 [ab4,bb4,eb5]@3 eb5 ~@2 [bb4,eb5] ~@2, ~@9 eb5 ~@2 [ab4,c5,f5]@2 ~@7 ab4@2 ~", // Cm Absus2 Emaj7 Absus2 Eb5 Fm
  G: "[[eb4,g4,c5]@3 [g4,eb5] ~@2 [g4,bb4,eb5] ~@2 [g4,bb4,eb5] ~@2 [ab4,c5,f5]@3 [bb4,eb5] ~@2 [eb4,g4,c5] ~@2 [g4,bb4,b4,e5] ~@5 [g4,bb4,eb5]@3 eb5 ~@2 [g4,bb4,eb5]@6 [ab4,c5,f5] ~@2 [g4,bb4,eb5]@3 [ab4,c5,f5] ~@2, ~@3 bb4@2 ~@7 [b4,eb5,e5] ~@2 g4@2 ~@4 [ab4,c5,f5]@5 ~@22]/2", // Cm Eb Fm Eb5 Cm Em Eb Fm …
  H: "[c5,eb5] ~@11, g5 ~@23", // Cm
  I: "eb5@2 ~ [eb4,eb5]@2 ~ [eb4,eb5]@2 ~ eb5@2 ~ [eb4,eb5]@2 ~ [eb4,eb5]@2 ~ [eb4,eb5]@2 ~ eb5@2 ~, eb4 ~@8 eb4 ~@11 eb4 ~@2", // Eb
  J: "[f4,ab4,eb5]@2 ~ [f4,ab4,eb5] ~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5] ~@2 [f4,ab4,eb5]@2 ~ [g4,f5]@2 ~ [eb4,g4,c5,eb5]@3 ~@3", // Fm7 G7 Cm
  K: "[[eb4,g4,c5]@2 ~ [g4,bb4]@2 ~ [g4,eb5] ~@2 [g4,bb4,eb5] ~@2 [ab4,c5,f5]@3 [bb4,eb5] ~@2 [eb4,g4,c5] ~@2 [g4,bb4,b4,eb5,e5] ~@5 [bb4,eb5]@11 ~@4 [g4,bb4,eb5]@3 [ab4,c5,f5] ~@2, ~@3 eb5 ~@2 bb4@2 ~@4 [bb4,b4,e5] ~@2 g4@2 ~@4 [ab4,c5,f5]@6 g4@8 ~@13]/2", // Cm Gm Cm Eb Fm Eb5 Cm Eb …
  L: "[c5,eb5,g5] ~@11", // Cm
})).s("gm_rock_organ").gain(0.26)

// other · trumpet
const trumpet = note(`<
  A B C D A B@2 E A B@2 E F ~@3 F ~@3 F ~@3 F ~@3 A B@2 E A B@2 E F ~@3 F ~@3 F ~@3 F ~@3 A B@2 E A B@2 E A B@2 E A B@2
  E A B C D F ~@3 F ~@3 A B@2 E A B@2 E A B@2 E A B@2 E A B@2 E A B@2 E F
>`.pickRestart({
  A: "eb5@4 ~@2 eb5@4 ~@11 c5 ~@2", B: "eb5@4 ~@2 eb5@3 ~@12 c5 ~@2", C: "eb5@4 ~@17 c5 ~@2", D: "eb5 ~@5",
  E: "eb5@4 ~@2 eb5@3 ~@15", F: "eb5@2 ~ eb5@2 ~@7",
})).s("gm_trumpet").gain(0.35)

// chords · piano
const piano = note(`<
  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 ~@9
>`.pickRestart({
  A: "[c3,g3,bb3,eb4,g4]@7 ~@2 [c3,g3,bb3,eb4,g4]@14 ~", B: "[f3,ab3,bb3,eb4,f4]@8 ~ [f3,ab3,bb3,eb4,f4]@13 ~@2",
})).s("gm_piano").gain(0.2)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@4 A@2 B C A@2 B C ~@16 A@2 B C A@2 B C ~@16 A@2 B C A@2 B C A@2 B C A@2 B C ~@12 A@2 B C A@2 B C A@2 B C A@2 B C ~@9
>`.pickRestart({
  A: "[[g4,g5]@7 [f4,f5]@4 [g4,g5]@5]/2", B: "[ab4,ab5]@2 [f4,f5] [g4,g5]@4 [c4,c5]",
  C: "~ [eb4,eb5]@8 [d4,d5]@9 [eb4,eb5]@3 [f4,f5]@2 ~", // Eb D Eb F
})).s("gm_string_ensemble_1").gain(0.19)

// other · electric guitar jazz · "J. Guitar"
const electric_guitar_jazz = note("<~@4 A@8 ~ A@23 ~ A@31 ~@4 A@24 ~@9>".pickRestart({
  A: "[c4,c5]@2 ~@3 [bb3,bb4] ~@3 [c4,c5]@2 ~@13", // C Bb C
})).s("gm_electric_guitar_jazz").gain(0.15)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2
  C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C D
>`.pickRestart({
  A: "c2@7 ~@2 c2@9 ~@2 c2 eb2 ~ c2", B: "[f2@7 ~@2 f2@11 ~@4 c2@6 ~@3 c2@9 ~@2 c2 eb2 c2 ~, ~@23 g1@2 ~@23]/2",
  C: "eb2@8 ~ f2@8 ~ f2 g2@4 f2", D: "c2@7 ~@17",
})).s("gm_acoustic_bass").gain(0.29)

// drums · kick
const kick = s("bd").struct("<~@3 A B@8 A B@7 ~ C B@14 A B@7 ~ C B@22 D@4 E B@31 F>".pickRestart({
  A: "~@23 x", B: "x ~@8 x ~@4 x!2 ~@7 x", C: "~@9 x ~@4 x!2 ~@7 x", D: "x ~@2 x ~ x ~@2", E: "x ~@22 x", F: "x",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct("<~@3 [~@3 x] [~ x ~ x]!16 ~ [~ x ~ x]!23 ~ [~ x ~ x]!59 ~>").gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A B C@2 D B C@2 D E C@2 D B C@2 D ~ F C D B C@2 D B C@2 D B C@2 D E C@2 D B C@2 D ~ F C D B C@2 D B C@2 D B C@2 D
  B C@2 D B C@2 D ~@3 A G C@2 D B C@2 D B C@2 D B C@2 D B C@2 D B C@2 D B C@2 D B C@2 D H
>`.pickRestart({
  A: "~@6 x!2", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
  C: "x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x", D: "x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
  E: "x!3 ~@3 x!2", F: "~@6 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x", G: "~@18 x ~@2 x ~ x", H: "x",
})).gain(0.39)

// drums · ride
const ride = s("rd").struct("<~@4 A@8 B ~@15 A@8 B ~@15 A@16 C@4 B ~@7 A@16 ~@9>".pickRestart({
  A: "x!8", B: "x!3 ~@5", C: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
})).gain(0.23)

stack(rock_organ, trumpet, piano, string_ensemble_1, electric_guitar_jazz, bass, kick, snare, hihat, ride)

More by TLC