Strudelify
Pulling Teeth cover art

1994 · Dookie

Pulling Teeth

Green Day

KeyE♭ majorTempo97 bpm
0:00/0:00
// Pulling Teeth — Green Day
// 97 bpm, 3/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97/3)

// 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 · overdriven guitar · "Guitar 1 - Electric"
const overdriven_guitar = note(`<
  A B C B C B C B D E@2 F@2 E@2 G@2 H@2 F@2 E@2 G@2 I@2 J@2 I@2 B D E@2 F@2 E@2 G@2 E@2 F@2 E@2 G@2 I@2 J@2 I@2 B C B C
  B C B C B C B D E@2 F@2 E@2 K L@4
>`.pickRestart({
  A: "[bb2,f3]!3 ~ [bb2,f3]@2 ~@2", B: "[bb2,f3,bb3]!8", C: "[ab2,eb3,ab3]!5 [bb2,f3,bb3] [c3,ab3,c4] [ab2,eb3,ab3]",
  D: "[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@3 ~@5", // Bb5
  E: "[[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!3 [c3,ab3,c4]@2 [c3,ab3,c4]!7]/2", // Bb5 Fm
  F: "[[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!3 [d3,bb3,d4]@2 [d3,bb3,d4]!7]/2", // Bb5 Gm
  G: "[[g2,d3,g3]@2 [g2,d3,g3]@2 [d3,bb3,d4]!3 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!7]/2", // G5 Gm Eb5
  H: "[[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!3 [c3,ab3,c4]@2 [c3,g3,c4] [c3,ab3,c4]!6]/2", I: "[c3,g3,c4]!8",
  J: "[[bb2,f3,bb3]!7 [bb2,f3,bb3]@2 [bb2,f3,bb3]!7]/2", K: "[g2,d3,g3]@6 [g2,d3,g3]@5 [ab2,eb3,ab3]@5",
  L: "[~ [bb2,f3,bb3]@6 [bb2,eb3,bb3,eb4]@44 ~@13]/4", // Bb5 Eb5
})).s("gm_overdriven_guitar").gain(0.72)

// other · distortion guitar · "Guitar 2 - Distortion"
const distortion_guitar = note("<~@2 A B A B A B ~@32 C D@2 E@2 F@2 G@3 ~@6 A B A B A B A B A B ~@12>".pickRestart({
  A: "~@5 c4 eb4 c4", B: "d4@7 ~@9", C: "~@6 bb3 eb3",
  D: "[[c4,c5]@4 [bb3,bb4]@4 [g3,g4]@2 [bb3,bb4]@4 [c4,c5]@4 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [g3,g4]@2 [bb3,bb4]@5 ~]/2", // C Bb G Bb C G Bb
  E: "[[c4,c5]@2 [bb3,bb4]@2 [g3,g4] [bb3,bb4]@2 [d4,d5]@2 [eb4,eb5]@2 [f4,f5]@2 [eb4,eb5] [d4,d5] [eb4,eb5]]/2", // C Bb G Bb D Eb F Eb …
  F: "[[eb3,eb4]!2 [g3,g4] [eb3,eb4] [g3,g4] [ab3,ab4] [g3,g4] [bb3,bb4]@2 [bb3,bb4] [ab3,ab4]!2 [g3,g4]!3 [ab3,ab4]]/2", // Eb G Eb G Ab G Bb Ab …
  G: "[[g3,g4]@4 [g3,g4]@4 [f3,f4]@2 [f3,f4]@2 [eb3,eb4]@2 [eb3,eb4]@4 [g3,g4]@2 [ab3,ab4]@2 [g3,g4]@2 [ab3,ab4]@2 [bb3,bb4]@2 [d4,d5]@2 [eb4,eb5]@11 ~@7]/3", // G F Eb G Ab G Ab Bb …
})).s("gm_distortion_guitar").gain(0.72)

// bass · fretless bass · "Guitar 3 - Bass"
const bass = note(`<
  ~ A B A B A B A C D@2 E@2 F@2 G@2 D@2 E@2 F@2 H@2 I@2 A J I K A C F@2 L@2 F@2 M@2 F@2 E@2 F@2 M@2 I@2 A J I K A B A B
  A B A B A B A C F@2 L@2 N@2 O P@4
>`.pickRestart({
  A: "bb2!8", B: "ab2!5 bb2 c3 ab2", C: "bb2@2 bb2@2 bb2@2 bb2@2 bb2@3 ~@5",
  D: "[eb2@2 eb2@2 eb2 f2 g2 ab2@2 ab2@2 ab2!4 bb2]/2", E: "[eb2@2 eb2@2 eb2 g2 ab2 bb2@2 bb2!6 c3]/2",
  F: "[eb2@2 eb2@2 eb2 f2 g2 ab2@2 ab2!6 bb2]/2", G: "[eb2@2 eb2@2 bb2!3 eb2@2 eb2!6 bb2]/2",
  H: "[eb2@4 eb2@4 bb2@2 bb2@2 bb2@2 eb2@4 eb2@2 eb2@2 eb2@2 eb2@3 ~@5]/2", I: "c3!8", J: "bb2 eb3@2 d3@2 c3@2 g2",
  K: "c3!7 ab2", L: "[eb2@2 eb2@2 eb2 g2 ab2 bb2@2 bb2!3 eb3 f3 eb3 c3]/2", M: "[eb2@2 eb2@2 bb2!3 eb2@2 eb2!7]/2",
  N: "[eb2@2 eb2@2 eb2 f2 g2 ab2@2 ab2!3 eb3 f3 eb3 bb2]/2", O: "eb2@6 bb2@5 ab2@5", P: "[~ bb2@6 eb2@44 ~@13]/4",
})).s("gm_fretless_bass").gain(0.72)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~ A@7 ~ B A@14 C A@7 ~ B A@6 C A@7 D A@17 ~ B A@5 E F ~@3>".pickRestart({
  A: "x!8", B: "x ~ x!6", C: "x!5 ~@3", D: "x!3 ~@5", E: "x ~@5 x ~@4 x ~@4", F: "~ x ~@5 x ~@8",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@9 A ~@23 A ~@33 A ~@7 B C A>".pickRestart({
  A: "x", B: "~@14 x!2", C: "x!14 ~@2",
})).gain(0.72)

// drums · splash
const splash = s("cr").struct("<~@9 x ~@23 x ~@33 x ~@10>").gain(0.72)

stack(overdriven_guitar, distortion_guitar, bass, kick, snare, open_hat, ride, splash)

More by Green Day