Strudelify

Monster Mash

Bonzo Dog Doo Dah Band

KeyB♭ majorTempo131 bpm
0:00/0:00
// Monster Mash — Bonzo Dog Doo Dah Band
// 131 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(131/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 · electric bass pick · "FB01Bass ch1"
const electric_bass_pick = note("<~@6 A B C D E F G H I ~@50>".pickRestart({
  A: "~ f4 [g4,bb4] [f4,a4,d5] [f4,a4,c5] [d4,f4,bb4] ~ [d4,f4,bb4]", B: "[f4,bb4,c5] [f4,bb4,d5] ~ [d4,f4,bb4]@4 ~",
  C: "~ [g4,bb4] [f4,a4] [f4,g4,bb4] [f4,a4,c5] [d4,g4,bb4] ~ [d4,g4,bb4]", // Gm F Gm7 F Gm
  D: "[f4,a4,c5] [g4,bb4,d5] ~ [d4,g4,bb4]@3 ~@2", // F Gm
  E: "~@2 [g4,c5,eb5] ~ [g4,bb4,d5] ~ [f4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,g4,bb4] ~@3 [g4,bb4,eb5] ~", // Cm Gm F Adim Eb
  F: "[g4,c5,eb5] ~ [a4,c5,f5] ~@3 [g4,c5,eb5]@4 ~@6", // Cm F Cm
  G: "~@2 [a4,c5,eb5] ~ [g4,bb4,d5] ~ [f4,a4,c5] ~ [eb4,g4,bb4] ~ [eb4,f4,a4] ~@3 [eb4,f4,a4] ~", // Adim Gm F Eb F7
  H: "[eb4,g4,bb4] ~ [eb4,a4,c5] ~@3 [eb4,a4,c5]@3 ~ [f4,bb4,eb5] ~ [f4,a4,d5] ~ [eb4,f4,c5] ~", I: "[d4,f4,bb4] ~@15",
})).s("gm_electric_bass_pick").gain(0.4).pan(0)

// chords · accordion · "FB01Bass ch1"
const accordion = note("<~@20 A B C D E F G H I J K ~@34>".pickRestart({
  A: "~@4 f5 ~ f5 ~ [eb5,f5] ~ [eb5,f5]@3 ~ [c5,eb5,f5] ~", // Ebsus2 F7
  B: "[a4,eb5,f5,a5,c6] ~ [a4,eb5,f5,a5,c6]@3 ~ [a4,eb5,f5,a5,c6]@3 ~@7", // F7
  C: "~ f4 [g4,bb4] [f4,a4,d5] [f4,a4,c5] [d4,f4,bb4] ~ [d4,f4,bb4]", D: "[f4,bb4,c5] [f4,bb4,d5] ~ [d4,f4,bb4]@4 ~",
  E: "~ [g4,bb4] [f4,a4] [f4,g4,bb4] [f4,a4,c5] [d4,g4,bb4] ~ [d4,g4,bb4]", // Gm F Gm7 F Gm
  F: "[f4,a4,c5] [g4,bb4,d5] ~ [d4,g4,bb4]@3 ~@2", // F Gm
  G: "~@2 [g4,c5,eb5] ~ [g4,bb4,d5] ~ [f4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,g4,bb4] ~@3 [g4,bb4,eb5] ~", // Cm Gm F Adim Eb
  H: "[g4,c5,eb5] ~ [a4,c5,f5] ~@3 [g4,c5,eb5]@4 ~@6", // Cm F Cm
  I: "~@2 [a4,c5,eb5] ~ [g4,bb4,d5] ~ [f4,a4,c5] ~ [eb4,g4,bb4] ~ [eb4,f4,a4] ~@3 [eb4,f4,a4] ~", // Adim Gm F Eb F7
  J: "[eb4,g4,bb4] ~ [eb4,a4,c5] ~@3 [eb4,a4,c5]@3 ~ [f4,bb4,eb5] ~ [f4,a4,d5] ~ [eb4,f4,c5] ~", K: "[d4,f4,bb4] ~@15",
})).s("gm_accordion").gain(0.4).pan(0)

// chords · vibraphone · "FB01Bass ch1" · Ebsus2 F7
const vibraphone = note(`<
  ~@36
  [~@4 f5 ~ f5 ~ [eb5,f5] ~ [eb5,f5]@3 ~ [c5,eb5,f5] ~]
  [[a4,eb5,f5,a5,c6] ~ [a4,eb5,f5,a5,c6]@3 ~ [a4,eb5,f5,a5,c6]@3 ~@7]
  ~@27
>`).s("gm_vibraphone").gain(0.4).pan(0)

// chords · harmonica · "FB01Bass ch1"
const harmonica = note("<~@46 A B C D E F G H I ~@10>".pickRestart({
  A: "~ f4 [g4,bb4] [f4,a4,d5] [f4,a4,c5] [d4,f4,bb4] ~ [d4,f4,bb4]", B: "[f4,bb4,c5] [f4,bb4,d5] ~ [d4,f4,bb4]@4 ~",
  C: "~ [g4,bb4] [f4,a4] [f4,g4,bb4] [f4,a4,c5] [d4,g4,bb4] ~ [d4,g4,bb4]", // Gm F Gm7 F Gm
  D: "[f4,a4,c5] [g4,bb4,d5] ~ [d4,g4,bb4]@3 ~@2", // F Gm
  E: "~@2 [g4,c5,eb5] ~ [g4,bb4,d5] ~ [f4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,g4,bb4] ~@3 [g4,bb4,eb5] ~", // Cm Gm F Adim Eb
  F: "[g4,c5,eb5] ~ [a4,c5,f5] ~@3 [g4,c5,eb5]@4 ~@6", // Cm F Cm
  G: "~@2 [a4,c5,eb5] ~ [g4,bb4,d5] ~ [f4,a4,c5] ~ [eb4,g4,bb4] ~ [eb4,f4,a4] ~@3 [eb4,f4,a4] ~", // Adim Gm F Eb F7
  H: "[eb4,g4,bb4] ~ [eb4,a4,c5] ~@3 [eb4,a4,c5]@3 ~ [f4,bb4,eb5] ~ [f4,a4,d5] ~ [eb4,f4,c5] ~", I: "[d4,f4,bb4] ~@15",
})).s("gm_harmonica").gain(0.4).pan(0)

// chords · orchestra hit · "FB01Bass ch1" · Gm Eb E F
const orchestra_hit = note(`<
  ~@57
  [~@10 [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~]
  [[eb4,g4,bb4] ~@15]
  [~@10 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [e4,ab4,b4] ~]
  [[f4,a4,c5] ~@15]
  ~@4
>`).s("gm_orchestra_hit").gain(0.64).pan(0)

// chords · orchestra hit · "FB01Bass ch1" · soft notes · Bb
const orchestra_hit_soft = note("<~@55 [~@10 [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~] [[d4,f4,bb4] ~@15] ~@8>")
  .s("gm_orchestra_hit").gain(0.4).pan(0)

// chords · steel drums · "FB01Bass ch1"
const steel_drums = note("<~@60 A B C@2 D>".pickRestart({
  A: "~@4 f5 ~ f5 ~ [eb5,f5] ~ [eb5,f5]@3 ~ [c5,eb5,f5] ~", // Ebsus2 F7
  B: "[a4,eb5,f5] ~ [a4,eb5,f5]@3 ~ [a4,eb5,f5]@3 ~@3 [eb4,f4,a4]@3 ~", // F7
  C: "[[db4,f4,bb4]@3 ~ db4@3 ~ f4 ~ bb4@3 ~ gb4@4 ~@4 gb4 ~ f4 ~ [eb4,gb4] ~ [db4,f4,ab4] ~ [c4,f4,a4] ~]/2", // Bbm Ebm Db F
  D: "[bb3,d4,f4,bb4]@3 ~@3 f4 ~ [bb3,d4,f4,bb4]@3 ~ [bb3,d4,f4,bb4]@3 ~", // Bb
})).s("gm_steel_drums").gain(0.4).pan(0)

// bass · acoustic bass · "Tx81zGrndPno Ch2"
const bass = note("<~@21 A B C@7 D E@8 ~@6 F B C@7 D G@8 H I>".pickRestart({
  A: "f2 ~ f2@3 ~ f2@3 ~ f2 ~ g2 ~ a2 ~", B: "bb2@3 bb2 ~@3 f2, ~ bb2",
  C: "[bb2@6 ~@4 f2@2 ~@2 a2@2 g2@4 ~@2 g2@2 d2@4 ~@2 d2@2 g2@4 ~@2 g2@4 g2@2 a2@2 ~@2 c3@3 ~@3 c3 ~ c3@3 ~@3 g2 ~ c3@3 ~@3 c3@3 ~@3 a2 ~ g2 ~ f2@3 ~@3 f2 ~ f2@3 ~@3 c2 ~ f2@3 ~@3 f2@3 ~ f2 ~ g2 ~ a2 ~, ~@3 bb2@3 bb2@17 bb2@14 bb2@19]/7",
  D: "bb2@4 bb2@4 ~@6 f2 ~, ~ bb2", E: "[bb2@2 bb2@4 ~@90 f2 ~ f2@3 ~ f2@3 ~ f2 ~ f2@3 ~@17, ~@3 bb2@61]/8",
  F: "~@10 f2 ~ g2 ~ a2 ~",
  G: "[bb2@2 bb2@4 ~@90 f2 ~ f2@3 ~ f2@3 ~ eb2 ~ d2 ~ c2 ~ bb1@3 ~ db2@3 ~ f2 ~@5 gb2@2, ~@3 bb2@61]/8",
  H: "~@6 gb2 ~ f2 ~ eb2 ~ db2 ~ c2 ~", I: "bb1@3 ~@3 f2 ~@9",
})).s("gm_acoustic_bass").gain(0.8).pan(0.8)

// chords · electric guitar muted · "Tx81zGrndPno Ch2"
const electric_guitar_muted = note("<~@16 A B@8 ~@7 C D@8 ~@15 E@2 F@2 ~@5>".pickRestart({
  A: "~@4 g2@3 ~ g2@3 ~@3 d2 ~", B: "[g2 ~ g2 ~@17 eb2@3 ~ eb2@3 ~@3 bb2 ~ eb2 ~ eb2 ~@3 eb2@90, ~@3 g2@61]/8",
  C: "~@4 g2@4 ~@6 d2 ~, ~ g2", D: "[g2@2 g2@4 ~@14 eb2@4 ~@6 bb2 ~ eb2@2 eb2@4 eb2@90, ~@3 g2@61, ~@3 eb2 ~@12]/8",
  E: "[~@4 g2@4 ~@6 d2 ~@17, ~@8 g2@11 ~@13]/2", F: "[~@4 eb2@4 ~@6 bb2 ~@17, ~@8 eb2@11 ~@13]/2",
})).s("gm_electric_guitar_muted").gain(0.8).pan(0.8)

// other · timpani · "Tx81zGrndPno Ch2"
const timpani = note("<~@59 [~@10 eb2 ~ eb2 ~ e2 ~] [f2 ~@15] ~@4>").s("gm_timpani").gain(0.8).pan(0.8)

// other · string ensemble 1 · "D110Strings Ch4"
const string_ensemble_1 = note("<A@2 ~@63>".pickRestart({
  A: "[c4 ~@3 c3@24 ~@4]/2",
})).s("gm_string_ensemble_1").gain(0.71)

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

// drums · rim
const rim = s("rim").struct("<~@20 [x ~ x!6] ~@15 [x ~ x!6] ~@23 [x ~ x!6] ~@4>").gain(0.6)

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

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

stack(
  electric_bass_pick, accordion, vibraphone, harmonica, orchestra_hit, orchestra_hit_soft, steel_drums, bass,
  electric_guitar_muted, timpani, string_ensemble_1, kick, rim, snare, hihat
)