Strudelify

Hobophobic (Scared of Bums)

NOFX

KeyB majorTempo218 bpm
0:00/0:00
// Hobophobic (Scared of Bums) — NOFX
// 218 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 40 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(218/4)

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

// chords · distortion guitar · "TabIt MIDI - Track 1"
const distortion_guitar = note(`<
  ~@4 A B C D A B E F A B C D G@2 H I A B C D A B E F A B C D G@2 H I A B C J
>`.pickRestart({
  A: "[b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3] [f#3,c#4,f#4] [f#3,c#4,f#4]@2 [f#3,c#4,f#4]", // B5 F#5
  B: "[c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4] [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]", // C#5 E5
  C: "[b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3] [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]", // B5 E5
  D: "[b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [b2,f#3,b3]", // B5
  E: "[b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3] [g#2,d#3,g#3] [g#2,d#3,g#3]@2 [g#2,d#3,g#3]", // B5 G#5
  F: "[f#3,c#4,f#4] [f#3,c#4,f#4]@2 [f#3,c#4,f#4] [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]", // F#5 E5
  G: "[g#2,d#3,g#3] [g#2,d#3,g#3]@2 [g#2,d#3,g#3]!2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]", // G#5
  H: "[e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]", I: "[e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!5",
  J: "[b2,f#3,b3]@7 ~@9", // B5
})).s("gm_distortion_guitar").gain(0.34)

// bass · electric bass pick · "TabIt MIDI - Track 2"
const bass = note("<A B A B A B C D A B E F A B C D G@2 H I A B C D A B E F A B C D G@2 H I A B C J>".pickRestart({
  A: "b1 b1@2 b1 f#2 f#2@2 f#2", B: "c#2 c#2@2 c#2 e2 e2@2 e2", C: "b1 b1@2 b1 e2 e2@2 e2", D: "b1 b1@2 b1!2 b1@2 b1",
  E: "b1 b1@2 b1 g#2 g#2@2 g#2", F: "f#2 f#2@2 f#2 e2 e2@2 e2", G: "g#1 g#1@2 g#1!2 g#1@2 g#1",
  H: "e2 e2@2 e2!2 e2@2 e2", I: "e2 e2@2 e2!5", J: "b1@3 ~@5",
})).s("gm_electric_bass_pick").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@4 A B A@4 C A@4 D A@7 D A@7 E A@3 D A@3 F>".pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", B: "x ~@3 x!2 ~@2 x ~@2 x ~ x ~@2", C: "x ~@4 x ~@2 x ~@2 x ~ x ~@2",
  D: "x ~@2 x ~ x ~@2 x ~@2 x ~@4", E: "x ~@2 x ~ x ~@2 x ~@2 x!2 ~@3", F: "x",
})).gain(0.24)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@12 x!4] ~@36>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@10 x!2 ~@4] ~@36>").gain(0.24)

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

// drums · crash
const crash = s("cr").struct("<~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~ B A>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct("<~@4 x ~@35>").gain(0.24)

stack(distortion_guitar, bass, kick, snare, low_tom, mid_tom, open_hat, crash, ride)

More by NOFX