Strudelify

Dirty Cash (Dime and Dollar mix)

Adventures of Stevie V.

KeyC minorTempo124 bpm
0:00/0:00
// Dirty Cash (Dime and Dollar mix) — Adventures of Stevie V.
// 124 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/4)

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

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 ~@4 A@4 ~@2 A@10 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2
>`.pickRestart({
  A: "c3@2 ~@2 eb3@2 ~ eb3 f3 ~ f3 ~ g3 c3 ~@2", B: "b2@2 ~@2 d3@2 ~ d3 f3 ~ f3 ~ g3 b2 ~@2",
})).s("gm_acoustic_bass").gain(0.48)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~@22 A ~@3 B ~@19 A ~@3 B ~@45 A ~@3 B ~@19 A ~@3 B ~@9>".pickRestart({
  A: "~@6 eb5@2 f5@4 g5@3 ~", B: "~@3 eb5 f5@2 g5@2",
})).s("gm_tubular_bells").gain(0.48)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@20 A B ~@2 A B ~@18 A B ~@2 A B ~@44 A B ~@2 A B ~@18 A B ~@2 A B ~@10>".pickRestart({
  A: "~@4 [gb4,c5] ~ bb4@2 [g4,c5]@2 ~@6, ~@2 eb5 ~@5, ~@5 g4@2 ~ eb4 ~@7", // Gbdim C5
  B: "~@4 [g4,c5,eb5]@2 [d5,f5] ~ [g4,c5,eb5,g5]@2 ~@6", // Cm Dm Cm
})).s("gm_brass_section").gain(0.52)

// drums · kick
const kick = s("bd").struct("<[x!4]!68 [x!2] [x!2 ~ x] [x!4]!64>").gain(0.64)

// drums · rim
const rim = s("rim").struct(`<
  A@3 B A@7 B A@11 C A@3 C A@7 B A@11 C A@3 C A@7 B A@8 ~@2 A@7 B A@7 B A@11 C A@3 C A@7 B A@11 C A@3 C A@7 B
>`.pickRestart({
  A: "x ~@3 x ~@2 x ~@2 x ~ x ~@3", B: "x!5 ~@2 x ~@2 x ~ x ~@3", C: "x ~@3 x ~@2 x ~@2 x ~ x!4",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!68 ~@2 [~ x ~ x]!64>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<[x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!68 ~@2 [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!64>").gain(0.24)

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

// drums · bongos
const bongos = s("bongo:4").struct("<~@68 [x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~]!2 ~@64>").gain(1.89)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@68 [~ x!2 ~@13]!2 ~@64>").gain(0.63)

// drums · whistle
const whistle = s("ballwhistle:1").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(1.04)

stack(bass, tubular_bells, brass_section, kick, rim, clap, hihat, crash, bongos, bongos_soft, whistle)