Strudelify

Original Prankster

The Offspring

KeyA minorTempo146 bpm
0:00/0:00
// Original Prankster — The Offspring
// 146 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 28.
setcpm(146/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.

// chords · distortion guitar
const distortion_guitar = note(`<
  A ~ B ~ C ~ D@2 E@6 F ~@7 G H ~@6 G H I@6 G H J K J K J L M N O@2 E@4 F ~@7 G H ~@6 G H I@6 G H J K J K J L M N A ~ B
  ~ C ~ D@2 E@14 G P I@6 G H J K J K J L M Q M N R@3
>`.pickRestart({
  A: "a2!2 c3 a2!2 ~@3", B: "a2!2 c3 a2 a3 a2 c3 a2", C: "a2!2 c3 a2!2 ~@2 d3",
  D: "[a2!2 c3 a2 a3 c3!2 d3@2 d3@2 c3 d3@2 c3@2]/2", E: "[a2!2 c3 a2 a3 c3 e3 d3@2 d3@2 c3 d3@2 c3@2]/2",
  F: "a2!2 c3 a2 a3 c3 e3 d3", G: "[g2,d3]@3 ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~",
  H: "[e3,b3]@3 ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  I: "[[a2,e3]@2 [c3,g3]@2 [e3,b3]@2 [c3,g3] [d3,a3]@3 [d3,a3] [c3,g3] [d3,a3]@2 [c3,g3] [a2,e3]@3 [c3,g3]@2 [e3,b3]@2 [c3,g3] [d3,a3]@3 [d3,a3] [c3,g3] [d3,a3]@2 [c3,g3] [a2,e3]@3 [c3,g3]@2 [e3,b3]@2 [c3,g3] [d3,a3]@3 [d3,a3] [c3,g3] [d3,a3]@2 [c3,g3] [g2,d3]]/6", // A5 C5 E5 C5 D5 C5 D5 C5 …
  J: "[a2,e3,a3] ~ [a2,e3,a3]@2 [a2,e3,a3] a3!2 [a2,e3,a3], ~@5 [a2,e3]@2 ~", // A5
  K: "[d3,a3,d4]!2 [d3,a3,d4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2", L: "[d3,a3,d4]!2 [d3,a3,d4]@2 [g3,d4,g4]!4",
  M: "[g3,d4,g4] ~ [g2,d3,g3] ~@2 [g3,d4,g4] ~ [g2,d3,g3]", N: "~ [g2,d3,g3]!3 [g2,d3,g3]@2 [g#2,d#3,g#3]@2",
  O: "[a2!2 c3 a2 a3 c3 e3 d3@2 d3@2 c3 d3@2 c3@2, [e3,a3] ~@7]/2", P: "[e3,b3,e4]@3 ~@9 [e3,b3,e4]@4",
  Q: "~ [g2,d3]!7", R: "[[a2,e3,a3]@17 ~@7]/3",
})).s("gm_distortion_guitar").gain(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B A C@2 D@6 E ~ F@6 G H F@6 G H I@6 G H J K J K J K L M D@6 E ~ F@6 G H F@6 G H I@6 G H J K J K J K L M N ~@2 A
  B A C@2 F@14 G O I@6 G H J K J K J K L P L M Q@3
>`.pickRestart({
  A: "~@5 f1 g1@2", B: "a1!2 c2 a1!2 ~@2 d2", C: "[a1!2 c2 a1 a2 c2!2 d2@2 d2@2 c2 d2@2 c2@2]/2",
  D: "[a1@2 c2 a1 a2 c2 e2 d2@2 d2@2 c2 d2@2 c2@2]/2", E: "a1@2 c2 a1 a2 c2 e2 d2",
  F: "[~@2 c2 a1 a2 c2 e2 d2@2 d2@2 c2 d2@2 c2@2]/2", G: "g1!8", H: "e2!8",
  I: "[a1@2 c2@2 e2@2 c2 d2@3 d2 c2 d2@2 c2 a1@3 c2@2 e2@2 c2 d2@3 d2 c2 d2@2 c2 a1@3 c2@2 e2@2 c2 d2@3 d2 c2 d2@2 c2 ~]/6",
  J: "a1!4", K: "d2!2 g2!2", L: "g2 ~ g1 ~@2 g2 ~ g1", M: "~ g1!3 g1@2 g#1@2", N: "a1 ~@3", O: "~@3 c2", P: "~ g1!7",
  Q: "[a1@17 ~@7]/3",
})).s("gm_electric_bass_finger").gain(0.4)

// other · alto sax
const alto_sax = note(`<
  ~@16 A ~ A ~ A ~@3 A ~ A ~ A ~@4 B@6 ~@17 A ~ A ~ A ~@3 A ~ A ~ A ~@4 B@6 ~@34 B@6 ~@14
>`.pickRestart({
  A: "~@2 e4 ~ e4 ~@3", B: "[~@2 d5 c5 d5@2 c5 a4@2 ~@7]/2",
})).s("gm_alto_sax").gain(0.4)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@16 A@4 B C@7 D E@8 ~@19 F@8 G@6 ~@63>".pickRestart({
  A: "[a2!2 c3 a2 a3 c3 e3 d3@2 d3@2 c3 d3@2 c3@2]/2", B: "a2!2 c3 a2 a3 c3 e3 d3",
  C: "[~ d3@2 c3 d3@2 ~@18 a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 ~@2 a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 c3@2, ~@6 c3@20 c3@3 c3@6 c3@3 c3@4 c3@3 c3@6 c3@3 ~@2]/7",
  D: "a2!2 ~ a2 a3 ~ e3 d3, ~@2 c3@3 c3@3", E: "[~ d3@2 ~ d3@2 c3@58, ~@3 c3@3 ~@58]/8",
  F: "[a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 ~@2 a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 ~@2 a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 c3@18, ~@2 c3@3 c3@6 c3@3 c3@4 c3@3 c3@6 c3@3 c3@4 c3@3 c3@6 c3@3 ~@18]/8",
  G: "[a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 ~@2 a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 ~@2 a2!2 ~ a2 a3 ~ e3 d3@2 d3@2 ~ d3@2 ~@2, ~@2 c3@3 c3@6 c3@3 c3@4 c3@3 c3@6 c3@3 c3@14 ~@4]/6",
})).s("gm_electric_guitar_muted").gain(0.4)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@7 A ~@6 B ~@24 A ~@7 A ~@6 B ~@32 A ~@6 B ~ B ~@4>".pickRestart({
  A: "x ~ x!4 ~@2", B: "~ x",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@27 B ~@7 B ~@7 C ~@23 B ~@7 B ~@7 C ~@3 A ~@27 B ~@7 D ~ C ~@3>".pickRestart({
  A: "~@3 x", B: "x ~ x!4 ~ x", C: "~@2 x!5 ~", D: "~ x!7",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ B ~ B C D@7 ~@23 D ~@9 D@7 ~@23 D ~@24 E F G@5 ~@8 D ~@11 H ~@2
>`.pickRestart({
  A: "~ x", B: "~@7 x", C: "~ x ~@6", D: "x!4", E: "~@6 x!2", F: "x ~@2 x", G: "~ x ~ x", H: "x",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A B ~ B ~ B ~ B C B ~ B ~ B ~ D@2 B ~ B ~ B ~ D E D@6 ~ E D@6 F G B ~ B ~ B ~ B C B ~ B ~ B ~ D@2 B ~ B ~ B ~ D E
  D@6 ~ E D@6 F G ~@15 H B ~ B ~ B ~ B@2 D@6 ~ E D@6 F ~ F H B ~@2
>`.pickRestart({
  A: "~ x", B: "x", C: "~@3 x", D: "x!4", E: "x ~@5 x!2", F: "x ~ x ~@2 x ~ x", G: "x ~@6 x", H: "~@7 x",
})).gain(0.26)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@8 A B A B A B A ~ A B A B A B ~@2 A B A B A B ~@18 A B A B A B A ~ A B A B A B ~@2 A B A B A B ~@34 A B A B A B C D
  ~@21
>`.pickRestart({
  A: "~@3 x!2 ~ x ~", B: "x!2 ~@3 x!3", C: "~ x ~ x ~ x!2 ~", D: "~@2 x ~@3 x ~ x ~ x!3 ~@3",
})).gain(0.26)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@7 [~@3 x] ~@125>").gain(3.01)

// drums · bongos
const bongos = s("bongo:18").struct("<~ A ~ A ~ A ~@83 A ~ A ~ A ~@39>".pickRestart({
  A: "~ x ~@6",
})).gain(0.67)

// drums · congas
const congas = s("conga:18").struct("<~ A ~ A ~ A ~@83 A ~ A ~ A ~@39>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.82)

// drums · congas
const congas_2 = s("conga:33").struct("<~ A ~ A ~ B ~@83 A ~ A ~ B ~@39>".pickRestart({
  A: "~@5 x!2 ~", B: "~@5 x ~@2",
})).gain(0.82)

// drums · ht
const ht = s("ht").struct("<~ A ~ B ~@3 C ~@81 A ~ B ~@41>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@5 x ~@2", C: "~@2 x!2",
})).gain(0.26)

// drums · guiro
const guiro = s("guiro:4").struct("<~@16 A@6 ~@2 A@6 ~@26 A@6 ~@2 A@6 ~@26 A@14 ~@23>".pickRestart({
  A: "x!2",
})).gain(5.41)

stack(
  distortion_guitar, bass, alto_sax, electric_guitar_muted, kick, snare, hihat, low_tom, mid_tom, open_hat, crash,
  cowbell, vibraslap, bongos, congas, congas_2, ht, guiro
)

More by The Offspring