Strudelify

Gangsta's Paradise

Rickey C Battle jr

KeyE♭ majorTempo80 bpm
0:00/0:00
// Gangsta's Paradise — Rickey C Battle jr
// 80 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "B♭ Trumpet" trumpet (copy of ch 11 "B♭ Clarinet" clarinet); ch 3 "Mellophone" french horn (copy of ch 12 "Alto Saxophone" alto sax); ch 4 "Horn in F" french horn (copy of ch 12 "Alto Saxophone" alto sax); ch 13 "Tenor Saxophone" tenor sax (copy of ch 6 "Baritone Horn" french horn); ch 8 "Sousaphone" tuba (copy of ch 7 "Tuba" tuba)
// note: Transcription provider: pdmx. https://musescore.com/score/5770651; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 36 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, 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.

// other · flute
const flute = note("<~@2 A B C D E F E G ~@7 H ~@6 I J@2 K@2 D E F E L M C>".pickRestart({
  A: "c6 ~ c6 ~ c6 ~ c6 ~", B: "b5 ~ b5 ~ c6 ~ [d5,g5]@2", C: "[eb5,g5,c6] ~@3",
  D: "~@2 eb6@2 eb6@2 eb6 d6 ~ c6@2 c6@2 ~ c6!2", E: "b5@2 g5 d6@2 eb6@2 ~ d6@2 c6 c6@3 ~@2",
  F: "~@2 eb6@2 f6@2 eb6 d6 ~ c6@2 c6@2 ~ c6!2", G: "[c6,eb6,g6] ~@3", H: "[c6,eb6,ab6] ~@3", I: "~@6 c6!2",
  J: "[eb6@4 ~ f6@2 c6@4 ~@2 c6@2 d6@5 ~ d6@2 d6 eb6@4 c6@2 c6@2]/2",
  K: "[eb6@4 ~ f6@2 c6@4 ~@2 c6@2 d6@5 ~ d6@2 d6 eb6@4 ~@4]/2",
  L: "~@5 [bb4,bb5] [c5,c6] [d5,d6] [eb5,eb6]@4 [eb5,eb6] [d5,d6] [c5,c6] [eb5,eb6]", M: "[d5,d6] ~@2 [eb5,g5]",
})).s("gm_flute").gain(0.5)

// other · flute · soft notes
const flute_soft = note("<[c6 ~ c6 ~ c6 ~ c6 ~] [b5 ~ b5 ~ c6 ~ g5 ~] ~@34>").s("gm_flute").gain(0.2)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@2 A B C D E F G H ~@7 H ~@6 I J@2 K@2 A L A L A M N>".pickRestart({
  A: "c5@4 eb5@2 d5 c5", B: "b4@2 ~ [d5,g5]", C: "[eb5,g5] ~@3", D: "~@2 eb5@2 eb5@2 eb5 d5 ~ c5@2 c5@2 ~ c5!2",
  E: "b4@2 g4 d5@2 eb5@2 ~ d5@2 c5 c5@3 ~@2", F: "~@2 eb5@2 f5@2 eb5 d5 ~ c5@2 c5@2 ~ c5!2",
  G: "b4@2 g4 d5@2 eb5@2 ~@9", H: "[c5,eb5] ~@3", I: "~@6 c5!2",
  J: "[eb5@4 ~ f5@2 c5@4 ~@2 c5@2 d5@5 ~ d5@2 d5 eb5@4 c5@2 c5@2]/2",
  K: "[eb5@4 ~ f5@2 c5@4 ~@2 c5@2 d5@5 ~ d5@2 d5 eb5@4 ~@4]/2", L: "b4@4 c5@2 d5 eb5",
  M: "b4@4 f5 d5 d5@2 c5@4 [c5,eb5]@4", N: "[c5,eb5,g5] ~@3",
})).s("gm_alto_sax").gain(0.5)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note("<[c5@4 eb5@2 d5 c5] [b4@4 c5@2 d5 eb5] ~@34>").s("gm_alto_sax").gain(0.2)

// chords · trombone
const trombone = note("<~@2 A B C A B A B C ~@3 D E D E F ~@7 A B A B A B A B A G H>".pickRestart({
  A: "[ab3,c4,eb4] [f3,ab3,c4]", B: "[f3,b3,d4] [g3,c4,eb4]", C: "[g3,c4,eb4] ~@3",
  D: "[ab3,c4,eb4]@8 ab3 [ab3,c4] ~ [ab3,c4,eb4] [ab3,c4,f4]@3 [ab3,c4,f4]", // Ab Fm
  E: "[g3,b3,d4] [g3,c4,eb4], [bb3,eb4] ~@15", F: "[ab3,c4,eb4] ~@3", G: "[g3,b3,d4] [g3,c4,eb4]", H: "[c4,eb4,g4] ~@3",
})).s("gm_trombone").gain(0.5)

// chords · trombone · soft notes · Ab Fm G Cm
const trombone_soft = note("<[[ab3,c4,eb4] [f3,ab3,c4]] [[g3,b3,d4] [g3,c4,eb4]] ~@34>").s("gm_trombone").gain(0.15)

// other · french horn · "Baritone Horn"
const french_horn = note("<A B C D E F G H G E ~@7 I ~@6 J K L M@2 F G N O P Q R>".pickRestart({
  A: "ab3 f3", B: "b3@4 c4@2 d4 eb4", C: "eb4@2 ~@2 f4 ~ ab4 ~", D: "g4 ~@2 g4", E: "g4 ~@3",
  F: "~@2 eb4@2 eb4@2 eb4 d4 ~ c4@2 c4@2 ~ c4!2", G: "b3@2 g3 d4@2 eb4@2 ~ d4@2 c4 c4@3 ~@2",
  H: "~@2 eb4@2 f4@2 eb4 d4 ~ c4@2 c4@2 ~ c4!2", I: "[ab4,c5] ~@3", J: "~@6 c4!2", K: "eb4@2 ~@2 ab4@2 g4 ~",
  L: "g4@4 ~ g4@2 f4 g4@4 c4@2 c4@2", M: "[eb4@4 ~@4 ab4@4 g4@2 ~ [d4,f4]@5 ~ [d4,g4]@2 [d4,f4] [eb4,g4]@4 ~@4]/2",
  N: "~@2 eb4@2 f4@2 eb4 d4 ~ c4@2 c4@2 ~ [c4,ab4]!2", // Fm
  O: "[b3,g4]@2 [g3,eb4] [d4,g4]@2 [eb4,g4]@2 ~ [d4,g4]@2 [c4,g4] [c4,g4]@3 ~@2", // Em Cm G5 Eb G5 C5
  P: "~@5 [c3,c4] [d3,d4] [eb3,eb4] [f3,f4]@4 [ab3,ab4] [g3,g4] [f3,f4] [ab3,ab4]", Q: "[g3,g4]@4 f4 d4 d4@2 ~@4 g4@4",
  R: "[g4,c5] ~@3", // C5
})).s("gm_french_horn").gain(0.5)

// bass · tuba
const bass = note("<A B A C D E F E F E F E F E F E F E F E F E F E F G H G H E F E F I J D>".pickRestart({
  A: "ab2 f2", B: "b1 c2", C: "g2@2 ~@2 c3 ~ c3 ~", D: "c3 ~@3", E: "ab2@2 ~@3 eb2 g2 c3 bb2@2 ~@2 ab2@2 ~@2",
  F: "g2@2 ~@3 g2 c3 d3 eb3@2 ~@2 d3@2 c3@2", G: "ab2@2 ~@4 eb3 e3 f3@2 ~@2 f3@2 ~@2", H: "g3 ~ g3 ~ c3 ~ d3 eb3",
  I: "ab2@2 ~@4 eb3 e3 f3@2 ~@2 ab3@2 ~@2", J: "g3@2 ~@2 g3 f3 eb3 d3 c3@2 ~@2 c3@2 ~@2",
})).s("gm_tuba").gain(0.5)

stack(flute, flute_soft, alto_sax, alto_sax_soft, trombone, trombone_soft, french_horn, bass)

More by Rickey C Battle jr