Strudelify
Monster Mash cover art

1962 · Monster Mash

Monster Mash

Bobby "Boris" Pickett

KeyG majorTempo132 bpm
0:00/0:00
// Monster Mash — Bobby "Boris" Pickett
// 132 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 5 "brass 2" synth brass 1 (copy of ch 4 "brass" brass section)
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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 · electric bass finger · "bass"
const bass = note(`<
  ~ A B C D E F G H A I C J K F L M A B C D E F G H A I C J K F L M A B C D E F G H A I C J K F L M A B C D E F G H A I
  C J K F L M A B C D E F G H A I C J K F L M A B C D E F G H A I C J K F L M A B C D E F G H A B C D E F G H A B C D E
  F G N O@5
>`.pickRestart({
  A: "g1@2 ~ g1 d1@2 ~ d1", B: "g1@5 ~ g1@2 ~@2 g1@2 f#1@4", C: "e1@2 ~ e1 b0@2 ~ b0", D: "e1@5 ~ e1@2 ~@2 e1@2 d1@4",
  E: "c1@4 ~@2 c1@2 g1@5 ~ c1 ~", F: "c1@4 ~@2 c1@3 ~ c1@2 c#1@3 ~", G: "d1@4 ~@2 d1@2 a1@3 ~@3 a1@2",
  H: "d1@4 ~@2 d1@2 ~@2 e1@2 f#1@3 ~", I: "g1@5 ~ g1@3 ~ g1@2 f#1@4", J: "e1@2 ~ e1 ~ e1 d1@2",
  K: "c1@4 ~@2 c1@2 g1@5 ~ g1@2", L: "d1 ~@7", M: "~@12 f#1@3 ~", N: "d1@4 ~@2 d1@3 ~ e1@2 f#1@3 ~",
  O: "[~ g1@2 ~@12 d1@2 g1@2 ~@6 g0@43 ~@12]/5",
})).s("gm_electric_bass_finger").gain(0.38)

// chords · piano
const piano = note(`<
  ~ A B C B D E F G ~@8 A B C B D E F G ~@8 A B C B D E F G ~@8 A B C B D E F G ~@8 A B C B D E F G ~@8 A B C B D E F G
  ~@8 A B C B D E F G A B C B D E F G A B C B D E F G H I@3 ~
>`.pickRestart({
  A: "~@4 [g4,a#4,b4] ~@3 [g4,a#4] ~ [g4,a#4,b4] ~@3 g4 ~", // G Gm G
  B: "[g4,a#4] ~@3 [g4,b4]@3 ~ [g4,a#4] ~ [g4,b4] ~@5, b4@2 ~@2 a#4 ~@11", // Gm G Gm G
  C: "~@4 [g4,a#4] ~@3 g4@2 [g4,b4] ~@3 g4 ~, ~@4 b4@2 ~@2 a#4 ~@7", // Gm G
  D: "~@4 [e4,g4]@2 ~@2 e4@2 [e4,g4] ~@5, ~@8 a4 ~@7", // Em
  E: "[e4,g4] ~ [e4,g4] ~ [e4,a4] ~ e4@2 ~@2 [e4,a4] ~ e4@2 ~@2, ~@6 g4 ~@5 g4 ~@3", // Em A5
  F: "~@4 [f#4,a4] ~ [f#4,a4] ~ [f#4,b4] ~ [f#4,a4] ~@5", // F#m B5 F#m
  G: "[f#4,a4] ~ [f#4,a4] ~ [f#4,b4] ~ f#4@2 ~@2 [f#4,b4] ~ f#4@2 ~@2, ~@6 a4 ~@5 a4 ~@3", // F#m B5
  H: "~ [d4,g4,b4]@2 ~@12 [d4,g4]", I: "[~ [d4,g4] ~@7 [d3,g3]@25 ~@14, ~ b4@2 ~@45]/3",
})).s("gm_piano").gain(0.55).pan(1)

// chords · brass section · "brass"
const brass_section = note(`<
  A B C D E F G@2 ~@8 H B C D E F G@2 ~@8 H B C D E F G@2 ~@8 H B C D E F G@2 ~@8 H B C D E F G@2 ~@8 H B C D E F G@2
  ~@8 H B C D E F G@2 ~ B C D E F G@2 ~ B C D E F G@2 ~ I@2 ~@3
>`.pickRestart({
  A: "~@10 g4@2 [d4,g4,b4] ~ [d4,g4,b4] ~, ~@10 d4 ~@5", B: "[g4,b4] ~@7, d4 ~@15",
  C: "~@10 [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", D: "[e4,g4,b4] ~@7",
  E: "~@10 [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~", F: "[e4,g4,c5]@3 ~@13",
  G: "[~@10 [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [d4,a4]@2 ~@14, ~@14 c5@5 ~@13]/2", // C Em D5
  H: "~@10 [d4,g4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", I: "[~ [d4,g4,b4]@3 ~@11 d4@2 [d4,b4]@2 ~@13, ~@15 g4@4 ~@13]/2",
})).s("gm_brass_section").gain(0.64).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B C B C B C B C B C D ~ B C B C B C B C B C B C B C D E B C B C B C B C B C B C B C D F B C B C B C B C B C
  B C B C D ~ B C B C B C B C B C B C B C D ~ B C B C B C B C B C B C B C D F B C B C B C B C B C B C B C B C B C B C B
  C B G H I ~@3
>`.pickRestart({
  A: "~@2 x!2 ~@6 x ~@5", B: "x ~@3 x!2 ~@2", C: "x ~@2 x ~ x ~ x", D: "x", E: "x ~@2 x ~@4", F: "~ x ~@3 x ~@2",
  G: "x ~@5 x ~@3 x ~@4 x", H: "~@15 x", I: "~ x ~@7 x ~@6",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<A B@14 C D B@14 C E B@14 C F B@14 C G B@14 C H B@14 C I B@23 J K L ~@3>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~ x ~ x", C: "x", D: "x!4 ~@12", E: "~ x ~@3 x!3", F: "x ~@2 x ~@2 x ~", G: "x!5 ~@11",
  H: "x!2 ~@6", I: "x ~@2 x ~@2 x!2", J: "~@4 x ~@5 x!3 ~@3", K: "~ x ~@13 x", L: "~ x ~@7 x ~@6",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct(`<
  ~ A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x!2 ~@2 x ~",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<A ~@15 B ~@31 C ~@15 D ~@15 E ~@15 F ~@23 G H ~@4>".pickRestart({
  A: "~@7 x", B: "~@12 x!4", C: "~@15 x", D: "~@12 x!3 ~", E: "~@11 x!2 ~@3", F: "~@5 x ~@2", G: "~@3 x", H: "~ x ~@14",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~ A@14 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@23 C ~ D ~@3>".pickRestart({
  A: "x!8", B: "x", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x", D: "~ x ~@14",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@15 B ~@31 C ~@15 D ~@15 E ~@15 F ~@24 G H ~@3>".pickRestart({
  A: "~@13 x ~@2", B: "~@8 x!4 ~@4", C: "~@7 x", D: "~@8 x!3 ~@5", E: "~@3 x ~ x ~@2", F: "~ x ~@6", G: "~ x ~@13 x",
  H: "~ x ~@14",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@121 [~@15 x] ~@4>").gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@16 [~@4 x!4 ~@8] ~@109>").gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C ~@3
>`.pickRestart({
  A: "x", B: "~ x ~@14", C: "~@9 x ~@6",
})).gain(0.4)

stack(bass, piano, brass_section, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash)