Strudelify

C U When U Get There

Coolio

KeyE♭ majorTempo90 bpm
0:00/0:00
// C U When U Get There — Coolio
// 90 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "chords" cello (copy of ch 2 "chords" synth bass 2)
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · synth bass 2 · "chords"
const bass = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@4 A
  B C D A B C D A B C D A B C D A B C D A B C
>`.pickRestart({
  A: "eb3 bb2", B: "c3 g2", C: "ab2 eb2", D: "ab2 bb2",
})).s("gm_synth_bass_2").gain(0.35)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  A B A C A D E F ~@8 G H I J G H I K L M N O L P Q R ~@8 G H I J G H I K L M N O L P Q R G H I J ~@23
>`.pickRestart({
  A: "~ g5 f5 g5 bb5 ab5 g5 ab5", B: "~ bb5 ab5 bb5 ~ ab5 g5 ab5", C: "~ bb5 ab5 bb5 ab5 g5 f5 g5",
  D: "~@2 bb5@2 ab5@2 bb5 ~@3 ab5@2 g5@2 ab5@2", E: "~@2 g5@2 f5@2 g5@2 bb5@2 ~ g5@2 ~ ab5@2, ~@5 ab5 ~@2",
  F: "~@2 bb5@2 ~ bb5@2 ~@3 g5@2 f5@2 g5 ~, ~@2 ab5 ~@5", G: "[eb3,eb4] [bb2,bb3]", H: "[c3,c4] [g2,g3]",
  I: "[ab2,ab3] [eb2,eb3]", J: "[ab2,ab3] [bb2,bb3]", K: "~ g5 f5 g5 bb5 ab5 g5 ab5, [ab2,ab3] [bb2,bb3]",
  L: "~ g5 f5 g5 bb5 ab5 g5 ab5, [eb3,eb4] [bb2,bb3]", M: "~ bb5 ab5 bb5 ~ ab5 g5 ab5, [c3,c4] [g2,g3]",
  N: "~ g5 f5 g5 bb5 ab5 g5 ab5, [ab2,ab3] [eb2,eb3]", // Ab Eb
  O: "~@2 bb5@2 ~ bb5@2 ~ ab5@2 g5@2 f5@2 g5@2, [ab2,ab3] [bb2,bb3], ~@2 ab5 ~@5", // Ab Bb
  P: "~@2 bb5@2 ab5@2 bb5 ~@3 ab5@2 g5@2 ab5@2, [c3,c4] [g2,g3]", // C G
  Q: "~@2 g5@2 f5@2 g5@2 bb5@2 ~ g5@2 ~ ab5@2, [ab2,ab3] [eb2,eb3], ~@5 ab5 ~@2", // Ab Eb
  R: "~@2 bb5@2 ~ bb5@2 ~@3 g5@2 f5@2 g5 ~, [ab2,ab3] [bb2,bb3], ~@2 ab5 ~@5", // Ab Bb
})).s("gm_string_ensemble_1").gain(0.44)

// chords · string ensemble 1 · "strings" · soft notes
const string_ensemble_1_soft = note(`<
  ~@75
  [~ g5 f5 g5 bb5 ab5 g5 ab5]!2
  [~ bb5 ab5 bb5 ~ ab5 g5 ab5]
  [~ g5 f5 g5 bb5 ab5 g5 ab5]
  [~@2 bb5@2 ~ bb5@2 ~ ab5@2 g5@2 f5@2 g5@2, ~@2 ab5 ~@5]
  [~ g5 f5 g5 bb5 ab5 g5 ab5]
  [~@2 bb5@2 ab5@2 bb5 ~@3 ab5@2 g5@2 ab5@2]
  [~@2 g5@2 f5@2 g5@2 bb5@2 ~ g5@2 ~ ab5@2, ~@5 ab5 ~@2]
>`).s("gm_string_ensemble_1").gain(0.24)

// other · acoustic guitar nylon · "gutiar"
const acoustic_guitar_nylon = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@19 D A B C D A B C D ~@7
>`.pickRestart({
  A: "eb4 g4 bb4 ab4", B: "g4 eb4 g4 f4", C: "eb4 c4 eb4 bb4", D: "c4@2 eb4@2 bb4 ab4 g4 f4",
})).s("gm_acoustic_guitar_nylon").gain(0.8)

// other · string ensemble 1 · "violin"
const string_ensemble_1_2 = note(`<
  ~@44 A B C D ~@8 E F G H I J K L I J K L M N O P Q R P S T F G H E F G
>`.pickRestart({
  A: "~ g4 ab4 g4 ~ f5 g5 f5", B: "~ g4 eb4 c5 ~ bb3 ab3 bb3", C: "~ c5 d5 c5 ~ bb3 ab3 bb3",
  D: "~ c5 bb4 c5 ~ d4 c4 d4", E: "bb5@2 g5 ab5 bb5@2 g5 ab5 bb5 bb4 c5 d5 eb5 f5 g5 ab5",
  F: "g5@2 eb5 f5 g5@2 g4 ab4 bb4 c5 bb4 ab4 bb4 g4 ab4 bb4", G: "ab4@2 c5 bb4 ab4@2 g4 f4 g4 f4 eb4 f4 g4 ab4 bb4 c5",
  H: "ab4@2 c5 bb4 c5@2 d5 eb5 bb4 c5 d5 eb5 f5 g5 ab5 bb5", I: "eb5 ~ g4 ~ ab4 ~ g4 ~ bb4 ~ f5 ~ g5 ~ f5 ~",
  J: "c5 ~ g4 ~ eb4 ~ c5 ~ g4 ~ bb3 ~ ab3 ~ bb3 ~", K: "ab4 ~ c5 ~ d5 ~ c5 ~ eb4 ~ bb3 ~ ab3 ~ bb3 ~",
  L: "ab4 ~ c5 ~ bb4 ~ c5 ~ bb4 ~ d4 ~ c4 ~ d4 ~", M: "eb5@2 ~ bb5!2 c6 bb5 ab5", N: "g5@2 ~ g5!2 ab5 g5 f5",
  O: "eb5 db5 c5 db5 eb5@4", P: "eb5 db5 c5 db5 bb4@4", Q: "bb5@2 ~ bb5!2 c6 bb5 ab5", R: "g5@3 g5!2 ab5 g5 f5",
  S: "ab4@2 eb5@2 d5@3 d5", T: "bb5@2 g5 ab5 bb5@2 g5 ab5 bb5 bb4 c5 d5 eb5 f5 g5 ab5, eb5 ~@3",
})).s("gm_string_ensemble_1").gain(0.64)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!2 [x!2 ~ x!2 ~@3] [x ~@2 x!3 ~@2] [x ~@2 x!2 ~@3]!79>").gain(0.8)

// drums · clap
const clap = s("cp").struct("~ x ~ x").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("x!8").gain(0.8)

stack(bass, string_ensemble_1, string_ensemble_1_soft, acoustic_guitar_nylon, string_ensemble_1_2, kick, clap, hihat)

More by Coolio