Strudelify

Having a Blast

Green Day

KeyA majorTempo175 bpm
0:00/0:00
// Having a Blast — Green Day
// 175 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "Guitar 2" distortion guitar (copy of ch 1 "Guitar" overdriven guitar)
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(175/4)

// 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"
const overdriven_guitar = note(`<
  A@8 B@3 C D@2 E@2 B@3 C D@2 E@2 F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 J@8 B@3 C D@2 E@2 B@3 C D@2 E@2 F@2 G@2 H@2 I@2 F@2
  G@2 H@2 I@2 J@8 K@2 L@2 K@2 M@2 N@2 G@2 O@2 P Q N@2 G@2 O@2 J@6 R@4
>`.pickRestart({
  A: "[[g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [d#2,a#2,d#3]@2 [f#2,c#3,f#3]@4 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [a#2,f3,a#3]@2 [f#2,c#3,f#3]@2]/2", // G#5 D#5 F#5 A#5 F#5
  B: "[g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3] ~", // G#5
  C: "[g#2,d#3,g#3]!8", // G#5
  D: "[[f2,c3,f3]@3 ~ [f2,c3,f3]@3 ~ [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@4 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@4 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2]/2", // F5
  E: "[[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]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [d#2,a#2,d#3]@4 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@4 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2]/2", // F#5 D#5
  F: "[[c#3,g#3,c#4]@3 ~ [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2]/2", // C#5
  G: "[[g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@4 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@4 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2]/2", // G#5
  H: "[[a#2,f3,a#3]!3 [a#2,f3,a#3]@2 [a#2,f3,a#3]!2 [a#2,f3,a#3]@2 [a#2,f3,a#3]!2 [a#2,f3,a#3]@2 [a#2,f3,a#3]!3]/2", // A#5
  I: "[[f#2,c#3,f#3]@3 ~ [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]@2 [f#2,c#3,f#3]@4 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@4 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2]/2", // F#5
  J: "[[g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [d#2,a#2,d#3]@2 [f#2,c#3,f#3]@4 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2]/2", // G#5 D#5 F#5
  K: "[[g#2,d#3,g#3]@3 ~@11 [f2,c3,f3]@4 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@4 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2]/2", // G#5 F5
  L: "[[c#3,g#3,c#4]@3 ~@11 [d#2,a#2,d#3]@4 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [a#2,d#3,a#3,d#4]@4 [a#2,d#3,a#3,d#4]@2 [a#2,d#3,a#3,d#4]@2 [a#2,d#3,a#3,d#4]@2]/2", // C#5 D#5
  M: "[[c#3,g#3,c#4]@5 ~ [g#2,d#3,g#3]@5 ~ [d#2,a#2,d#3]@6 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2]/2", // C#5 G#5 D#5
  N: "[[f2,c3,f3]@3 ~ [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@3 ~ [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2]/2", // F5 C#5
  O: "[[f2,c3,f3]@3 ~ [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@3 ~ [f#2,c#3,f#3]@4 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@4 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2]/2", // F5 F#5
  P: "[g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3] ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@3 ~ [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2", // G#5 F#5
  Q: "[f#2,c#3,f#3] ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3] ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@2 [d#2,a#2,d#3]@2", // F#5 G#5 D#5
  R: "[[g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [d#2,a#2,d#3]@2 [f#2,c#3,f#3]@49 ~]/4", // G#5 D#5 F#5
})).s("gm_overdriven_guitar").gain(0.61).pan(1)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  ~@2 A@2 B@4 C@4 D@2 E@2 C@4 D@2 E@2 F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 J@8 C@4 D@2 E@2 C@4 D@2 E@2 F@2 G@2 H@2 I@2 F@2
  G@2 H@2 I@2 J@8 K@2 L@2 K@2 M@2 N@2 G@2 O@2 P@2 N@2 G@2 O@2 J@6 Q@4
>`.pickRestart({
  A: "[~@7 f#2@2 f#2 f2!2 d#2!2 a#1 f#1]/2",
  B: "[g#1@3 ~ g#1@3 ~ g#1@2 g#1@2 d#1@2 f#1@4 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 a#1@2 f#1@2]/2", C: "g#1!8",
  D: "[f1@3 ~ f1@3 ~ f1@2 f1@2 f1@2 f1@4 f2@2 c2@2 f2@3 ~ f1@2 f1@2 f1@2]/2",
  E: "[f#1@3 ~ f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 d#2@4 d#2@2 d#2@2 d#2@4 d#2@2 d#2@2 d#2@2]/2",
  F: "[c#2@3 ~ c#2@2 c#2@4 c#2@2 c#2@2 c#2@4 c#2@2 c#2@2 c#2@4 c#2@2 c#2@2 c#2@2]/2",
  G: "[g#1@3 ~ g#1@3 ~ g#1@2 g#1@2 g#1@2 g#1@4 g#1@2 g#1@2 g#1@4 g#1@2 g#1@2 g#1@2]/2",
  H: "[a#1!3 a#1@2 a#1!2 a#1@2 a#1!2 a#1@2 a#1!3]/2",
  I: "[f#1@3 ~ f#1@3 ~ f#1@2 f#1@2 f#1@2 f#1@4 f#1@2 f#1@2 f#1@4 f#1@2 f#1@2 f#1@2]/2",
  J: "[g#1@3 ~ g#1@3 ~ g#1@2 g#1@2 d#1@2 f#1@4 f#1@2 f#1@2 f#1@2 f#1@2 f#2@2 c#2@2 f#1@2]/2",
  K: "[g#1@3 ~@11 f1@4 f1@2 f1@2 f1@4 f1@2 f1@2 f1@2]/2", L: "[c#2@3 ~@11 d#1@4 d#1@2 d#1@2 d#1@4 d#1@2 d#1@2 d#1@2]/2",
  M: "[c#2@5 ~ g#1@5 ~ d#1@6 d#1@2 d#1@2 d#1@2 d#1@2 d#1@2 d#1@2 d#1@2]/2",
  N: "[f1@3 ~ f1@2 f1@2 f1@2 f1@3 ~ c#2@4 c#2@2 c#2@2 c#2@4 c#2@2 c#2@2 c#2@2]/2",
  O: "[f1@3 ~ f1@2 f1@2 f1@2 f1@3 ~ f#1@4 f#1@2 f#1@2 f#1@4 f#1@2 f#1@2 f#1@2]/2",
  P: "[g#1@5 ~ g#1@2 g#1@5 ~ f#1@4 g#1@3 ~ g#1@2 g#1@3 ~ g#1@2 d#1@2]/2",
  Q: "[g#1@3 ~ g#1@3 ~ g#1@2 g#1@2 d#1@2 f#1@49 ~]/4",
})).s("gm_electric_bass_finger").gain(0.34)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A@3 B ~@4 A@3 B ~@3 C ~@7 D ~@7 E ~@8 A@3 B ~@4 A@3 B ~@3 C ~@7 D ~@7 E ~@15 F ~@7 G ~@16
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x ~ x ~@3 x ~@5 x!4", C: "~@12 x!2 ~@2", D: "~ x ~@2 x ~@3", E: "~ x ~@6",
  F: "~@4 x!2 ~@4 x!2 ~@4", G: "~@6 x!3 ~ x ~@5",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@88 [~ x!3] ~ [~ x!3] ~ [~ x!3] ~@27>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 [~@8 x!4 ~@4] ~@39 [~@8 x!4 ~@4] ~@40>").gain(0.72)

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

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

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@3 A ~@20 B C D E@3 F G B C D E@3 F G F H F H F H F I ~@16 B C D E@3 F G B C D E@3 F G F H F H F H F I ~@22 F H F H F
  H F ~@3
>`.pickRestart({
  A: "x!6 ~@2", B: "~@2 x!6", C: "x!7 ~", D: "x!5 ~ x ~", E: "x!8", F: "~ x", G: "~ x ~@6", H: "~ x!3", I: "~ x ~@2",
})).gain(0.72)

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

More by Green Day