Strudelify

Just Got Paid

Johnny Kemp

KeyB minorTempo120 bpm
0:00/0:00
// Just Got Paid — Johnny Kemp
// 120 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  ~ A B@3 A B@3 C D E F C D E F C D E F C D E F C D E F C D E F G H I J K H L M C D E F C D E F C D E F C D E F G H I J
  K H L M C D E F C D E F ~@8 C D E F C D E F C D E F C D E F C D E F C D E F N
>`.pickRestart({
  A: "~@2 d3 ~@3 d3 ~ b2@3 b2@2 ~ b2 ~", B: "~@2 d3 ~@3 d3 ~ b2@2 ~ b2@2 ~ b2 ~",
  C: "b2@2 ~@2 d3@2 ~@2 f#3@2 ~ f#3@2 ~@3", D: "b2@2 ~@2 d3@2 ~@2 f#3 ~@2 f#3@2 ~@3",
  E: "g2@2 ~@2 b2@2 ~@2 d3@2 ~ d3@2 ~@3", F: "a2@2 ~@2 c#3@2 ~@2 e3@2 ~ e3 ~ c#3 e3 c#3",
  G: "e2@3 ~ e2@2 e3 e2 ~ e2 ~ e2 e3@2 e2@2", H: "a2@4 a3@2 a2 a3 ~ a3@2 a2 a3@2 a2 ~",
  I: "b2@3 ~ b2@2 f#2 b2 ~ b2@2 f#2 b2@2 f#2@2", J: "b2@4 c#3@4 d3@4 b2@3 ~", K: "e3@3 ~ e3@2 e2 e3 ~ e3@2 e2 e3@4",
  L: "b2@3 ~ b2@5 f#2 b2@2 f#2 ~ b2 ~", M: "a2 ~ a2 ~ a2 ~ a2 ~", N: "b2 ~@7",
})).s("gm_slap_bass_1").gain(0.72)

// other · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@9 A B C D A B C D A B C D A B C D A B C D A B C D E F G@2 H I J K A B C D A B C D A B C D A B C D E F G@2 H I J K 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 A B C D A B C D L
>`.pickRestart({
  A: "~@2 b4 ~ b4 ~ b4!2 ~ b4 ~ b4!2 ~ [b4,d5,f#5] ~", B: "~@2 b4 ~ b4!2 ~ b4 ~ b4 ~ b4!2 ~ [b4,d5,f#5] ~",
  C: "~@2 b4 ~ b4 ~ b4 ~ e5@6 d5 ~", D: "~@2 b4 ~ b4!2 ~ e5@2 ~ d5 ~ e5 d5 ~@2", E: "[e4,g4,b4,d5,f#5]@15 ~",
  F: "[a3,e4,a4,c#5,e5]", G: "[[b3,b4,d5,f#5]@7 ~, d4 ~@31]/2", H: "d5@3 f#5, [e4,g4,b4]@7 ~", I: "[a3,e4,e5]@3 a5",
  J: "[b3,d4,b4,d5,f#5]@13 ~@3", K: "[a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5] ~",
  L: "[b5,d6,f#6] ~@15, b6 ~@7", // Bm
})).s("gm_epiano2").gain(0.64)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@8 A B C D E F C D G H C D E F C D G H C D E F C D G ~@4 I J ~ K H C D E F C D G H C D E F C D G ~@4 I J ~ K H C D E
  F C D G L ~ M N O ~@2 P Q C D E F C D G H C D E F C D G H C D E F C D G R
>`.pickRestart({
  A: "~@14 [a4,a5] ~", B: "[a5,b5] ~ b3 ~ b3 ~ b3!2 ~ b3 ~ b3!2 ~ [b3,d4,f#4] ~, b4 ~@7",
  C: "~@2 b3 ~ b3!2 ~ b3 ~ b3 ~ b3!2 ~ [b3,d4,f#4] ~", D: "~@2 b3 ~ b3 ~ b3 ~ e4@6 d4 ~",
  E: "~@2 b3 ~ b3!2 ~ e4@2 ~ d4 ~ e4 d4 [c#5,e5,a5] ~", F: "[d5,f#5,b5] ~ b3 ~ b3 ~ b3!2 ~ b3 ~ b3!2 ~ [b3,d4,f#4] ~",
  G: "f#4 ~ b3 ~ [b3,f#4] a4@2 e4@2 ~ d4 ~ e4 d4 [c#5,e5,a5] ~, ~ a4@3 ~ b3 ~@10", // B5 A
  H: "~@2 b3 ~ b3 ~ b3!2 ~ b3 ~ b3!2 ~ [b3,d4,f#4] ~", I: "d4@3 f#4", J: "e4@3 ~",
  K: "[a4,a5] ~ [a4,a5] ~ [a4,a5] ~ a5 ~, ~@12 a4 ~@3", L: "b5 ~@7, b4 ~@15",
  M: "~@2 b4 ~@3 b4 ~ b4 ~ b4 f#4 a4 b4 ~@2", N: "~@2 b4 ~@2 b4 ~@2 b4 ~ b4 a4 b4 ~ [a4,a5] ~", O: "[b4,b5] ~@15",
  P: "[d4,f#4,d5,f#5] ~@3 [d4,e4,g#4,d5,e5,g#5] ~@3 [a3,d4,f#4,a4,d5,f#5] ~@3 [d4,e4,d5,e5]@2 ~@2, [a4,a5]@2 ~@10 [g#4,g#5] ~@3", // D E7 D Dsus2 A G#
  Q: "[b4,f#5,b5]@2 b3 ~ b3 ~ b3!2 ~ b3 ~ b3!2 ~ [b3,d4,f#4] ~, a#5 ~@15", R: "[b4,d5,f#5] ~@15, b5 ~@7",
})).s("gm_synth_brass_1").gain(0.72)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~ A@4 B@4 ~@24 C D E@2 F G H I ~@16 C D E@2 F G H I ~@41>".pickRestart({
  A: "[a5@31 ~@25 b5@6 ~@2, [b4,d5]@61 ~@3, ~@32 g#5@29 ~@3]/4", // Bm
  B: "[~@24 e5@4 ~@4 e5@5 ~@19 a#5@6 ~@2, [g4,b4,d5,f#5]@7 d5@4 d5@3 ~@2, ~@16 [a4,b4,c#5]@7 ~ [f#4,a#4,e5]@7 ~]/4", // Gmaj7 A F#7
  C: "[e4,g4,b4,d5,f#5]@15 ~", D: "[a3,e4,a4,c#5,e5]", E: "[[b3,b4,d5,f#5]@7 ~, d4 ~@31]/2",
  F: "d5@3 f#5, [e4,g4,b4]@7 ~", G: "[a3,e4,e5]@7 ~", H: "[b3,d4,b4,d5,f#5]@13 ~@3",
  I: "[a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5] ~ [a3,e4,a4,c#5,e5] ~", // A
})).s("gm_string_ensemble_2").gain(0.18)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!29 [x!2 ~ x] [x!4]!74 x>").gain(0.71)

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

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~ x]!22 [~ x ~@2] [~ x ~ x]!39 [~ x ~@2] [~ x ~ x]!33 ~>").gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@40 A ~@23 A ~@31 A ~@7 A B>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B C B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", C: "x!6 ~ x",
})).gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct("<~@40 A ~@23 A ~@31 A ~@7 A ~>".pickRestart({
  A: "~ x!2 ~",
})).gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<~@40 A ~@23 A ~@31 A ~@7 A ~>".pickRestart({
  A: "x",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@7 A ~@15 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@15 A ~@7 A ~@7 A ~@8>".pickRestart({
  A: "x",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@2 x!2 ~@12]!104 ~>").gain(0.71)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@9 x ~@6", C: "x",
})).gain(8.39)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B D B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x!16", B: "x!9 ~ x!6", C: "x!5 ~ x!3 ~ x!6", D: "x!5 ~ x!6 ~ x!3",
})).gain(1.45)

stack(
  bass, epiano2, synth_brass_1, string_ensemble_2, kick, snare, clap, low_tom, hihat, mid_tom, high_tom, crash,
  tambourine, vibraslap, cabasa
)