Strudelify

M+M's

blink-182

KeyE majorTempo160 bpm
0:00/0:00
// M+M's — blink-182
// 160 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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.

// other · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  ~@3 A B C B D B C B D E F G H E F G H I@3 J I@3 J K L K L K L K M B C B D B C B D E F G H E F G H I@3 J I@3 J K L K L
  K L K N O P Q R O P Q R O P Q R O P Q R S@7 T B C B D B C B D B C B D B C B D U@3
>`.pickRestart({
  A: "e4@14 e4!2", B: "g#4 e4!2 a4 e4!2 b4 e4 a4 e4 g#4 e4 a4 g#4 e4!2", C: "f#4 e4!2 g#4 e4!2 a4 e4 g#4 e4 f#4 e4!5",
  D: "f#4 e4!2 g#4 e4!2 f#4 e4 g#4 e4 f#4 e4!5", E: "e3 ~ e4 ~ e3 ~ e4 ~ e3 ~ e4 ~ e3 ~ e4 ~",
  F: "f#3 ~ e4 ~ f#3 ~ e4 ~ f#3 ~ e4 ~ f#3 ~ e4 ~", G: "g#3 ~ e4 ~ g#3 ~ e4 ~ g#3 ~ e4 ~ g#3 ~ e4 ~",
  H: "a3 ~ e4 ~ a3 ~ e4 ~ a3 ~ e4 ~ a3 ~ e4 ~", I: "[e3,e4] [e3,e4]@2 [e3,e4]!2 [e3,e4]@2 [e3,e4]",
  J: "[f#3,f#4]@2 [f#3,f#4]@4 [e3,e4]@2 [f#3,f#4]@3 [e3,e4]@3 [d#3,d#4]@2", // F# E F# E D#
  K: "[f#2,c#3,f#3] [f#2,c#3,f#3]@2 [f#2,c#3,f#3] [a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3]", // F#5 A5
  L: "[e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3] [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]", // E5 B5
  M: "[e2,b2,e3]@2 [e2,b2,e3]@4 [e2,b2,e3]@2 [b2,f#3,b3]@2 ~@4 e4!2", // E5 B5
  N: "[e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3] [b2,f#3,b3] ~@3", // E5 B5
  O: "[e2,b2,e3]@3 [e2,b2,e3]@3 [e2,b2,e3]@4 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2", // E5
  P: "[b2,f#3,b3]@3 [b2,f#3,b3]@3 [b2,f#3,b3]@4 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2", // B5
  Q: "[e2,c#3,g#3]@3 [e2,c#3,g#3]@3 [e2,c#3,g#3]@4 [e2,c#3,g#3]@2 [e2,c#3,g#3]@2 [e2,c#3,g#3]@2", // C#m
  R: "[a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@4 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2", S: "[e3,e4]!8",
  T: "e4@14 e4!2, e3", U: "[[e3,b3,e4]@5 ~]/3",
})).s("gm_distortion_guitar").gain(0.49)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@3 A B C D A B C D A B C D A B C D A B C D A B C D A E F E F E F E G B C D A B C D A B C D A B C D A B C D A B C D A
  E F E F E F E H I J K L I J K L I J K L I J K L B C D A B C D A B C D A B C D A B C D A B C D A M@3
>`.pickRestart({
  A: "a1 a1@2 a1!2 a1@2 a1", B: "e2 e2@2 e2!2 e2@2 e2", C: "b1 b1@2 b1!2 b1@2 b1", D: "c#2 c#2@2 c#2!2 c#2@2 c#2",
  E: "f#1 f#1@2 f#1 a1 a1@2 a1", F: "e1 e1@2 e1 b1 b1@2 b1", G: "e1 e1@2 e1 b1 ~@2 a1", H: "e1 e1@2 e1 b1 ~@3",
  I: "e2@3 e2@3 e2@4 e2@2 e2@2 e2@2", J: "b1@3 b1@3 b1@4 b1@2 b1@2 b1@2", K: "c#2@3 c#2@3 c#2@4 c#2@2 c#2@2 c#2@2",
  L: "a1@3 a1@3 a1@4 a1@2 a1@2 a1@2", M: "[e1@5 ~]/3",
})).s("gm_electric_bass_pick").gain(0.49)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@35 [~@14 x!2] ~@31 [~@14 x!2] [~@5 x!3]!15 ~@28>").gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B@2 C A B@2 C A B@3 A B@2 C A B@2 C A B@2 C ~@8 A B@2 C A B@2 C A B@3 A B@2 C A B@2 C A B@2 C ~@24 A B@2 C A B@2
  C A B@2 C A B@2 C A B@2 C A B@2 C ~@3
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~@3",
})).gain(0.49)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@12 x!2 ~@2] ~@31 [~@12 x!2 ~@2] ~@43>").gain(0.49)

// drums · high tom
const high_tom = s("ht").struct("<~@35 [~@10 x!2 ~@4] ~@31 [~@10 x!2 ~@4] ~@43>").gain(0.49)

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

// drums · ride
const ride = s("rd").struct("<A B@2 C ~@24 A B A B A B A D ~@24 A B A B A B A D ~@43>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!4 ~@4", D: "x!5 ~@3",
})).gain(0.49)

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

More by blink-182