Strudelify

The Quass

NOFX

KeyE minorTempo105 bpm
0:00/0:00
// The Quass — NOFX
// 105 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar · "TabIt MIDI - Track 1"
const overdriven_guitar = note(`<
  A B@10 C D B@2 C D ~ E F G E@2 F H E ~ I J I J I J K F L M F N I J I J I J I J I J K F L M F N I J I J O P F O L M F N
  Q@3
>`.pickRestart({
  A: "[e2,b2,e3]!2 ~ [g3,b3,e4]@13", B: "[e2,b2,e3]!2 ~@4 [e2,b2,e3] ~@3 [e2,b2,e3] ~@5",
  C: "[c3,g3,c4]!2 ~@4 [c3,g3,c4] ~@3 [c3,g3,c4] ~@5", D: "[a2,e3,a3]!2 ~@4 [a2,e3,a3] ~@3 [a2,e3,a3] ~@5",
  E: "[e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]", // E5
  F: "[c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4]", // C5
  G: "[a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!3 [e3,a3] [a2,e3,a3]", // A5
  H: "[a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!5", // A5
  I: "[e3,g3] [e3,g3]@2 [e3,g3]!2 [e3,g3]@2 [e3,g3] [e3,a3] [e3,a3]@2 [e3,a3] [e3,g3] ~@3", // Em A5 Em
  J: "[c3,g3] [c3,g3]@2 [c3,g3]!2 ~@3 [d3,f#3] [d3,f#3]@2 [d3,f#3]!2 ~@3", // C5 D
  K: "[g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3] [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]", // G5 D5
  L: "[g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]", // G5
  M: "[e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3] [g3,g4] [g3,g4]@2 [g3,g4] [f#3,f#4] [f#3,f#4]@2 [f#3,f#4] [e3,e4] [e3,e4]@2 [e3,e4]", // E5 G F# E
  N: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4] [f#3,f#4] [f#3,f#4]@2 [f#3,f#4] [g3,g4] [g3,g4]@2 [g3,g4] [f#3,f#4] [f#3,f#4]@2 [f#3,f#4]", // D5 F# G F#
  O: "[e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]", // E5
  P: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]", // D5
  Q: "[[e3,b3,e4,g4,b4]@17 ~@7]/3", // Em
})).s("gm_overdriven_guitar").gain(0.64)

// chords · overdriven guitar · "TabIt MIDI - Track 2"
const overdriven_guitar_2 = note(`<
  ~@3 A B C@2 A B D@2 E F D@2 E F ~@10 G H G H G H I J K L J M G H G H G H G H G H I J K L J M G H G H N M J N K L J M
  O@3
>`.pickRestart({
  A: "[c3,g3,c4]", B: "[a2,e3,a3]", C: "[e2,b2,e3]/2", D: "e2 d3 e3 e2 d3 e3 e2 d3 e3 e2 d3 e3 e2!4",
  E: "c3 d3 e3 c3 d3 e3 c3 d3 e3 c3 d3 e3 c3!4", F: "a2 d3 e3 a2 d3 e3 a2 d3 e3 a2 d3 e3 a2!4",
  G: "[e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2 ~@3", // E5
  H: "[c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]!2 ~@3 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!2 ~@3", // C5 D5
  I: "[g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3] [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]", // G5 D5
  J: "[c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4]!2 [c3,g3,c4]@2 [c3,g3,c4]", // C5
  K: "[g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]", // G5
  L: "[e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]", // E5
  M: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]!2 [d3,a3,d4]@2 [d3,a3,d4]", // D5
  N: "[e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]", // E5
  O: "[[e3,b3,e4,g4,b4]@17 ~@7]/3", // Em
})).s("gm_overdriven_guitar").gain(0.35)

// bass · electric bass pick · "TabIt MIDI - Track 3"
const bass = note(`<
  ~@3 A B C@2 A B C@2 A B C@2 A B D E F G E@2 F G E D H I H I H I J F K E F L H I H I H I H I H I J F K E F L H I H I H
  L F H K E F L M@3
>`.pickRestart({
  A: "c2", B: "a1", C: "e1", D: "e1 d2 e2 e1 d2 e2 e1 d2 e2 e1 d2 e2 ~@4",
  E: "e1 e1@2 e1!2 e1@2 e1!2 e1@2 e1!2 e1@2 e1", F: "c2 c2@2 c2!2 c2@2 c2!2 c2@2 c2!2 c2@2 c2",
  G: "a1 a1@2 a1!2 a1@2 a1!2 a1@2 a1!2 a1@2 a1", H: "e2 e2@2 e2!2 e2@2 e2!2 e2@2 e2!2 e2@2 e2",
  I: "c2 c2@2 c2!2 c2@2 c2 d2 d2@2 d2!2 d2@2 d2", J: "g1 g1@2 g1!2 g1@2 g1 d2 d2@2 d2!2 d2@2 c#2",
  K: "g1 g1@2 g1!2 g1@2 g1!2 g1@2 g1!2 g1@2 g1", L: "d2 d2@2 d2!2 d2@2 d2!2 d2@2 d2!2 d2@2 d2", M: "[e2@17 ~@7]/3",
})).s("gm_electric_bass_pick").gain(0.64)

stack(overdriven_guitar, overdriven_guitar_2, bass)

More by NOFX