Strudelify

Mo Money Mo Problems

The Notorious B.I.G.

KeyE majorTempo104 bpm
0:00/0:00
// Mo Money Mo Problems — The Notorious B.I.G.
// 104 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar1.
setcpm(104/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.

// bass · acoustic bass · "Bass"
const bass = note(`<
  A ~@3 B C D E B C F@2 G C@2 E B C@2 E B C D E B C F@2 G C@2 E B C@2 E B C D E B C F@2 G C@2 E B C@2 E B C D E B C F@2
  G C@2 E B C@2 E B C D E B C F@2 G C@2 E B C@2 E B C D E B C F@2 G C@2 E B C@2 E B C D E B C F@2 G C@2 E
>`.pickRestart({
  A: "c#2 ~@7", B: "c#2@2 ~@6 c#2 ~@2 g#1 ~@2 f#1 ~", C: "~@8 e1 ~@2 g#1 ~@2 a1 ~", D: "~@8 c#2 ~@2 b1 ~@2 a1 ~",
  E: "~@2 g#1 b1", F: "[~@8 e1 ~@2 g#1 ~@2 a1@8 ~@2 g#1@4 b1@4]/2", G: "c#2@2 d#2@2 e2@2 d#2@2 c#2 ~@2 g#1 ~@2 f#1 ~",
})).s("gm_acoustic_bass").gain(0.41)

// chords · piano
const piano = note(`<
  A ~@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 ~@7 B ~@3 B
  ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3
>`.pickRestart({
  A: "~@2 [c#5,d#5,e5,f#5] [g#5,a#5,b5,c#6,d#6] [e6,f#6,g#6,a#6,b6] d#7@2 ~@9, ~@5 c#7 ~@10", // D#m7 G#m E
  B: "~ c#5 [d#5,e5,f#5] [g#5,a#5,b5,c#6,d#6] [e6,f#6,g#6,a#6,b6,c#7] d#7@2 ~@9", // D#m G#m C#m7
})).s("gm_piano").gain(0.26)

// chords · electric guitar clean · "Guitar1"
const electric_guitar_clean = 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 ~@3 A ~@3 A ~@7 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "~@8 d#4 ~@2 d#4 ~@4",
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · electric guitar clean · "Guitar2"
const electric_guitar_clean_2 = 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 ~ 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 ~@2 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
>`.pickRestart({
  A: "[e4,g#4,b4] ~ [e4,g#4,b4]!3 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~@2 [e4,g#4,b4] ~@2 [a3,c#4,f#4] ~", // E F#m
  B: "~@2 [a3,c#4,f#4]!3 ~ [a3,c#4,f#4] ~ [b3,c#4,e4,g#4] ~@2 [b3,e4,g#4] ~@2 [c#4,e4,a4] ~", // F#m C#m7 E A
  C: "~@2 [c#4,e4,a4]!3 ~ [c#4,e4,a4] ~ [b3,e4,g#4] ~@2 [b3,e4,g#4] ~@2 [c#4,e4,a4] ~", // A E A
  D: "~@2 [c#4,e4,a4]!3 ~ [c#4,e4,a4] ~@9", // A
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · electric guitar clean · "Guitar3"
const electric_guitar_clean_3 = 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 ~ 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 ~@2 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 ~
>`.pickRestart({
  A: "~@2 [e4,g#4,b4]@3 [e4,g#4,b4]!3 ~@2 [e4,g#4,b4]!2 ~@2 [a3,c#4,f#4] ~", // E F#m
  B: "~ [a3,c#4,f#4] ~ [a3,c#4,f#4] ~ [a3,c#4,f#4] ~@3 [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] [c#4,e4,a4] ~", // F#m E A
  C: "~ [c#4,e4,a4] ~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2 [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] [c#4,e4,a4] ~", // A E A
  D: "~ [c#4,e4,a4] ~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@9", // A
})).s("gm_electric_guitar_clean").gain(0.15)

// other · trumpet
const trumpet = note(`<
  ~@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 ~@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
>`.pickRestart({
  A: "~@2 g#4@11 ~@3",
})).s("gm_trumpet").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C
  ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~
>`.pickRestart({
  A: "x ~@7 x ~@2 x ~@2 x ~", B: "~@8 x ~@2 x ~@2 x ~", C: "~@2 x ~@5 x ~@2 x ~@2 x ~",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 ~@5
>`.pickRestart({
  A: "~ x ~@2", B: "~@2 x ~ x!2 ~@2 x!4 ~@2 x!2",
})).gain(0.41)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@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 ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B C@3 B
>`.pickRestart({
  A: "~@3 x", B: "~@2 x ~ x!2 ~@2 x!5 ~ x!2", C: "~ x ~@2",
})).gain(0.26)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@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 ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  B ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@8
>`.pickRestart({
  A: "~@5 x ~@2 x!5 ~ x!2", B: "~@5 x ~@10",
})).gain(0.36)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@107 [~@5 x ~@2 x!5 ~ x!2] ~@3 [~@5 x ~@2 x!5 ~ x!2]>").gain(0.2)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 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 A
  B C D A B C D A B C D A B C D A B C E 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
>`.pickRestart({
  A: "x!3 ~ x ~ x!2 ~ x!7", B: "x!3 ~ x ~ x!10", C: "x ~ x ~ x ~ x!7 ~ x!2", D: "x!5 ~ x!10", E: "x!5 ~ x!2 ~@8",
})).gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@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 ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@8
>`.pickRestart({
  A: "~ x!2 ~@5",
})).gain(0.36)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@107 [~ x!2 ~@5] ~@3 [~ x!2 ~@5]>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 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 ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.31)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@11 B C ~@2 D>".pickRestart({
  A: "x!2 ~@2", B: "~@3 x", C: "x", D: "~@2 x!2",
})).gain(0.15)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~@4 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 ~
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "x",
})).gain(1.78)

stack(
  bass, piano, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3, trumpet, kick, snare,
  snare_soft, low_tom, low_tom_soft, hihat, mid_tom, mid_tom_soft, open_hat, crash, crash_soft, triangle
)

More by The Notorious B.I.G.