Strudelify
Gangsta's Paradise (Dangerous Minds) cover art

1995 · Gangsta's Paradise

Gangsta's Paradise (Dangerous Minds)

Coolio

KeyC minorTempo80 bpm
0:00/0:00
// Gangsta's Paradise (Dangerous Minds) — Coolio
// 80 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/4)

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

// bass · acoustic bass · "fretless"
const bass = note(`<
  A B A B C D C D A B A B A B A B C D C D C D C D A B A ~ A B A B A B A B A B A B C D C D C D C D A B A B A B A B C D C
  D C D C D C D C D C D C D C D C D ~@4
>`.pickRestart({
  A: "ab2@7 g2 f2@8", B: "g2@7 f2 c2@8", C: "ab2@5 eb2 ab2 c3 bb2@4 ab2@4", D: "g2@5 c2 g2 c3 eb3@4 d3@2 c3@2",
})).s("gm_acoustic_bass").gain(0.56)

// other · string ensemble 2 · "choir aahs"
const string_ensemble_2 = note(`<
  ~@16 A B A C A B A C ~@16 A B A C A B A C ~@8 A B A C A B A C A B A C A B A C A B A C A B A C
>`.pickRestart({
  A: "[c4,c5,c6]@4 [eb4,eb5,eb6]@2 [d4,d5,d6] [c4,c5,c6]", B: "[b3,b4,b5]@4 [c4,c5,c6]@2 [d4,d5,d6] [eb4,eb5,eb6]",
  C: "[b3,b4,b5]@4 [c4,c5,c6]@3 ~", // B C
})).s("gm_string_ensemble_2").gain(0.07)

// bass · acoustic bass · "fretless"
const bass_2 = note(`<
  A B A B C D C D A B A B A B A B C D C D C D C D A B A ~ A B A B A B A B A B A B C D C D C D C D A B A B A B A B C D C
  D C D C D C D C D C D C D C D C D ~@4
>`.pickRestart({
  A: "ab1@7 g1 f1@8", B: "g1@7 f1 c1@8", C: "ab1@5 eb1 ab1 c2 bb1@4 ab1@4", D: "g1@5 c1 g1 c2 eb2@4 d2@2 c2@2",
})).s("gm_acoustic_bass").gain(0.4)

// other · string ensemble 1 · "aahs"
const string_ensemble_1 = note("<~@76 [ab2@7 g2 f2@8] [g2@7 f2 c2@8] [ab2@7 g2 f2@7 ~] [g2@7 f2 c2@7 ~]>")
  .s("gm_string_ensemble_1").gain(0.4)

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

// drums · rim
const rim = s("rim").struct("<[x!4]!4 ~@76>").gain(0.14)

// drums · snare
const snare = s("sd").struct("<~@3 A B@3 A B@7 A B@19 A ~@3 A B@11 A B@3 A B@20 ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.25)

// drums · clap
const clap = s("cp").struct("<~@3 A B@3 A B@7 A B@19 A ~@3 A B@11 A B@3 A B@20 ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.29)

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

// drums · shaker
const shaker = s("sh").struct("<[x!8]!76 ~@4>").gain(0.29)

stack(bass, string_ensemble_2, bass_2, string_ensemble_1, kick, rim, snare, clap, open_hat, shaker)

More by Coolio