Strudelify

Platypus (I Hate You)

Green Day

KeyE majorTempo194 bpm
0:00/0:00
// Platypus (I Hate You) — Green Day
// 194 bpm, 3/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1, 3/4 at bar 10) are rendered on a constant 3/4 grid of one bar per cycle
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(194/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 · "Billie Joe - Elec. Guitar"
const overdriven_guitar = note(`<
  A B C@2 D B E F G H I E F G H J K L M E F E N O N O P G K E N O N O N Q R S T U V W K E F G H J K L M E F G H J K L M
  ~@75
>`.pickRestart({
  A: "~@11 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // B5
  B: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [g2,d3,g3]@3 [g2,d3,g3] [f#2,c#3,f#3]@3 [f#2,c#3,f#3] [f#2,c#3,f#3]@3", // B5 G5 F#5
  C: "[[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [g2,d3,g3]@2 [g2,d3,g3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3]/2", // B5 G5 F#5 B5
  D: "[g2,d3,g3]@3 [g2,d3,g3] [f#2,c#3,f#3]@3 [f#2,c#3,f#3] [f#2,c#3,f#3]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // G5 F#5 B5
  E: "[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [a2,e3,a3]@2 [a2,e3,a3] ~ [a2,e3,a3]", // B5 A5
  F: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [e3,b3,e4]@3 [e3,b3,e4]!2 ~ [e3,b3,e4]!2 [e3,b3,e4]@3", // A5 E5
  G: "[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // B5
  H: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [a2,e3,a3]@3 [a2,e3,a3]!2 ~ [a2,e3,a3]!2 [a2,e3,a3]@3", // B5 A5
  I: "[e3,b3,e4]@3 ~@5 [a2,e3,a3]@3 [a2,e3,a3]@2 [a#2,f3,a#3]@3", // E5 A5 A#5
  J: "[e3,b3,e4]@3 [e3,b3,e4]!3 ~ [e3,b3,e4] [e3,b3,e4]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // E5 B5
  K: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // B5
  L: "[a2,e3,a3]@3 [a2,e3,a3]!3 ~ [a2,e3,a3] [a2,e3,a3]@3 [e3,b3,e4]@2 [e3,b3,e4] ~ [e3,b3,e4]", // A5 E5
  M: "[e3,b3,e4]!2 ~ [e3,b3,e4]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // E5 B5
  N: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [a2,e3,a3]@3 [a2,e3,a3]!2 ~ [a2,e3,a3]!2 [a2,e3,a3]@3", // A5
  O: "[a2,e3,a3]@3 [a2,e3,a3]!3 ~ [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 [a2,e3,a3] ~ [a2,e3,a3]", // A5
  P: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [a2,e3,a3]@3 [e3,b3,e4]@3 [e3,b3,e4]@2 [e3,b3,e4]@3", // A5 E5
  Q: "[f#2,c#3,f#3]@3 [f#2,c#3,f#3]!3 ~ [f#2,c#3,f#3] [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3]", // F#5
  R: "[f#2,c#3,f#3]!2 ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]!2 ~ [f#2,c#3,f#3]!2 [f#2,c#3,f#3]@3", // F#5
  S: "[f#2,c#3,f#3]@3 [e3,b3,e4]@2 [e3,b3,e4]@3 [e3,b3,e4]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // F#5 E5 B5
  T: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [b2,f#3,b3]@3 [e3,b3,e4]@3 [e3,b3,e4]@2 [e3,b3,e4]@3", // B5 E5
  U: "[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [b2,f#3,b3]@2 [e3,b3,e4]@3", // B5 E5
  V: "[e3,b3,e4]@3 [e3,b3,e4]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // E5 B5
  W: "[b2,f#3,b3]@3 [e3,b3,e4]@2 [e3,b3,e4]@3 [e3,b3,e4]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // B5 E5 B5
})).s("gm_overdriven_guitar").gain(0.26)

// bass · electric bass pick · "Mike - Bass Guitar"
const bass = note(`<
  A B C@2 D B E ~@3 F G H I J K I L M G H G N@4 O I@2 G N@5 P@2 Q R S M T I G H I J K I L M G H I J K I L M N@4 U M I@2
  N@5 V P W S M T R I@2 X Y Z@2 X Y Z@2 X Y P@5 AA L M G H I J K I L M N@4 U M I@2 N@5 V P W S M T R I AB ~@3 AC AD
>`.pickRestart({
  A: "~@11 b1@2 b1 ~ b1", B: "b1!2 ~ b1@2 g1@3 g1 f#1@3 f#1 f#1@3",
  C: "[b1@3 b1!3 ~ b1 b1@3 g1@2 g1 ~ f#1@2 f#1 ~ f#1@2 b1@3 b1!2 ~ b1!2 b1@3]/2",
  D: "g1@3 g1 f#1@3 f#1 f#1@3 b1@2 b1 ~ b1", E: "b1@3 ~@13", F: "e2@3 ~@5 a1@3 a1@2 a#1@3",
  G: "b1@3 b1@2 b1@3 b1@3 a1@2 a1@3", H: "a1@3 a1@2 e2@3 e2@3 e2@2 e2@3", I: "b1@3 b1@2 b1@3 b1@3 b1@2 b1@3",
  J: "b1@3 b1@2 a1@3 a1@3 a1@2 a1@3", K: "e2@3 e2@2 e2@3 e2@3 b1@2 b1@3", L: "a1@3 a1@2 a1@3 a1@3 e2@2 e2@3",
  M: "e2@3 e2@2 b1@3 b1@3 b1@2 b1@3", N: "a1@3 a1@2 a1@3 a1@3 a1@2 a1@3", O: "a1@3 a1@2 a1@3 e2@3 e2@2 e2@3",
  P: "f#1@3 f#1@2 f#1@3 f#1@3 f#1@2 f#1@3", Q: "f#1@3 e2@2 e2@3 e2@3 b1@2 b1@3", R: "b1@3 b1@2 b1@3 e2@3 e2@2 e2@3",
  S: "b1@3 b1@2 b1@3 b1@3 b1@2 e2@3", T: "b1@3 e2@2 e2@3 e2@3 b1@2 b1@3", U: "a1@3 a1@2 a1@3 a1@3 a1@2 e2@3",
  V: "a1@3 a1@2 f#1@3 f#1@3 f#1@2 f#1@3", W: "f#1@3 f#1@2 f#1@3 e2@3 e2@2 e2@3", X: "g1@3 g1 f#1@4 f#1@3 b1@2 b1@3",
  Y: "b1@3 b1@2 g1@3 g1 f#1@4 f#1@3", Z: "[b1@3 b1@2 b1@3 b1@3 g1@2 g1 ~ f#1@4 f#1@2 b1@3 b1@3 b1@2 b1@3]/2",
  AA: "f#1@3 f#1@2 b1@3 b1@3 b1@2 b1@3", AB: "b1@3 b1@2 b1@3 ~@8", AC: "~@5 e2@3 ~@5 a1@3", AD: "a1@3 a#1@2 b1@4 ~@7",
})).s("gm_electric_bass_pick").gain(0.31)

// chords · overdriven guitar · "Billie Joe - Elec. Guitar"
const overdriven_guitar_2 = note(`<
  ~@59 A B A B C D E F A B A B A G H I J D K L E F M N O@2 M N O@2 M N H P Q R S T U V W X E Y Z F U V A B A B C D E F A
  B A B A G H I J D K L E F U V W AA AB
>`.pickRestart({
  A: "[a2,e3,a3]@3 [a2,e3,a3]!3 ~ [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 [a2,e3,a3] ~ [a2,e3,a3]", // A5
  B: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [a2,e3,a3]@3 [a2,e3,a3]!2 ~ [a2,e3,a3]!2 [a2,e3,a3]@3", // A5
  C: "[a2,e3,a3]@3 [a2,e3,a3]!3 ~ [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 [e3,b3,e4]@3", // A5 E5
  D: "[e3,b3,e4]@3 [e3,b3,e4]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // E5 B5
  E: "[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // B5
  F: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // B5
  G: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]!2 ~ [f#2,c#3,f#3]!2 [f#2,c#3,f#3]@3", // A5 F#5
  H: "[f#2,c#3,f#3]@3 [f#2,c#3,f#3]!3 ~ [f#2,c#3,f#3] [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3]", // F#5
  I: "[f#2,c#3,f#3]!2 ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@3 [e3,b3,e4]@3 [e3,b3,e4]@2 [e3,b3,e4]@3", // F#5 E5
  J: "[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [b2,f#3,b3]@2 [e3,b3,e4]@3", // B5 E5
  K: "[b2,f#3,b3]@3 [e3,b3,e4]@2 [e3,b3,e4]@3 [e3,b3,e4]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // B5 E5 B5
  L: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [b2,f#3,b3]@3 [e3,b3,e4]@3 [e3,b3,e4]@2 [e3,b3,e4]@3", // B5 E5
  M: "[g2,d3,g3]@3 [g2,d3,g3] [f#2,c#3,f#3]@3 [f#2,c#3,f#3] [f#2,c#3,f#3]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // G5 F#5 B5
  N: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [g2,d3,g3]@3 [g2,d3,g3] [f#2,c#3,f#3]@3 [f#2,c#3,f#3] [f#2,c#3,f#3]@3", // B5 G5 F#5
  O: "[[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [g2,d3,g3]@2 [g2,d3,g3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3]/2", // B5 G5 F#5 B5
  P: "[f#2,c#3,f#3]!2 ~ [f#2,c#3,f#3]@2 [c#3,f#3,a#3]@3 [c#3,f#3,a#3]!2 ~ [c#3,f#3,a#3]!2 [c#3,f#3,a#3]@3", // F#5 F#
  Q: "[c#3,f#3,a#3]@3 [c#3,f#3,a#3]!3 ~ [c#3,f#3,a#3] [c#3,f#3,a#3]@3 [f#3,a#3,c#4]@2 [f#3,a#3,c#4] ~ [f#3,a#3,c#4]", // F#
  R: "[f#3,a#3,c#4]!2 ~ [f#3,a#3,c#4]@2 [f#3,a#3,c#4]@3 [f#3,a#3,c#4]!2 ~ [f#3,a#3,c#4]!2 [f#3,a#3,c#4]@3", // F#
  S: "[a#3,c#4,f#4]@3 [a#3,c#4,f#4]!3 ~ [a#3,c#4,f#4] [a#3,c#4,f#4]@3 [a#3,c#4,f#4]@2 [a#3,c#4,f#4] ~ [a#3,c#4,f#4]", // F#
  T: "[a#3,c#4,f#4]!2 ~ [a#3,c#4,f#4]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // F# B5
  U: "[a2,e3,a3]@3 [a2,e3,a3]!3 ~ [a2,e3,a3] [a2,e3,a3]@3 [e3,b3,e4]@2 [e3,b3,e4] ~ [e3,b3,e4]", // A5 E5
  V: "[e3,b3,e4]!2 ~ [e3,b3,e4]@2 [b2,f#3,b3]@3 [b2,f#3,b3]!2 ~ [b2,f#3,b3]!2 [b2,f#3,b3]@3", // E5 B5
  W: "[b2,f#3,b3]@3 [b2,f#3,b3]!3 ~ [b2,f#3,b3] [b2,f#3,b3]@3 [a2,e3,a3]@2 [a2,e3,a3] ~ [a2,e3,a3]", // B5 A5
  X: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [e3,b3,e4]@3 [e3,b3,e4]!2 ~ [e3,b3,e4]!2 [e3,b3,e4]@3", // A5 E5
  Y: "[b2,f#3,b3]!2 ~ [b2,f#3,b3]@2 [a2,e3,a3]@3 [a2,e3,a3]!2 ~ [a2,e3,a3]!2 [a2,e3,a3]@3", // B5 A5
  Z: "[e3,b3,e4]@3 [e3,b3,e4]!3 ~ [e3,b3,e4] [e3,b3,e4]@3 [b2,f#3,b3]@2 [b2,f#3,b3] ~ [b2,f#3,b3]", // E5 B5
  AA: "[a2,e3,a3]!2 ~ [a2,e3,a3]@2 [e3,b3,e4]@3 ~@5 [a2,e3,a3]@3", AB: "[a2,e3,a3]@3 [a#2,f3,a#3]@2 [b2,f#3,b3]@4 ~@7",
})).s("gm_overdriven_guitar").gain(0.26)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@21 A B@4 C ~@2 A B@7 ~@22 B@4 D ~@3 B@7 C ~@16 E@5 F ~@10 B@4 D ~@3 B@7 C ~@11
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@3 x ~@4 x ~@4 x ~@2", C: "~@3 x ~@12", D: "~@3 x ~@4 x ~@7",
  E: "x!2 ~ x ~ x ~ x!2 ~@2 x!3 ~@2", F: "x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<A ~@5 B ~@3 C ~@117 D ~@3 E F>".pickRestart({
  A: "x ~@2 x ~ x ~@10", B: "x", C: "x ~@7 x ~@2 x ~ x ~@2", D: "~@5 x ~@10", E: "~@5 x ~@7 x ~@2", F: "x ~@2 x ~@12",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@21 A B C B C D ~@2 A B C B C B C B ~@22 C B C B E ~@3 C B C B C B C D ~@16 F G F G F H ~@10 C B C B E ~@3 C B C B C
  B C D ~@11
>`.pickRestart({
  A: "~@13 x ~@2", B: "~ x ~ x ~@4 x ~@3 x!2 ~@2", C: "~@3 x ~@3 x!2 ~@4 x ~@2", D: "~ x ~ x ~@12",
  E: "~@3 x ~@3 x!2 ~@7", F: "~@4 x!2 ~ x!3 ~@5 x", G: "x!2 ~ x!2 ~@4 x ~ x!3 ~ x", H: "x",
})).gain(0.26)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@22 A@4 B ~@3 A@5 C A D ~@21 C A@4 ~@3 C A@4 E A B ~@32 C A@4 ~@3 C A@4 E A B ~@11
>`.pickRestart({
  A: "x ~@4 x ~@5 x ~@4", B: "x ~@4 x ~@10", C: "~@5 x ~@5 x ~@4", D: "x", E: "x ~@10 x ~@4",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  A ~@10 B ~@4 C ~@4 A ~@5 B ~ A ~@5 B ~ A ~ B C A ~ B ~@4 C ~@4 A ~@5 B ~@4 C ~@2 B ~@4 C ~@2 B C A ~ B C ~@15 C ~@4 A
  ~@5 B ~@4 C ~@2 B ~@4 C ~@2 B C A ~ B ~@5 C
>`.pickRestart({
  A: "~@11 x ~@4", B: "x", C: "~@5 x ~@10",
})).gain(0.26)

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

More by Green Day