Strudelify
What's My Age Again cover art

Enema Of The State

What's My Age Again

blink-182

KeyF♯ majorTempo160 bpm
0:00/0:00
// What's My Age Again — blink-182
// 160 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar, guitar.
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.

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note("<A@8 B@8 C@2 ~@6 D@4 E F E F E F E G H ~@9 I@8 J@8 ~@9 K@16 L@2 M@4>".pickRestart({
  A: "[~@5 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~ f#4, ~ f#3 c#3 d#3 b2 f#3 c#3 d#3 b2 f#3 c#3 d#3 b2 f#3 c#3 d#3, ~@3 a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4, ~@7 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@3]/8",
  B: "[~ f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~@3 f#4 ~ f#4, b2 f#3 c#3 d#3 b2 f#3 c#3 d#3 b2 f#3 c#3 d#3 b2 f#3 c#3!2, ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4, ~@3 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~@3]/8",
  C: "[~ f#4 ~@3 f#4 ~ f#4@2 ~@7, b2!2 ~@2, ~ a#4 ~ a#4 ~@4, ~@3 f#4@2 ~@11]/2",
  D: "[~ f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4, ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4]/4",
  E: "b2 ~ b2 ~ b2 ~ b2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~", F: "c#3 ~ c#3 ~ c#3 ~ c#3 ~ d#3 ~ d#3 ~ d#3 ~ d#3 ~",
  G: "c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~", H: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  I: "[~@2 a#4@2 f#4@6 a#4@2 ~@6 a#4@2 f#4@6 a#4@2 ~@5 f#3!3 ~@5 f#3!3 ~@5 f#3!3 ~@5 f#3!3 ~ b3@3, ~@12 f#4@6 ~@10 f#4@6 ~@3 b3@5 ~@3 b3@5 ~@3 b3@5 ~@6, ~@16 b3@8 ~@12 a#3@3 ~@5 a#3@3 ~@5 a#3@3 ~@5 a#3@3 ~]/8",
  J: "[~ f#3@2 ~@2 f#3 ~ a#3@2 ~@4 f#3 ~ a#3@2 ~@4 f#3 ~ a#3@2 ~@4 f#3 ~ a#3@2 ~@4 f#3 ~ a#3@2 ~@4 f#3 ~ a#3@2 ~@4 f#3 ~ a#3@2 ~@4 f#3@2 ~, ~@3 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~ f#3@2 ~ f#3@2 f#3@2 ~@3, ~@2 f#4@2 ~ a#3 f#4@2 ~ a#3 f#4@2 ~ a#3 f#4@2 ~ a#3 f#4@2 ~ a#3 f#4@2 ~ a#3 f#4@2 ~ a#3 f#4@2]/8",
  K: "[~ f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4, ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4 ~ a#4]/8",
  L: "[~ f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@2 f#4 a#4@2, ~ a#4 ~ a#4 ~ a#4 ~@2]/2", M: "[b2@31 ~]/4",
})).s("gm_overdriven_guitar").gain(0.47)

// chords · overdriven guitar · "guitar"
const overdriven_guitar_2 = note(`<
  ~@17 A B C B C B C D E F@2 ~@9 A B C B C B C D E G@2 ~@14 A B C B C B C D E A B C B C B C D E A B C B C B C D E H@4
>`.pickRestart({
  A: "[f#2,c#3,f#3]@3 [c#3,g#3,c#4]!4 [d#3,a#3,d#4]", B: "[d#3,a#3,d#4]!3 [b2,f#3,b3]!5",
  C: "[f#2,c#3,f#3]!3 [c#3,g#3,c#4]!4 [d#3,a#3,d#4]", D: "[d#3,a#3,d#4]!8", E: "[c#3,g#3,c#4]!8", F: "[b2,b3]/2",
  G: "[d#3,d#4]/2", H: "[[b2,f#3,b3]@31 ~]/4",
})).s("gm_overdriven_guitar").gain(0.47).pan(0.7)

// chords · electric guitar muted · "guitar"
const electric_guitar_muted = note("<~@28 A B A B A B A C D ~@56>".pickRestart({
  A: "[f#2,b2]!4 [f#2,c#3]!4", B: "[g#2,c#3]!4 [a#2,d#3]!4", C: "[g#2,c#3]!8", D: "[f#2,b2]!8",
})).s("gm_electric_guitar_muted").gain(0.47)

// chords · electric guitar clean · "guitar"
const electric_guitar_clean = note("<~@54 [~ a#3 ~@2] ~@38>").s("gm_electric_guitar_clean").gain(0.38)

// chords · electric guitar clean · "guitar" · soft notes
const electric_guitar_clean_2 = note("<~@50 A@5 ~@38>".pickRestart({
  A: "[~@9 b3@2 ~@6 b3@2 ~@6 b3@2 ~@6 b3@2 ~@5, ~@3 a#3 a#3 ~@2 a#3 a#3 ~@2 a#3 a#3 ~@2 a#3 a#3 ~@3, ~@7 b3@2 ~@6 b3@2 ~@6 b3@2 ~@6 b3@2 ~@7]/5",
})).s("gm_electric_guitar_clean").gain(0.15)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@4 A B A B A B A B A B A C D E F E F E F E G C H I A B A B A B A C D E F E F E F E G C G C D C G C D C G C D C G C D
  C E F E F E F E G C E F E F E F E G C E F E F E F E G C J@4
>`.pickRestart({
  A: "b1!4 f#1!4", B: "c#2!4 d#2!4", C: "c#2!8", D: "b1!8", E: "f#1!4 c#2!4", F: "d#2!4 b1!4", G: "d#2!8", H: "b1 f#1",
  I: "c#2 d#2", J: "[b1@31 ~]/4",
})).s("gm_electric_bass_finger").gain(0.68)

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

// drums · rim
const rim = s("rim").struct("<~@49 [~@3 x] [~ x ~ x]!3 [~@2 x ~@2 x!2 ~] [~ x ~ x]!7 [~ x ~@2] ~@31>").gain(0.68)

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

// drums · low tom
const low_tom = s("lt").struct("<~@61 [~@3 x] ~@31>").gain(0.54)

// drums · hihat
const hihat = s("hh").struct("<~@12 [~@2 x!6] [x!8]!2 ~@11 [~ x!3] [x!4] [x!8]!7 ~@58>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@3 B C D@9 E ~@9 F D@9 E ~@13 G D@28 E ~@3>".pickRestart({
  A: "~@7 x", B: "x ~@2 x ~@2 x ~", C: "~ x ~@2 x ~@3", D: "x!4", E: "x", F: "~ x", G: "~@2 x!2",
})).gain(0.68)

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A B C ~ C ~ C ~ C ~@11 A B C ~ C ~ C ~ C ~@17 D C ~ C ~ C ~ C ~@2 C ~ C ~ C ~ C ~@2 C ~ C ~ C ~ C ~@2 C ~@3
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x ~@6", C: "x", D: "~@2 x!2",
})).gain(0.68)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@60 [~@2 x!2] [x!2 ~@2] ~@31>").gain(0.14)

// drums · ride
const ride = s("rd").struct("<~@3 A B C@6 D ~@34 E F@2 C@12 ~@32>".pickRestart({
  A: "~@7 x", B: "x ~@5 x ~ x ~ x ~ x ~ x!2", C: "x!8", D: "x!7 ~", E: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2",
  F: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.41)

stack(
  overdriven_guitar, overdriven_guitar_2, electric_guitar_muted, electric_guitar_clean, electric_guitar_clean_2, bass,
  kick, rim, snare, low_tom, hihat, open_hat, crash, crash_soft, ride
)

More by blink-182