Strudelify

Sassafras Roots

Green Day

KeyA majorTempo180 bpm
0:00/0:00
// Sassafras Roots — Green Day
// 180 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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 B C@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 F@4 A B G H D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2
  F@4 A B G H D@2 E@2 I@2 E@2 J@6 K L D@2 E@2 D@2 E@2 F@4 A B G H M N L@2 M N L@2 A B O@5
>`.pickRestart({
  A: "[c#3,g#3,c#4]@15 ~", B: "[g#2,d#3,g#3]@15 ~", C: "[[d#2,a#2,d#3]@31 ~]/2",
  D: "[[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 [d#3,a#3,d#4]@3 ~ [c#3,g#3,c#4]@3 ~ [c3,g3,c4]@5 ~]/2", // G#5 D#5 C#5 C5
  E: "[[c#3,g#3,c#4]@3 ~ [c#3,g#3,c#4]@3 ~ [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [d#3,a#3,d#4]@4 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@4 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2]/2", // C#5 D#5
  F: "[[c#3,g#3,c#4]@3 ~ [c#3,g#3,c#4]@3 ~ [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [d#3,a#3,d#4]@4 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@3 ~ [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2]/2", // C#5 D#5
  G: "[d#2,a#2,d#3]@13 ~ [d#2,a#2,d#3]!2", // D#5
  H: "[d#2,a#2,d#3]@2 [d#2,a#2,d#3]@2 [a#2,d#3,a#3,d#4]@3 ~ [a#2,d#3,a#3,d#4]!4 [a#2,d#3,a#3,d#4]@3 ~", // D#5
  I: "[[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 [d#3,a#3,d#4]@4 [c#3,g#3,c#4]@3 ~ [c3,g3,c4]@3 ~ [d#3,a#3,d#4]@5 ~]/2", // G#5 D#5 C#5 C5 D#5
  J: "[[f2,c3,f3]@3 ~ [f2,c3,f3]@3 ~ [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@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", // F5 C#5
  K: "[d#3,a#3,d#4]@3 ~ [d#3,a#3,d#4]@3 ~ [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2 [d#3,a#3,d#4]@2", // D#5
  L: "[d#3,a#3,d#4]!8", // D#5
  M: "[c#3,g#3,c#4]@3 ~ [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2", // C#5
  N: "[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]@2 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2", // G#5
  O: "[[d#2,a#2,d#3]@79 ~]/5", // D#5
})).s("gm_overdriven_guitar").gain(0.72)

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

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

// drums · rim
const rim = s("rim").struct("<[x!4] ~@115>").gain(0.72)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A B C ~@30 D C ~@30 D C ~@7 E ~ E ~@5 E ~@14 D C ~@15>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@2 x!6", C: "x!2 ~@6", D: "x ~ x ~@3 x!3 ~ x ~@3 x!2", E: "~@12 x!4",
})).gain(0.72)

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@2 [~@8 x!2 ~@6] ~@113>").gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@29 A B A C D C ~@26 A B A C D C ~@26 A B A C D C ~@10 D C ~@5>".pickRestart({
  A: "~@2 x!5 ~", B: "x!7 ~", C: "x!8", D: "~ x!7",
})).gain(0.72)

stack(overdriven_guitar, bass, kick, rim, snare, mid_tom, open_hat, crash, high_tom, ride)

More by Green Day