Strudelify
Last Resort cover art

2000 · Infest

Last Resort

Papa Roach

KeyG majorTempo92 bpm
0:00/0:00
// Last Resort — Papa Roach
// 92 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 68, 4/4 at bar 69) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 4 "Distortion Guitar" distortion guitar (copy of ch 3 "Overdrive Guitar 2" overdriven guitar)
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/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.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B A B A C A B A C A B A D E F E F A C A B G H A B I J E F E F E K E K L M L N A B A B A B A B O P O J E F E F E
  K E K E F E F E Q R Q R Q R S T
>`.pickRestart({
  A: "e2@3 ~@5 d2@3 ~@5", B: "c2@3 ~@5 b1@3 ~ d2@3 ~", C: "c2@3 ~@5 b1@3 ~ d2!2 d3 ~", D: "c2@3 ~@5 b1!4 d2!4",
  E: "e2!8 c2!8", F: "d2!16", G: "e2@3 ~@4 e2 d2 ~ d3@2 d2 ~ d2 ~", H: "c2 c2@2 ~@5 b1 b1@2 ~ b1 ~ d2 ~",
  I: "e2@3 ~@4 e2 d2 ~ d3 ~ d2 ~ d2 ~", J: "c2 c2@2 ~@5 b1!4 d2!4", K: "g1!8 b1!8", L: "e2!8 g1!8",
  M: "c2!8 b1!4 d#2 c#2 b1!2", N: "c2!8 b1!8", O: "e2 e2@2 ~@5 d2 d2@2 ~@5", P: "c2 c2@2 ~@5 b1 b1@2 ~ d2 d2@2 ~",
  Q: "d2!8 e2!8", R: "c2!8 d2!8", S: "d2!8 e2!7 e1", T: "e1!3 e2 e1@2 ~@10",
})).s("gm_fretless_bass").gain(0.54)

// chords · overdriven guitar · "Overdrive Guitar 1"
const overdriven_guitar = note(`<
  ~@2 A B A B A B A B A B A B A B C D C E A B A B A B A B A B C D C D F G F H I J I J A B A B A B A B A B A B C D C E F
  G F H F K F K F L M@4 N@3
>`.pickRestart({
  A: "[e3,g3,b3]@3 ~@5 [d3,f#3,a3]@3 ~@5", B: "[c3,e3,g3]@3 ~@5 [b2,f#3]@3 ~ [d3,f#3,a3]@3 ~", C: "[e3,b3] [c3,g3]",
  D: "f#4 g4 a4 f#4, [d3,a3]", E: "f#4 g4 a4@2, [d3,a3]", F: "[e3,g3,b3] [c3,g3]", G: "[g2,d3] [b2,d3,f#3]",
  H: "[g2,d3] [b2,e3,f#3]", I: "[e3,g3,b3] [g2,d3]", J: "[c3,g3] [b2,f#3]", K: "f#4 g4 a4 f#4, [d3,f#3,a3]",
  L: "[d3,f#3,a3] [e3,g3,b3]", M: "[[c3,g3]@2 f#4 g4 a4 f#4 [e3,g3,b3]@2, ~ [d3,f#3,a3]@2 ~]/2",
  N: "[[c3,g3]@8 f#4@4 g4@4 a4@4 f#4@4 [e3,g3,b3]@11 ~ [e3,g3,b3]@2 ~@10, ~ [d3,f#3,a3]@2 ~@3]/3", // C5 Em D
})).s("gm_overdriven_guitar").gain(0.31)

// other · overdriven guitar · "Overdrive Guitar 2"
const overdriven_guitar_2 = note(`<
  ~@4 A B A B C D C D C D C E F G F H A B C D C D C D C E F G F G I J I K L M L M N O N O N O N O A B A B F G F H I J I
  K I P I P I Q R@4 S@3
>`.pickRestart({
  A: "e4 g4 f#4 g4 b4 g4 f#4 g4 d4 g4 f#4 g4 b4 g4 f#4 g4", B: "c4 g4 f#4 g4 b4 g4 f#4 g4 b3 g4 f#4 g4 b4 g4 f#4 g4",
  C: "e3 g3 f#3 g3 b3 g3 f#3 g3 d3 g3 f#3 g3 b3 g3 f#3 g3", D: "c3 g3 f#3 g3 b3 g3 f#3 g3 b2 g3 f#3 g3 b3 g3 f#3 g3",
  E: "c3 g3 f#3 g3 b3 g3 f#3 g3 [b2,f#3]@4 [d3,a3]@4", F: "[e3,b3] [c3,g3]", G: "f#4 g4 a4 f#4, [d3,a3]",
  H: "f#4 g4 a4@2, [d3,a3]", I: "[e3,g3,b3] [c3,g3]", J: "[g2,d3] [b2,d3,f#3]", K: "[g2,d3] [b2,e3,f#3]",
  L: "[e3,g3,b3] [g2,d3]", M: "[c3,g3] [b2,f#3]", N: "[e3,g3,b3] ~@3 [d3,f#3,a3] ~@3",
  O: "[c3,e3,g3] ~@3 [b2,f#3] ~ [d3,f#3,a3] ~", P: "f#4 g4 a4 f#4, [d3,f#3,a3]", Q: "d3!8 [e3,g3,b3]@8",
  R: "[[c3,g3]@2 f#4 g4 a4 f#4 [e3,g3,b3]@2, ~ [d3,f#3,a3]@2 ~]/2", // C5 Em D
  S: "[[c3,g3]@8 f#4@4 g4@4 a4@4 f#4@4 [e3,g3,b3]@11 ~ [e3,g3,b3]@2 ~@10, ~ [d3,f#3,a3]@2 ~@3]/3", // C5 Em D
})).s("gm_overdriven_guitar").gain(0.35).pan(0.6)

// other · lead 1 square · "Square Wave"
const lead_1_square = note("<~@8 A B A B A B A C ~@6 A B A B A B A C ~@37 D ~@7>".pickRestart({
  A: "e3 g3 f#3 g3 b3 g3 f#3 g3 d3 g3 f#3 g3 b3 g3 f#3 g3", B: "c3 g3 f#3 g3 b3 g3 f#3 g3 b2 g3 f#3 g3 b3 g3 f#3 g3",
  C: "c3 g3 f#3 g3 b3 g3 f#3 g3 ~@8", D: "d3!8 ~@8",
})).s("gm_lead_1_square").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C D C D C D C E C D C F G H G H C D C D C D C D C F G H G H I@2 J K L M L C A B A B C D C D C E C F G@3 N G H
  G@2 O@3 P I Q R S R T U V W
>`.pickRestart({
  A: "x!2", B: "x ~@7 x!2 ~@2 x!2 ~@2", C: "x!2 ~@6 x!2 ~@6", D: "x!2 ~@6 x!2 ~@2 x!2 ~@2", E: "x!2 ~@6 x!2 ~@3 x ~@2",
  F: "x!2 ~@4 x ~ x!8", G: "~ x!3 ~ x!3 ~ x!3 ~ x!3", H: "~ x!3 ~ x!3 ~ x!3 ~ x ~ x", I: "x!2 ~@2 x!2 ~@2",
  J: "x ~ x!2 ~@4 x ~ x ~@3 x ~", K: "x!2 ~@6 x ~ x ~@3 x ~", L: "~ x!3 ~@2 x ~ x!2 ~@4 x ~", M: "x!2 ~@6 x!2 ~@4 x ~",
  N: "~ x!3 ~ x!3 ~ x!3 ~@2 x ~", O: "x!2 ~ x ~@2 x ~ x!2 ~ x ~@2 x ~", P: "x!2 ~ x ~@2 x ~ x!2 ~ x ~@4",
  Q: "~@4 x!2 ~@2", R: "x!2 ~@2 x ~ x ~", S: "x ~@3 x!2 ~@2", T: "x ~ x ~ x!2 ~@2", U: "x!2 ~@2 x ~@3",
  V: "~@4 x!2 ~ x", W: "~ x ~ x!2 ~@11",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@13 A ~@3 A ~@19 A ~@13 B ~@3 C ~ D ~>".pickRestart({
  A: "~@15 x", B: "x!8 ~@8", C: "~@7 x ~@8", D: "~@4 x!4 ~@8",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A@7 B C@4 D A D A D A D A D B C@4 D A D A D A D A ~@8 D A@2 B C@8 ~@13
>`.pickRestart({
  A: "x!16", B: "x!8 ~@8", C: "x!8", D: "~ x!15",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@3 B ~@9 A ~@23 A ~@3 C ~@7 D ~ E ~ F ~ G ~ H ~>".pickRestart({
  A: "~@13 x!2 ~", B: "~@7 x", C: "~@15 x", D: "~@14 x!2", E: "x!8 ~@8", F: "~@3 x ~@2 x!2 ~@8", G: "~@3 x ~@4",
  H: "x!4 ~@12",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@33 [~@7 x] ~@41>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@13 B A C A@2 ~ A ~ A ~ A ~ A ~ D B D A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B A B A B A B A@2 ~ A ~ A E C D
  A E ~@2 F
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~ x!2", D: "x!2", E: "~ x", F: "~ x ~@2",
})).gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct("<~@62 A B A B A C D E A F B@2 G>".pickRestart({
  A: "~ x!15", B: "x!16", C: "~@9 x!7", D: "~ x!7 ~ x!3 ~ x!3", E: "~ x!7 ~ x!7", F: "x!8 ~ x!7", G: "x!4 ~@12",
})).gain(0.32)

stack(
  bass, overdriven_guitar, overdriven_guitar_2, lead_1_square, kick, snare, low_tom, hihat, mid_tom, high_tom, crash,
  ride_bell
)

More by Papa Roach