Strudelify
Wooly Bully cover art

Wooly Bully

Wooly Bully

Sam The Sham

KeyG majorTempo135 bpm
0:00/0:00
// Wooly Bully — Sam The Sham
// 135 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "P6-Sforzando Brass" brass section (copy of ch 5 "P5-Sforzando Brass" brass section)
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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.

// chords · piano · "P1-Grand Piano"
const piano = note(`<
  ~@2 A B C@5 D@2 E@2 F G H I J@7 K@2 L@2 M N O@2 P@7 K@2 L@2 M N O@2 A B C@5 D@2 E@2 F G H I P@7 K@2 L@2 M N O@2 Q B@2
  R
>`.pickRestart({
  A: "[g2,f3,g3,b3,d4]@7 ~@2 [f3,g3]@6 ~, ~@8 [g2,b3,d4]@7 ~", // G7 Fsus2 G
  B: "[g2,f3,g3,b3,d4]@3 ~ [g2,f3,g3,b3,d4]@3 ~ [g2,f3,g3,b3,d4]@3 ~ [g2,f3,g3,b3,d4]@3 ~", // G7
  C: "[[g2,f3,g3,b3,d4]@3 ~ [g2,f3,g3,b3,d4]@3 ~ [g2,f3,g3,b3,d4]@3 ~ g2@3 ~ g2 ~@3 [f3,g3,b3,d4] ~@3 [d2,e2] ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@2, ~@12 [f3,g3,b3,d4]@6 g2@6 ~@2 d2@6 ~@2 g2@6 ~@2 d2@6 ~@2 g2@6 ~@2 d2@6 ~@2 g2@6 ~@2 d2@5 ~, ~@22 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@5]/5", // G7 Dsus2 G7
  D: "[c2 ~@3 [d3,e3,g3,a#3] ~@3 g2 ~ g2@2 [e3,g3,a#3] ~@3 c2 ~@3 [e3,g3,a#3] ~@3 g2 ~@3 [e3,g3,a#3] ~ [e3,g3,a#3]@2, ~ c2@2 [e3,g3,a#3]@2 ~@2 [e3,g3,a#3]@2 c2@2 [e3,g3,a#3]@2 g2@2 ~]/2", // Em7b5 Edim
  E: "[g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~ d2@2 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@2, ~ g2@3 ~ d2@3 ~ g2@3 ~@4, ~@6 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@5 ~@5]/2", // G7
  F: "d2 ~@3 [d3,f#3,c4]@2 [d3,f#3,c4]@2 a2 ~@3 [d3,f#3,c4] ~ [d3,f#3,c4]@2, ~@2 d2@6 ~@2 a2@5 ~", // D7
  G: "c2 ~@3 [e3,g3,a#3] ~ [e3,g3,a#3]@2 g2 ~@3 [e3,g3,a#3] ~ [e3,g3,a#3]@2, ~@2 c2@5 ~@3 g2@4 ~@2", // Edim
  H: "g2@2 ~@2 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@2, ~@2 g2@6 ~@2 d2@5 ~, ~@3 [f3,g3,b3,d4]@2 ~@3", // G7
  I: "~@2 [d2,f#3] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4]@2", // D D7
  J: "[g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@2, ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@2 ~, ~@6 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@5 ~@5]/7", // G7
  K: "[c2 ~@3 [d3,e3,g3,a#3] ~ [e3,g3,a#3]@2 g2 ~@3 [e3,g3,a#3] ~@3 c2 ~@3 [e3,g3,a#3] ~ [e3,g3,a#3]@2 g2@4 [e3,g3,a#3] ~ [e3,g3,a#3]@2, ~ c2@3 ~ g2@3 ~ c2@3 ~@4, ~@7 [e3,g3,a#3]@2 ~@7]/2", // Em7b5 Edim
  L: "[g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@2, ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@2 ~, ~@3 [f3,g3,b3,d4]@2 ~@2 [f3,g3,b3,d4]@2 ~@2 [f3,g3,b3,d4]@2 ~@3]/2", // G7
  M: "d2 ~@3 [d3,e3,f#3,c4] ~@3 a2 ~@3 [d3,f#3,c4] ~ [d3,f#3,c4]@2, ~ d2@3 ~@4, ~@6 [d3,f#3,c4]@4 a2@5 ~", // D7
  N: "c2 ~@3 [e3,g3,a#3] ~ [e3,g3,a#3]@2 g2 ~ g2@2 [e3,g3,a#3] ~ [e3,g3,a#3]@2, ~@2 c2@5 ~@9", // Edim
  O: "[g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@3 ~ [d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~ [d2,d3,f#3,c4] ~, ~@2 g2@6 ~@2 d2@9 ~@13, ~@3 [f3,g3,b3,d4]@2 ~@11]/2", // G7 D7 G7
  P: "[[g2,f3,g3,b3,d4] ~ [f3,g3,b3,d4] ~ [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~@3 g2 ~@3 [f3,g3,b3,d4] ~@3 d2 ~@3 [f3,g3,b3,d4] ~ [f3,g3,b3,d4]@2, ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~ g2@3 ~ d2@2 ~, ~@6 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@4 ~@4 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@5 ~@5]/7", // G7
  Q: "[g2,f3,g3,b3,d4]@7 ~ [g2,f3,g3,b3,d4]@7 ~", R: "[g2,f3,g3,b3,d4] ~@7",
})).s("gm_piano").gain(0.19).pan(0.2)

// chords · drawbar organ · "P2-Drawbar Organ #"
const drawbar_organ = note(`<
  ~@2 A B@2 C@4 D@2 E@2 F G H I C@7 J@2 C@2 K J C L C@7 J@2 C@2 K J C L A B@2 C@4 D@2 E@2 F M H I C@7 J@2 C@2 K J C L A
  B@2 N
>`.pickRestart({
  A: "[f4,g4,b4,d5]@7 ~ [f4,g4,b4,d5]@7 ~", // G7
  B: "[f4,g4,b4,d5]@3 ~ [f4,g4,b4,d5]@3 ~ [f4,g4,b4,d5]@3 ~ [f4,g4,b4,d5]@3 ~", // G7
  C: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  D: "[g4,a#4,e5] ~ [g4,a#4,e5] ~ [g4,a#4,e5] ~ [g4,a#4,e5] ~ [g4,a#4,e5] ~ [g4,a#4,e5] ~ [g4,a#4,e5] ~ [g4,a#4,e5] ~", // Edim
  E: "[f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~ [f4,g4,b4,d5] ~", // G7
  F: "[d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~ [d4,f#4,c5] ~", // D7
  G: "[c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~", // C7
  H: "[d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~", // Bdim
  I: "[d4,f4,b4] ~ [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~", // Bdim D7
  J: "[c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C
  K: "[d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // D
  L: "[g4,b4,d5] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // G D
  M: "[c4,f4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~ [c4,e4,a#4] ~", // Fsus4 C7
  N: "[f4,g4,b4,d5] ~@7", // G7
})).s("gm_drawbar_organ").gain(0.27).pan(0.7)

// bass · electric bass finger · "P3-Finger Bass"
const bass = note(`<
  ~@2 A B C D@3 E F G D H I J D K D@7 L@2 D@2 M L D K D@7 L@2 D@2 N L D O A B C D@3 E P J D H Q J D K D@7 L@2 D@2 M L D
  O R B@2 S
>`.pickRestart({
  A: "g2!2", B: "g2!4", C: "g2@2 g2@2 g2 d2 f2 f#2", D: "g2!3 f2 d2!2 f2 f#2", E: "g2!3 f2 d2!2 f2 g2",
  F: "c2!3 a#1 g2!3 a#1", G: "c2 c2@2 f2 g2 g2@2 c2", H: "g2 g2@2 f2 d2!2 f2 f#2", I: "d2!3 c2 a1!2 a2 ~",
  J: "c2 c2@2 c2 g2 g2@2 c2", K: "g2 d2!5 f2 f#2", L: "c2!3 a#1 g1!2 a#1 b1", M: "d2!3 c2 a1!2 c2 c#2",
  N: "d2!3 c2 a1!2 c2 ~", O: "g2 d2!7", P: "c2!3 a#1 g2!4", Q: "d2 d2@2 d2 a2 a2@2 a2", R: "g2@7 ~ g2@7 ~", S: "g2 ~@7",
})).s("gm_electric_bass_finger").gain(0.26)

// chords · brass section · "P5-Sforzando Brass"
const brass_section = note(`<
  ~@17 A@2 B@2 C@2 D E@2 F@2 G H I ~ J@2 K@2 L@2 M N@2 O@2 P Q R ~@16 J@2 K@2 L@2 D S@2 T@2 P Q R ~@5
>`.pickRestart({
  A: "[f5@2 f5@2 e5@2 ~@2 e5@2 d5@15 ~@3 d5@2 e5@2]/2", B: "[f5@2 e5 d5@9 ~@4]/2",
  C: "[f5@2 f5@2 e5@2 ~@2 e5@2 d5@15 ~@3 d5@2 d5@2, e5 ~@31]/2", D: "g5@2 f5 d5@3 g5 ~, f#5 ~@15",
  E: "[g5@3 g5@22 ~@3 g4@2 ~@2, f#5 ~@31]/2", F: "[g4@3 g4@19 ~@6 b4@2 ~@2, ~@28 a#4 ~@3]/2",
  G: "b4@2 a4@9 ~ a4@2 ~@2, a#4 ~@11 g#4 ~@3", H: "a4 g4@4 ~ g4 ~, g#4 ~@15", I: "g4@3 g4@13",
  J: "[f5@2 f5@2 e5 ~@3 e5@2 d5@14 ~@4 d5@2 e5@2, e5 ~@31]/2", K: "[f5@2 e5 d5@11 ~@2]/2",
  L: "[f5@2 f5@2 e5 ~@3 e5@2 d5@14 ~@4 d5@2 d5@2, e5 ~@31]/2", M: "g5@2 f5 d5@3 [e5,g5,c6] ~, f#5 ~@15",
  N: "[[e5,g5,c6]@3 [e5,g5,c6]@22 ~@3 [g4,a#4,d5]@2 ~@2, ~@28 f#4 ~@3]/2", // C Gm
  O: "[[g4,b4,d5]@3 [g4,b4,d5]@22 ~@3 [g4,b4,d5]@2 ~@2, ~@28 a#4 ~@3]/2", // G
  P: "[f#4,b4,d5] [f#4,a4,c5]@4 ~ [f#4,a4,d5] ~, a#4 ~@11 g#4 ~@3", // Bm F#dim D
  Q: "[f#4,a4,d5]@2 [e4,g4,c5]@9 ~ [e4,g4,c5]@2 ~@2, g#4 ~@11 f#4 ~@3", R: "[g4,b4,d5]@3 [g4,b4,d5]@13, f#4 ~@15",
  S: "[g5@3 g5@22 ~@3 g4@2 ~@2, ~@28 f#4 ~@3]/2", T: "[g4@3 g4@22 ~@3 [g4,b4,d5]@2 ~@2, ~@28 a#4 ~@3]/2",
})).s("gm_brass_section").gain(0.32).pan(0.1)

// other · brass section · "P7-Brass Section"
const brass_section_2 = note("<~@33 A ~ A ~ A B@2 C D E F G D H ~@3 I@3 ~@4 J K L M N ~@19>".pickRestart({
  A: "[g3,g4] ~ [g3,g4] ~@3 [g3,g4] ~@9", B: "[~@6 g3@17 ~ [c3,c4] ~ [c3,c4] ~@5, ~@3 g4@5 ~@8]/2",
  C: "[c3,c4] ~@5 [c3,c4] ~@9", D: "~@8 [g3,g4] ~ [g3,g4] ~@5", E: "[g3,g4] ~@5 [g3,g4] ~@9", F: "~@3 [d3,d4]@5",
  G: "~@3 [c3,c4]@5", H: "[f3,f4] ~@5 [d3,d4]@10", I: "[~@14 g3@33 ~]/3", J: "~@2 [g3,g4] ~@5 [g3,g4] ~@7", K: "d4",
  L: "c4@15 ~", M: "g3", N: "~@2 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~",
})).s("gm_brass_section").gain(0.25).pan(0.7)

// other · brass section · "P7-Brass Section" · soft notes
const brass_section_soft = note("<~@54 A@3 ~@24>".pickRestart({
  A: "[~ [a#2,a#3]@4 [b2,b3]@3]/3", // A# B
})).s("gm_brass_section").gain(0.16).pan(0.7)

// other · baritone sax · "P8-Baritone Sax"
const baritone_sax = note("<~@33 A ~ A ~ A B@2 C D E F G D H ~@3 I@3 ~ J@3 K L M N O ~@19>".pickRestart({
  A: "g3 ~ g3 ~@3 g3 ~@9", B: "[~@6 g3@17 ~ c3 ~ c3 ~@5]/2", C: "c3 ~@5 c3 ~@9", D: "~@8 g3 ~ g3 ~@5",
  E: "g3 ~@5 g3 ~@9", F: "~@3 d3@5", G: "~@3 c3@5", H: "f3 ~@5 d3@10", I: "[~@14 g3@33 ~]/3", J: "[~ a#2@4 b2@3]/3",
  K: "~@2 g2 ~@5 g2 ~@7", L: "d3", M: "c3@15 ~", N: "g3", O: "~@2 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
})).s("gm_baritone_sax").gain(0.25).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@2 A B C D@11 E D@14 E D@14 F A B G H D@27 B I E>".pickRestart({
  A: "x!2", B: "x!4", C: "x ~ x ~ x!4", D: "x ~@3 x!2 ~@2", E: "x", F: "x!3 ~ x!2 ~@2", G: "x!3 ~", H: "~@4 x!2 ~@2",
  I: "x ~ x ~@2 x ~ x",
})).gain(0.28)

// drums · snare
const snare = s("sd").struct("<~@5 A@11 B A@14 B A@13 C D ~@2 E F@11 B A@16 F@2 G>".pickRestart({
  A: "~ x ~ x", B: "~ x!7", C: "~@2 x ~ x!2 ~@2", D: "x ~@2 x ~ x!3", E: "~@10 x!5 ~", F: "x!4", G: "x",
})).gain(0.28)

// drums · hihat
const hihat = s("hh").struct("<[x!2] [x!4] ~@79>").gain(0.28)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A B C D@42 A B C D@30 E>".pickRestart({
  A: "x!2", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x!8", E: "x",
})).gain(0.28)

// drums · crash
const crash = s("cr").struct("<~@46 [~@3 x ~@4] ~@3 x ~@11 x ~@18>").gain(0.28)

stack(
  piano, drawbar_organ, bass, brass_section, brass_section_2, brass_section_soft, baritone_sax, kick, snare, hihat,
  open_hat, crash
)