Strudelify

Bad Bad Leroy Brown

Jim Croce

KeyG majorTempo145 bpm
0:00/0:00
// Bad Bad Leroy Brown — Jim Croce
// 145 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(145/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 · fretless bass · "Bass"
const bass = note(`<
  A B C D A@2 E F G H I A C@2 J K G H I A C@2 J K L M N A@3 E F G M I C A C E F L M I A C A E F L M O A C A E F G M I C
  A@2 J K G H I A C@2 E F L M P A@2 C E F L M I A C A J K G H N C G M N A Q
>`.pickRestart({
  A: "g2@2 ~ g2 b2@2 ~ b2 d3@2 ~ d3 e3@2 ~ d3", B: "g2@2 ~ g2 b2@2 ~@2 d3@2 ~ d3 e3@2 ~ d3, ~@7 b2@2 ~@7",
  C: "g2@2 ~ g2 g2@2 ~ g2 g2@2 ~ g2 g2@2 ~ g2", D: "g2@2 ~ g2 g2@2 ~ g2!2 g2@2 g2 g2@3 g2",
  E: "a1@2 ~ a1 a1@2 ~ a1 a1@2 ~ a1 a1@2 ~ a1", F: "a1@2 ~ a1 a1@2 ~ a1 ~@3 a1 a1@2 ~ a1, ~@4 a1 ~@3, ~@9 g1@7",
  G: "b1@2 ~ b1 b1@2 ~ b1 b1@2 ~ b1 b1@2 ~ b1", H: "c2@2 ~ c2 e2@2 ~ e2 g2@2 ~ g2 a2@2 ~ g2",
  I: "d2@2 ~ d2 d2@2 ~ d2 d2@2 ~ d2 d2@2 ~ d2", J: "a1@2 ~ a1 c#2@2 ~ c#2 e2@2 ~ e2 f#2@2 ~ e2",
  K: "a1@2 ~ a1 c#2@2 ~@2 e2@2 ~ e2 f#2@2 ~ e2, ~@7 c#2@2 ~@7", L: "b1@2 ~ b1 d#2@2 ~ d#2 f#2@2 ~ f#2 g2@2 ~ f#2",
  M: "c2@2 ~ c2 c2@2 ~ c2 c2@2 ~ c2 c2@2 ~ c2", N: "d2@2 ~ d2 d2@2 ~ d2 c2@2 ~ c2 e2@2 ~ e2",
  O: "d2@2 ~ d2 f#2@2 ~ f#2 c2@2 ~ c2 e2@2 ~ e2", P: "d2@2 ~ d2 f#2@2 ~ f#2 c2@2 ~ c2 c2@2 ~ c2",
  Q: "g2@2 ~ g2 b2@2 ~ b2@8 ~",
})).s("gm_fretless_bass").gain(0.8)

// chords · piano
const piano = note(`<
  ~@3 A B C D E F G H I B I J@2 K L M N O C D E P Q R S I B T U V G H N C@2 W X K Y H C@2 O D E P Q R O B N Z AA K Y AB
  C B C W X F G M I O C T U P AC R O AD N T U AE AF AG N S C D E P AH R O P AH R O AI
>`.pickRestart({
  A: "~@8 [g2,d3]@2 ~ [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@11 [b4,d5,g5]@2 ~@3", // G5 C G
  B: "[g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3] [g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3]", // G5 C G5 C
  C: "[g2,d3] ~@2 [g2,d3] [g2,e3]@2 ~ [g2,e3] [g2,f4,a#4]@2 ~ [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@8 d3 ~@2 [d4,g4]@5", // G5 C Gm7 G5 C G5
  D: "[a2,e3]@2 ~ [a2,e3,c#5,e5,a5] [a2,f#3]@2 ~ [a2,f#3] [c#5,e5,a5] ~@2 [a2,e3] [a2,f#3]@2 ~ [a2,f#3], ~@4 [a2,e3] ~@3", // A5 A D A A5 D A5
  E: "[e3,c#5,e5,a5] [c#5,e5,a5] ~ [a2,e3,c#5,e5,a5] [c#5,e5,a5]!2 ~ [a2,f#3,c#5,e5,a5] [c#5,e5,a5]!2 ~ [a2,e3,c#5,e5,a5] [f#3,c#5,e5,a5] [c#5,e5,a5] ~ [a2,f#3,c#5,e5,a5], a2 ~ [a2,f#3] ~ [a2,e3] ~ a2 ~", // A F#m7 A F#m7 A F#m7 D A5
  F: "[d#4,f#4,b4] ~@6 [d#4,f#4,b4]@3 ~@2 a#5 [b4,c#5,d#5,e5,f#5,g5] [g4,a#4] ~, ~@11 b5@2 ~@3", // B C#m7b5 Gm
  G: "[c3,g3] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3] [c3,a#4,d#5]@2 ~ [c3,g3] [c3,a3]@2 ~ [c3,a3], ~@8 g3 ~@2 [g4,c5]@5", // C5 F Cm7 C5 F C5
  H: "[d3,a3] ~@2 [d3,a3] [d3,b3] ~@2 [d3,b3] [d3,a3] ~@2 [d3,a3] [d3,b3] ~@2 [d3,b3]", // D5 G D5 G
  I: "[g2,d3] ~@2 [g2,d3] [g2,d3,e3] ~@2 [g2,e3] [g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3], [b3,d4,g4]", // G5 Em7 C G5 C G
  J: "[[a2,e3] ~@2 [a2,e3] [a2,e3,f#3] ~@2 [a2,f#3] [a2,e3] ~@2 [a2,e3] [a2,f#3] ~@2 [a2,f#3] [a2,e3] ~@2 [a2,e3] [a2,f#3] ~@2 [a2,f#3] [a2,e3] ~@2 [a2,e3] [a2,f#3] ~@2 [a2,f#3], [c#4,e4,a4]]/2", // A5 F#m7 D A5 D A5 D A5 …
  K: "[b2,f#3] ~@2 [b2,f#3] [b2,g3] ~@2 [b2,g3] [b2,f#3] ~@2 [b2,f#3] [b2,g3] ~@2 [b2,g3]", // B5 Em B5 Em
  L: "[c3,g3]@2 ~ [c3,g3,e4,g4,c5] [c3,a3]@2 ~ [c3,a3] [e4,g4,c5] ~@2 [c3,g3] c3@2 ~ [c3,a3], ~@8 [c3,g3]@2 ~@2 a3 ~@3", // C5 C F C C5 F C5
  M: "[f#4,a4,d5] ~@6 [f#4,a4,d5]@3 ~@2 c#6 [d5,e5,f#5,g5,a5,b5] [b4,c#5] ~, ~@11 d6@2 ~@3", // D Em7 Bsus2
  N: "[g2,d3]@2 ~ [g2,d3,b3,d4,g4] [g2,e3]@2 ~ [g2,e3] [b3,d4,g4] ~@2 [g2,d3] g2@2 ~ [g2,e3], ~@8 [g2,d3]@2 ~@2 e3 ~@3", // G5 G C G G5 C G5
  O: "[g2,d3]@2 ~ [g2,d3] [g2,e3,d4,g4]@2 ~ [g2,e3,d4,g4] [g2,d3,f4]@2 ~ [g2,d3,f4,a#4] [g2,e3]@2 ~ [g2,e3,c4,f4], ~@8 a#4 ~@3 [d4,g4] ~@3", // G5 Em7 G7 Gm7 C G5
  P: "[b2,f#3]@2 ~ [b2,f#3,d#5,f#5,b5] [b2,g3]@2 ~ [b2,g3] [d#5,f#5,b5] ~@2 [b2,f#3] [b2,g3]@2 ~ [b2,g3], ~@4 [b2,f#3] ~@3", // B5 B Em B B5 Em B5
  Q: "[c3,g3]@2 ~ [c3,g3] [c3,a3,g4,c5]@2 ~ [c3,a3,g4,c5] [c3,g3,a#4]@2 ~ [c3,g3,a#4,d#5] [c3,a3]@2 ~ [c3,a3,f4,a#4], ~@8 d#5 ~@3 [g4,c5] ~@3", // C5 Am7 C7 Cm7 F C5
  R: "[d3,a3] ~@2 [d3,a3] [d3,b3] ~@2 [d3,b3] [c3,g3] ~@2 [c3,g3] [c3,g3,a3] ~@2 [c3,a3], ~ [e4,g4,c5]", // D5 G C5 Am7 F C
  S: "[g2,d3]@2 ~ [g2,d3,b4,d5,g5] [g2,e3]@2 ~ [g2,e3] [b4,d5,g5] ~@2 [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@4 [g2,d3] ~@3", // G5 G C G G5 C G5
  T: "[a2,e3]@2 ~ [a2,e3,c#4,e4,a4] [a2,f#3]@2 ~ [a2,f#3] [a2,e3,c#4,e4,a4] ~@2 [a2,e3] [a2,f#3]@2 ~ [a2,f#3,a4]", // A5 A D A A5 D
  U: "[a4,c#5,e5]!2 ~ [a2,e3,a4,c#5,e5] [a4,d5,f#5]!2 ~ [a2,f#3,a4,d5,f#5] [a2,e3,a4,c#5,e5] [a4,c#5,e5] ~ [a2,e3,a4,c#5,e5] [a4,d5,f#5]!2 ~ [a2,f#3,a4,d5,f#5], [a2,e3] ~ [a2,f#3] ~@3 [a2,f#3] ~", // A D A D A5 D
  V: "[b2,f#3] ~@2 [b2,f#3] [b2,g#3]@2 ~ [b2,g#3] [b2,a4,d5]@2 ~ [b2,f#3] [b2,g#3]@2 ~ [b2,g#3], ~@8 f#3 ~@2 [f#4,b4]@5", // B5 E Bm7 B5 E B5
  W: "[a2,e3] ~@2 [a2,e3] [a2,f#3]@2 ~ [a2,f#3] [a2,g4,c5]@2 ~ [a2,e3] [a2,f#3]@2 ~ [a2,f#3], ~@8 e3 ~@2 [e4,a4]@5", // A5 D Am7 A5 D A5
  X: "[a2,e3]@2 ~ [a2,e3] [a2,f#3]@2 ~ [a2,f#3,c#5,e5,a5] [a2,e3]@2 ~ [a2,e3] [a2,f#3]@2 ~ [a2,f#3], ~@11 [c#5,e5,a5]@2 ~@3", // A5 D F#m7 A5 D A
  Y: "[c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3]", // C5 F C5 F
  Z: "~@3 [c#4,a4]@2 ~@3 [c#4,e4,a4] ~@7, ~@3 e4 ~@12", // F#m A
  AA: "[c#4,e4,a4] ~@6 [c#4,e4,a4] ~@3 a5@2 [e5,f#5,g#5] [a4,b4,c#5,d5] [f#4,g#4]", // A E Dmaj7 F#sus2
  AB: "[d3,a3] ~@2 [d3,a3] [d3,b3]@2 ~ [d3,b3] [d3,c5,f5]@2 ~ [d3,a3] [d3,b3]@2 ~ [d3,b3], ~@8 a3 ~@2 [a4,d5]@5", // D5 G Dm7 D5 G D5
  AC: "[c3,g3]@2 ~ [c3,g3,c5,c6] [d#5,b5,c6] [e5,c6] ~ [c3,a3,f5,c6] [f#5,c6] [g5,c6] ~ [c3,g3,f#5,c6] [f5,c6,d6] [d#5,c6] ~ [c3,a3,e5,c6], ~@2 [c3,a3] ~ [c3,g3] ~ [c3,a3] ~", // C5 Cm C F F#dim C5 C Dm7 …
  AD: "[b3,d4,g4] ~@6 [b3,d4,g4]@3 ~@2 f#5 [g4,a4,b4,c5,d5,e5] [e4,f#4] ~, ~@11 g5@2 ~@3", // G Cmaj7 Esus2
  AE: "[b2,f#3] ~@2 [b2,f#3] [b2,f#3,g3] ~@2 [b2,g3] [b2,f#3] ~@2 [b2,f#3] [b2,g3] ~@2 [b2,g3], [d#4,f#4,b4]", // B5 Gmaj7 Em B5 Em B
  AF: "[c3,g3] ~@2 [c3,g3] [c3,g3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3], [e4,g4,c5]", // C5 Am7 F C5 F C
  AG: "[d3,a3] ~@2 [d3,a3] [d3,a3,b3] ~@2 [d3,b3] [d3,a3] ~@2 [d3,a3] [d3,b3] ~@2 [d3,b3], [f#4,a4,d5]", // D5 Bm7 G D5 G D
  AH: "[c3,g3]@2 ~ [c3,g3,e5,g5,c6] [c3,a3]@2 ~ [c3,a3] [e5,g5,c6] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3], ~@4 [c3,g3] ~@3", // C5 C F C C5 F C5
  AI: "[g2,d3] ~@2 [g2,d3] [g2,e3]@2 ~ g2@8 ~, ~@7 e3 ~@8", // G5 C
})).s("gm_piano").gain(0.8)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!96 [x ~@2 x!2 ~@2 x ~@8]>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<A@3 B A@7 B A@7 B A@31 B A@7 B A@7 B A@3 B A@11 B A@7 B A@3 B C>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~ x!3 ~ x", C: "~ x ~@2",
})).gain(0.54)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~@3 A ~@7 A ~@7 A ~@3 A ~@27 A ~@11 A ~@9>".pickRestart({
  A: "~@13 x ~ x",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@3 A ~@7 A ~@7 A@9 ~@7 A ~@7 A@9 ~@7 A ~@7 A@9 ~@7 A@13 B>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<A@3 B A@7 B A@7 B@9 A@7 B A@7 B@9 A@7 B A@7 B@9 A@7 B@13 C>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", C: "x!2 ~ x!3 ~ x ~@8",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@3 A ~@7 A ~@7 A ~@3 A ~@27 A ~@11 A ~@9>".pickRestart({
  A: "~@11 x!3 ~ x",
})).gain(0.42)

// drums · ride
const ride = s("rd").struct(`<
  A@3 ~ A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.42)

stack(bass, piano, kick, snare, snare_soft, clap, hihat, mid_tom, ride)

More by Jim Croce