Strudelify

1, 2, 3, 4 (Sumpin' New)

Coolio

KeyD minorTempo115 bpm
0:00/0:00
// 1, 2, 3, 4 (Sumpin' New) — Coolio
// 115 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 "TENOR SAX" tenor sax (copy of ch 7 "TRUMPET" trumpet)
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · "A.PIANO 3"
const piano = note(`<
  ~ A@2 B@2 A@2 B@2 ~@8 C@2 D@2 C@2 D@2 A@2 B@2 A@2 B@2 ~@8 C@2 D@2 C@2 D@2 A@2 B@2 A@2 B@2 ~@12 E@2 D@2 A@2 B@2 A@2 B@2
  ~@9
>`.pickRestart({
  A: "[[c4,d4,f4,a4]@7 ~ [c4,d4,e4,g4]@7 [d4,f4,a4,c5]@8 ~ [c4,d4,e4,g4]@7 ~]/2", // Dm7 C Dm7 C
  B: "[[c4,d4,f4,a4]@7 ~ [c4,d4,e4,g4]@7 [bb3,d4,f4,a4,c5]@15 ~@2]/2", // Dm7 C Bbmaj7
  C: "[[c4,d4,f4,a4]@22 ~@4 a4@3 f4@3, ~@24 [c4,d4,e4,g4]@7 ~]/2", D: "[[bb3,d4,f4,a4,c5]@15 ~]/2",
  E: "[[c4,d4,f4,a4]@22 ~@2 [c4,d4,e4,g4]@7 ~]/2", // Dm7 C
})).s("gm_piano").gain(0.22)

// bass · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  A B C D E B C D F B C D E B C D G B C D H B C D F B C D E B C D F B C D E B C D G B C D H B C ~@2 B C D E B C D F B C
  D E B C D G ~@4 B C D F B C D E B C D F B C D E ~@5
>`.pickRestart({
  A: "f2 bb1 c2 db1@9 ~@4", B: "d1@2 ~@2 d1@2 ~@2 d1@2 ~@5 d1", C: "d1 ~ d1@2 ~ d1 ~ d1 d1@3 ~@5",
  D: "g1@2 ~@2 g1@2 ~@2 g1@2 ~@5 g1", E: "g1 ~ g1@2 ~ g1 ~ g1 g2@4 f2@4", F: "g1 ~ g1@2 ~ g1 ~ g1!2 ~ eb3 ~ e3@2 ~@2",
  G: "g1 ~ g1@2 ~ g1 ~ g1 g1@2 f2 ~ g2 f2@3", H: "g1 ~ g1@2 ~ g1 ~ g1!2 ~ e2@3 f2@3",
})).s("gm_slap_bass_1").gain(0.4)

// bass · slap bass 1 · "SLAPBASS 1" · soft notes
const bass_soft = note(`<
  ~@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@3 A ~ B ~ A ~ B ~ A ~
  B ~ A ~ B ~@5 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@5
>`.pickRestart({
  A: "~@4 d1 ~@11", B: "~@4 g1 ~@11",
})).s("gm_slap_bass_1").gain(0.25)

// chords · electric guitar clean · "+CHORUS GT"
const electric_guitar_clean = note(`<
  ~ A B C D A B C D ~@16 A B C D A B C D ~@16 A B C D A B C D ~@16 A B C D A B C D ~@9
>`.pickRestart({
  A: "[d4,f4,a4] ~@3 [d4,f4,a4] ~@3 [d4,f4,a4] ~@6 [d4,f4,a4]", // Dm
  B: "~@2 [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~", // Dm
  C: "[bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@6 [bb3,d4,g4]", // Gm
  D: "[bb3,d4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~", // Bb Gm
})).s("gm_electric_guitar_clean").gain(0.19).pan(0.3)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A
  ~@8
>`.pickRestart({
  A: "d5 ~@3",
})).s("gm_brass_section").gain(0.45).pan(0.6)

// other · trumpet
const trumpet = note("<~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~@23 A ~ A ~@18>".pickRestart({
  A: "~@8 f4!2 d4!2 ~@4",
})).s("gm_trumpet").gain(0.3).pan(0.6)

// other · baritone sax · "BARITONSAX"
const baritone_sax = note("<~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~@23 A ~ A ~@18>".pickRestart({
  A: "~@8 f3!2 d3!2 ~@4",
})).s("gm_baritone_sax").gain(0.3)

// other · lead 1 square · "+SINE WAVE"
const lead_1_square = note(`<
  ~@4 A ~@3 B ~@3 A ~@3 A ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 A ~@3 A ~@7 A ~@3 B ~@3 A ~@3 A ~@7 B ~@3 A ~@3 B ~@3 A ~@5
>`.pickRestart({
  A: "~@4 d4@5 ~@7, ~@4 d6 ~@11", B: "~@4 d4@5 ~@3 d4@3 ~, ~@4 d6 ~@7 d6 ~@3",
})).s("gm_lead_1_square").gain(0.19).pan(0.4)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<A B ~@22 A B ~@22 A B ~@22 C B ~@16>".pickRestart({
  A: "~@11 [b3,c4,d4,e4,f4] [f4,g4,a4] [f3,g3,a3,b3,c4,d4,e4] [a2,b2,c3,d3,e3] [e2,f2,g2]", B: "[c2,d2] ~@15",
  C: "~@11 [b3,c4,d4,e4,f4] [e4,f4,g4,a4] [f3,g3,a3,b3,c4,d4] [a2,b2,c3,d3,e3] [e2,f2,g2]", // Bdim Fmaj7 Dm7 Am Em
})).s("gm_lead_2_sawtooth").gain(0.19).pan(0.7)

// chords · lead 2 sawtooth · "SAW WAVE" · soft notes · Em
const lead_2_sawtooth_soft = note(`<
  [~@10 [e3,f3,g3] a3 ~@4]
  ~@23
  [~@10 [e3,f3,g3] a3 ~@4]
  ~@23
  [~@10 [e3,f3,g3] a3 ~@4]
  ~@23
  [~@10 [e3,f3,g3] a3 ~@4]
  ~@17
>`).s("gm_lead_2_sawtooth").gain(0.1).pan(0.7)

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

// drums · clap
const clap = s("cp").struct("<[~@3 x] [~ x ~ x]!88 ~>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<A B@7 C B@15 C B@7 C B@23 C B@15 C B@7 C B@8 ~>".pickRestart({
  A: "x!3 ~@13", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@15 A ~@7 A ~@23 A ~@15 A ~@7 A ~@9>".pickRestart({
  A: "~@5 x!2 ~",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!88 ~>").gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  A B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2 C
  B ~@3 B ~@3 B ~@2 C B
>`.pickRestart({
  A: "~@3 x ~@12", B: "x", C: "~@11 x ~@4",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!8]!88 ~>").gain(0.32)

stack(
  piano, bass, bass_soft, electric_guitar_clean, brass_section, trumpet, baritone_sax, lead_1_square, lead_2_sawtooth,
  lead_2_sawtooth_soft, kick, clap, snare, snare_soft, hihat, crash, tambourine
)

More by Coolio