Strudelify

Linoleum

NOFX

KeyE majorTempo200 bpm
0:00/0:00
// Linoleum — NOFX
// 200 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(200/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 · distortion guitar · "TabIt MIDI - Track 1"
const distortion_guitar = note(`<
  A@4 B@4 C@2 D@2 E F G F A@2 C@2 D@2 E F G F C@2 D@2 E F G F C@2 D@2 E F G F C@2 D@2 E F G F C@2 D@2 E F G F H I J K L
  M@8 N@3 O P Q R S T U V O P Q R S T U V O P Q R S T U V W@2 X@2
>`.pickRestart({
  A: "[e3,b3,e4]@2 e2!4 [e3,b3,e4]@2 e2!4 [e3,b3,e4]@2 [e3,b3,e4]@2", B: "[e2,b2,e3]!8",
  C: "[e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]", // E5
  D: "[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
  E: "[c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]", // C#5
  F: "[b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [b2,f#3,b3]", // B5
  G: "[a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]", H: "[e3,b3,e4] e2!7", I: "e2!7 [d#3,b3,e4]",
  J: "g#2!8", K: "g#2!7 [c#3,g#3,c#4]", L: "c#3!7 [b2,f#3,b3]",
  M: "[b2!7 [a2,e3,a3]@2 [a2,e3,a3]!6 [b2,f#3,b3]@2 [b2,f#3,b3]!6 [e3,b3,e4]@2 [e3,b3,e4]!6 [e3,b3,e4]@2 [e3,b3,e4]!6 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]!6 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]!6 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!6 [b2,f#3,b3]]/8", // A5 B5 E5 G#5 C#5 B5
  N: "[~ [b2,f#3,b3]!6 [a2,e3,a3]@2 [a2,e3,a3]!6 [b2,f#3,b3]@2 [b2,f#3,b3]!6 [e3,b3,e4]]/3", // B5 A5 B5 E5
  O: "[e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4]!2", // E5
  P: "[e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [e3,b3,e4] [g#2,d#3,g#3]", // E5 G#5
  Q: "[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]!2", // G#5
  R: "[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] [c#3,g#3,c#4]", // G#5 C#5
  S: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4] [b2,f#3,b3]", // C#5 B5
  T: "[b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [b2,f#3,b3] [a2,e3,a3]", // B5 A5
  U: "[a2,e3,a3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3] [b2,f#3,b3]", // A5 B5
  V: "[b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [b2,f#3,b3] [e3,b3,e4]", // B5 E5
  W: "e2!4 [e3,b3,e4]@2 e2!4 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2", // E5
  X: "[e2!4 [e3,b3,e4]@2 e2!4 [e3,b3,e4]@2 [e3,b3,e4]@2 [e2,e3,b3,e4]@8 ~@10]/2", // E5
})).s("gm_distortion_guitar").gain(0.04)

// other · distortion guitar · "TabIt MIDI - Track 2"
const distortion_guitar_2 = note("<~@8 A@2 B@2 C@3 B D ~@72 E F G H I J@2 K I ~@4>".pickRestart({
  A: "[g#3,g#4] [g#3,g#4]@2 [g#3,g#4]!2 [g#3,g#4]@2 [g#3,g#4]", // G#
  B: "[d#3,d#4] [d#3,d#4]@2 [d#3,d#4]!2 [d#3,d#4]@2 [d#3,d#4]", C: "[e3,e4] [e3,e4]@2 [e3,e4]!2 [e3,e4]@2 [e3,e4]",
  D: "[e3,e4] ~@7", E: "~@7 [g#3,g#4]", F: "[g#3,g#4]@2 [g#3,g#4]!2 [g#3,g#4]@2 [g#3,g#4]!2",
  G: "[g#3,g#4]@2 [g#3,g#4]!2 [g#3,g#4]@2 [g#3,g#4] [d#3,d#4]", H: "[d#3,d#4]@2 [d#3,d#4]!2 [d#3,d#4]@2 [d#3,d#4]!2",
  I: "[d#3,d#4]@2 [d#3,d#4]!2 [d#3,d#4]@2 [d#3,d#4] [e3,e4]", J: "[e3,e4]@2 [e3,e4]!2 [e3,e4]@2 [e3,e4]!2",
  K: "[e3,e4]@2 [e3,e4]!2 [e3,e4]@2 [e3,e4] [d#3,d#4]", // E D#
})).s("gm_distortion_guitar").gain(0.04)

// bass · electric bass pick · "TabIt MIDI - Track 3"
const bass = note(`<
  ~@4 A@4 B@2 C@2 D E F E G ~ B@2 C@2 D E F E B@2 C@2 D E F E B@2 C@2 D E F E B@2 C@2 D E F E B@2 C@2 D E F E G ~@5 H@8
  I@2 J K L M N O P Q J K L M N O P Q J K L M N O P R ~@2 S@2
>`.pickRestart({
  A: "e1!8", B: "e2 e2@2 e2!2 e2@2 e2", C: "g#1 g#1@2 g#1!2 g#1@2 g#1", D: "c#2 c#2@2 c#2!2 c#2@2 c#2",
  E: "b1 b1@2 b1!2 b1@2 b1", F: "a1 a1@2 a1!2 a1@2 a1", G: "e1 ~@7",
  H: "[~ a1!6 b1@2 b1!6 e2@2 e2!6 e2@2 e2!6 g#1@2 g#1!6 g#1@2 g#1!6 c#2@2 c#2!6 b1@2 b1!6 a1]/8",
  I: "[~ a1!6 b1@2 b1!6 e2]/2", J: "e2@2 e2!2 e2@2 e2!2", K: "e2@2 e2!2 e2@2 e2 g#1", L: "g#1@2 g#1!2 g#1@2 g#1!2",
  M: "g#1@2 g#1!2 g#1@2 g#1 c#2", N: "c#2@2 c#2!2 c#2@2 c#2 b1", O: "b1@2 b1!2 b1@2 b1 a1", P: "a1@2 a1!2 a1@2 a1 b1",
  Q: "b1@2 b1!2 b1@2 b1 e2", R: "b1@2 b1!2 b1@2 b1 ~", S: "[~@5 e1!2 e1@4 ~@5]/2",
})).s("gm_electric_bass_pick").gain(0.15)

stack(distortion_guitar, distortion_guitar_2, bass)

More by NOFX