Strudelify

My Generation

Green Day

KeyG majorTempo144 bpm
0:00/0:00
// My Generation — Green Day
// 144 bpm, 12/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(144/6)

// 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
const overdriven_guitar = note(`<
  A@2 ~ A ~ A ~ A ~ A B C D A D A D A D A B C D A D E D F G H I J K L M L M L ~ L N O P Q R S T U T U T U T U V@4 ~@20
>`.pickRestart({
  A: "[g3,d4,g4]!4 [f3,c4,f4,g4]!4", // G5 Fsus2
  B: "[g3,d4,g4,b4,d5,g5]@11 [g3,d4,g4,c5,d5,g5]@4 [g3,d4,g4,c5,d5,g5]@3 [g3,d4,g4,c5,d5,g5]@3 [g3,d4,g4,c5,d5,g5]@3", // G Gsus4
  C: "[g3,d4,g4,b4]!3 [g3,d4,f4,c5] [f3,c4,f4,c5,d5]!3 [g3,d4,f4,c5]", D: "[g3,d4,g4] ~@11",
  E: "[g3,d4,g4,b4]@3 [g3,d4,g4,b4]@5 [g3,d4,f4,c5]@4 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5]@3", // G Gsus4
  F: "~@3 [c5,e5]@2 ~ [c5,e5]@3 ~@6 [c5,e5]@2 ~ [c5,e5]@3 [a#4,d5]@3, g4!2, ~@5 [d5,f5]@2 ~@2 [a#4,d5]@6 ~@2 [d5,f5]@2 ~@5", // C A# Dm A# Dm
  G: "[g4,d5] ~@11", H: "~@3 g5@2 b5@4 d5 c5 a#4 d5@3 d5@3 c5@2 a#4 g4@2 f4",
  I: "g4@2 ~ [g3,d4,g4,b4]@3 g4!3 [g3,d4,f4,c5]@3 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5,d5]@2 [g3,d4,f4,c5,d5] [g3,d4,f4,c5]@2 [g3,d4,f4,c5]", // G Gsus4
  J: "[g3,d4,g4,b4]@3 [g3,d4,g4,b4]@5 [g3,d4,f4,c5] [g3,d4,f4,c5]@3 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5,d5]@3 [g3,d4,f4,c5,d5]@2 [g3,d4,f4,c5,d5] [g3,d4,f4,c5]@2 [g3,d4,f4,c5]", // G Gsus4
  K: "[a3,e4,a4,c#5,e5,a5] ~@11", L: "[a3,e4,a4,c#5]!4 [g3,d4,g4,b4]!4", M: "[a3,e4,a4,c#5] ~@11",
  N: "[a3,e4,a4,c#5,e5,a5] [a3,e4,a4,c#5,e5,a5]@2 [a3,e4,g4,d5]@2 [a3,e4,g4,d5]!3", // A Asus4
  O: "~@3 [a3,e4,a4,c#5,e5,a5]@6 [a3,e4,a4,c#5,e5,a5]@3 [a3,e4,g4,d5]@8 [a3,e4,g4,d5] [a3,e4,g4,d5]@2 [a3,e4,g4,d5]", // A Asus4
  P: "[a3,e4,a4,c#5,e5,a5]@2 ~ [a3,e4,a4,c#5,e5,a5]@3 [a3,e4,a4,c#5,e5,a5]@3 [a3,e4,a4,c#5,e5,a5]@2 [a3,e4,a4,c#5,e5,a5] [a3,e4,a4,c#5,e5,a5]@2 [a3,e4,g4,d5] [a3,e4,g4,d5]@5 [a3,e4,g4,d5] [a3,e4,g4,d5]@2 [a3,e4,g4,d5]", // A Asus4
  Q: "[a3,e4,a4,c#5,e5,a5]@2 ~ [a3,e4,a4,c#5,e5,a5]@3 [a3,e4,a4,c#5,e5,a5]@2 [a3,e4,a4,c#5,e5,a5] [a3,e4,a4,c#5,e5,a5]@2 [a3,e4,a4,c#5,e5,a5] [a3,e4,g4,d5]@3 [a3,e4,g4,d5]@3 [a3,e4,g4,d5]@3 ~@3", // A Asus4
  R: "[a#3,f4,a#4,d5,f5,a#5] [a#3,f4,a#4,d5,f5,a#5]@2 [a#3,f4,g#4,d#5]@2 [a#3,f4,g#4,d#5]!3", // A# A#sus4
  S: "[a#3,f4,g#4,d#5]@3 [a#3,f4,a#4,d5,f5,a#5]@6 [a#3,f4,a#4,d5,f5,a#5]@3 [a#3,f4,g#4,d#5]@8 [a#3,f4,g#4,d#5] [a#3,f4,g#4,d#5]@2 [a#3,f4,g#4,d#5]", // A#sus4 A# A#sus4
  T: "[a#3,f4,a#4,d5,f5,a#5] ~@11", // A#
  U: "[a#3,f4,a#4,d5,f5,a#5] [a#3,f4,a#4,d5,f5,a#5]@2 [a#3,f4,g#4,d#5] [a#3,f4,g#4,d#5,f5] [a#3,f4,g#4,d#5,f5]@2 [a#3,f4,g#4,d#5]", // A# A#sus4
  V: "[a#3,f4,a#4,d5,f5,a#5]@3 [a#3,f4,a#4,d5,f5,a#5]@3 [a#3,f4,a#4,d5,f5,a#5]@3 [a#3,f4,a#4,d5,f5,a#5]@2 [a#3,f4,a#4,d5,f5,a#5] [a#3,f4,a#4,d5,f5,a#5]@2 [a#3,f4,g#4,d#5] [a#3,f4,g#4,d#5]@3 [a#3,f4,g#4,d#5]@3 [a#3,f4,g#4,d#5]@2 [a#3,f4,g#4,d#5]", // A# A#sus4
})).s("gm_overdriven_guitar").gain(0.8)

// bass · electric bass finger
const bass = note(`<
  A B C D E B F B F B@3 G B G B G B G B@3 H B I D J K L M D@2 N O P O P O P O@4 Q R@2 S R S R T R P R@4 U V W X Y Z@4 AA
  AB AA AB AC@2 AD@4 AE ~
>`.pickRestart({
  A: "f2 ~ g2 g2@3 g2@3 g2@3 f2@3 f2@3 f2@3 f2@3", B: "g2!4 f2!4",
  C: "f2 ~ g2!2 ~ g2 d2 ~ g2!2 ~ g2 f2 ~ f2!2 ~ f2!2 ~ g2!2 ~ g2", D: "g2!4 f2!3 d2",
  E: "f2 ~ g2 f2 ~ g2 f2 ~ g2!2 ~ g2 f2 ~ f2!2 ~ f2!2 ~ g2 g2@3",
  F: "f2 ~ g2!2 ~ g2 d2 ~ g2!2 ~ g2 f2 ~ f2!2 ~ f2!2 ~ g2 g2@3", G: "g2 ~@11",
  H: "g2@2 g2 c3@2 d3 c3@2 a#2 g2@3 a#2@3 g2 f2 d2 f2@3 d2@3", I: "g2@2 g2!2 f2 d2 c2@3 a#1@3 g1@3 c2 c#2 d2 f2@3 f2@3",
  J: "g2@2 g2 c3@2 d3 c3 b2 a#2@4 g2 f2 d2 f2@2 f2 c2@3 a#1@3", K: "g1 g2!3 f2!4",
  L: "g2@2 g2!4 f2@2 f2!4 c2@3 c2@3 c2@3 a#1@3", M: "g2!2 a#2 g2 f2!3 d2", N: "a2 ~@11", O: "a2!4 g2!4", P: "a2 ~@7",
  Q: "a2!4 g2!3 a#2", R: "a#2!4 g#2!4", S: "a#2 ~@7", T: "a#2@5 ~@19", U: "a#2!4 g#2!3 a#2",
  V: "c3@11 ~ a#2@5 ~ f2@5 ~", W: "c3 a#2 g2 f2 d#2 d2 c2 a#1", X: "c2 a#1 c2 a#1 f2 d#2 f2 d#2",
  Y: "f2 d#2 a#2 c3!2 d#3 c3 a#2", Z: "c3!2 a#2 g2 a#2!2 g2 f2", AA: "c3!2 e3 c3 a#2!2 g2 a#2",
  AB: "c3!2 e3 c3 a#2!2 f3 a#2", AC: "c3!2 a#2 g2 f2!3 a#2", AD: "c3!2 d#3 c3 a#2!2 g2 a#2", AE: "c3",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@3 A ~ A ~ A ~ B@2 ~@2 A ~ A ~ A ~ B@2 ~@12 C ~ C ~ C ~ D@2 ~@2 E F G ~ H ~ H ~ H ~ H ~ I J K ~@10 L@8 ~@2
>`.pickRestart({
  A: "[b4,d5]@3 [b4,d5]@3 [c5,e5]@3 [c5,e5]@3 [d5,f5]@5 ~ [c5,e5]@2 [b4,d5]@4, ~@17 [d5,f5]@2 ~@5", // Bm C Dm C Bm Dm
  B: "[[b4,d5]@3 [b4,d5]@3 [c5,e5]@3 [c5,e5]@3 [d5,f5]@5 ~ [c5,e5]@2 [b4,d5]@14 ~@14, ~@17 [d5,f5]@2 ~@29]/2", // Bm C Dm C Bm Dm
  C: "[c#5,e5]@3 [c#5,e5]@3 [d5,f#5]@3 [d5,f#5]@3 [e5,g5]@5 ~ [d5,f#5]@2 [c#5,e5]@4, ~@17 [e5,g5]@2 ~@5", // C#m D Em D C#m Em
  D: "[[c#5,e5]@3 [c#5,e5]@3 [d5,f#5]@3 [d5,f#5]@3 [e5,g5]@5 ~ [d5,f#5]@2 [c#5,e5]@14 ~@14, ~@17 [e5,g5]@2 ~@29]/2", // C#m D Em D C#m Em
  E: "~@3 a4@3 ~@2 a4@3 ~ a4@2 a4@2 ~ a4 a4@3 ~@3", F: "~@3 a#4@3 ~@2 a#4 a#4@3 a#4@3 ~@3 a#4@3 a#4@2 a#4",
  G: "a#4 a#4@3 ~@4",
  H: "[d5,f5]@3 [d5,f5]@3 [d#5,g5]@3 [d#5,g5]@3 [f5,g#5]@5 ~ [d#5,g5]@2 [d5,f5]@4, ~@17 [f5,g#5]@2 ~@5", I: "~@23 a#4",
  J: "a#4@3 a#4@2 a#4@3 a#4 a#4@3 a#4@2 a#4@3 a#4 a#4@3 a#4@2 g#4", K: "a#4 d5 ~@6",
  L: "[g4,e5]@3 [g4,e5]@3 [a4,f5]@3 [a4,f5]@3 [a#4,g5]@5 [a#4,g5] [a4,f5] [g4,e5]@4 ~", // C Dm D# Dm C
})).s("gm_electric_guitar_jazz").gain(0.8)

// chords · distortion guitar
const distortion_guitar = note("<~@58 A B C@3 D E F G@2 H@4 ~@3 I@2 ~>".pickRestart({
  A: "[c4,g4,c5,e5]@4 [a#3,f4,a#4,d5]@3 [a#3,f4,a#4,d5]", B: "[c4,g4,c5,e5]@2 [c4,g4,c5,f5] [a#3,f4,a#4,d5]",
  C: "[[c4,g4,c5,f5]@6 [c4,g4,c5,e5]@6 [a#3,f4,a#4,d5]@9 [a#3,f4,a#4,d5]@2 ~ [c4,g4,c5,f5]@3 [c4,g4,c5,f5]@6 [c4,g4,c5,f5]@3 [a#3,f4,a#4,d5]@3 [a#3,f4,a#4,d5]@6 [a#3,f4,a#4,d5]@2 ~ [c4,g4,c5,f5]@18 [a#3,f4,a#4,d5]@3 [a#3,f4,a#4,d5]@3, ~@23 [a#3,f4,a#4,d5]@2 ~@22 [a#3,f4,a#4,d5]@2 ~@23]/3", // Csus4 C A# Csus4 A# Csus4 A#
  D: "[c4,g4,c5,f5]@6 [a#3,f4,a#4,d5]!2", // Csus4 A#
  E: "[c4,g4,c5,e5]@6 [c4,g4,c5,e5]@3 [c4,g4,c5,e5]@2 ~ [a#3,f4,a#4,d5]@6 [a#3,f4,a#4,d5]@6, ~@11 [c4,g4,c5,e5]@2 ~@11", // C A# C
  F: "[c4,g4,c5,e5]@3 [c4,g4,c5,e5] [a#3,f4,a#4,d5]@4", G: "[c4,g4,c5,f5]@3 [a#3,f4,a#4,d5]", H: "[c4,g4,c5,e5]/4",
  I: "[~ [c4,g4,c5,e5]@2 ~]/2", // C
})).s("gm_distortion_guitar").gain(0.8)

// chords · guitar harmonics
const guitar_harmonics = note("<~@66 A B@2 C@4 ~@5>".pickRestart({
  A: "[c4,g4,c5,f5] ~", B: "[~ [c4,g4,c5,e5]@3]/2", C: "[[c4,g4,c5,e5]@3 ~]/2",
})).s("gm_guitar_harmonics").gain(0.01)

// drums · kick
const kick = s("bd").struct(`<
  A@2 ~ A ~ A ~ A ~ A@2 B ~ A ~ A ~ A ~ C A@2 ~ A D A D A ~ B@3 ~ A ~ C D A C@2 A@3 B A@2 ~ A D E D E D C A@4 ~@18 F ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2", D: "x", E: "x ~@2 x ~@2 x ~@2 x!2 ~", F: "~@7 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A B C B C A C A C A D E C A C F C A G H I J C A C K C K L M@3 C A G H N A O P Q@3 R Q A S A C T C T G H U@2 A V W X Y
  Z AA AB W X Y Z AA AB W X AC Z AA AB C ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@5 x ~@3 x!3 ~ x ~ x!5", C: "~@7 x", D: "~@3 x ~@4 x!2 ~ x ~@3 x ~@4 x!2 ~ x",
  E: "~@3 x ~@4 x!2 ~ x ~@3 x ~ x!7", F: "~@3 x ~@5 x ~@5 x ~@4 x!2 ~@2", G: "~@20 x!2 ~@2", H: "~@3 x ~@5 x ~ x!13",
  I: "~@3 x ~@4 x!2 ~@5 x ~@4 x!2 ~@2", J: "~@3 x ~@4 x!2 ~@5 x ~@4 x!4", K: "~@3 x ~@5 x ~@5 x ~@5 x ~ x",
  L: "~@18 x!3 ~@3", M: "~@3 x ~@4 x!2 ~ x ~@2 x!2 ~ x!7", N: "~@15 x ~@4 x ~@3", O: "~@21 x!2 ~",
  P: "~@3 x ~@5 x ~@4 x!3 ~@4 x ~@2", Q: "~@3 x ~@4 x!2 ~@5 x ~ x ~@2 x!2 ~ x", R: "~@3 x ~@4 x!2 ~@5 x ~ x!7",
  S: "x ~@19 x!2 ~@2", T: "~@3 x ~@5 x ~@5 x ~ x ~@3 x ~@2", U: "~@3 x ~@4 x!2 ~@4 x!2 ~@4 x!2 ~ x",
  V: "~@3 x ~@5 x ~@4 x!2 ~@4 x!2 ~ x", W: "x!3 ~@18 x!3", X: "~@14 x!4 ~@3 x ~@2", Y: "~@15 x!6 ~@3",
  Z: "~@15 x!3 ~@6", AA: "x!2 ~ x!2 ~@7 x ~ x ~@9", AB: "~@3 x!3 ~@3 x!5 ~ x!2 ~ x!2 ~@3 x", AC: "~ x!2 ~@12 x!6 ~@3",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@36 A ~@2 B ~@18 C D E F G H C I E J G H K L M N O H P ~>".pickRestart({
  A: "~@18 x!2 ~@3 x", B: "~@12 x!2 ~@4 x!3 ~@3", C: "~@7 x!11 ~@6", D: "~@3 x!9 ~@10 x!2", E: "x!9 ~@15",
  F: "x!12 ~@12", G: "~@2 x ~@2 x!7 ~ x ~ x!9", H: "~@6 x!3 ~@5 x ~@2 x ~@2 x!3 ~", I: "~@4 x!8 ~@10 x!2",
  J: "x!6 ~@3 x!3 ~@12", K: "~@9 x!3 ~@12", L: "~@6 x!6 ~@10 x!2", M: "x ~@2 x!9 ~@12", N: "x!6 ~ x!5 ~@12",
  O: "~@6 x!6 ~@3 x!9", P: "x!13 ~@6 x!3 ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ B ~@5 A ~ A ~ A ~@9 A ~ A ~ A ~@25
>`.pickRestart({
  A: "~ x ~ x ~ x!2 ~", B: "~ x ~ x ~@4",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@7 B ~@2 C ~@18 D E F G ~ H D I F J ~ H K L M N O H ~@2>".pickRestart({
  A: "~@21 x!3", B: "~@12 x!3 ~@6 x!2 ~", C: "~@17 x ~@4 x!2", D: "~@3 x!4 ~@11 x!3 ~@3", E: "x!3 ~@9 x!2 ~@4 x!3 ~@3",
  F: "~@9 x!6 ~@6 x!3", G: "~@12 x!3 ~@3 x!6", H: "x!3 ~@21", I: "x!4 ~@8 x!2 ~@4 x!3 ~@3",
  J: "~@6 x!3 ~@3 x!3 ~@3 x!6", K: "~@3 x!6 ~@3 x!9 ~@3", L: "x!6 ~@6 x!2 ~@4 x!3 ~@3", M: "~@12 x!3 ~@6 x!3",
  N: "~@6 x ~@5 x!3 ~@3 x!6", O: "~@2 x ~@2 x ~@7 x ~@7 x ~@2",
})).gain(0.8)

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

stack(
  overdriven_guitar, bass, electric_guitar_jazz, distortion_guitar, guitar_harmonics, kick, snare, low_tom, hihat,
  mid_tom, crash
)

More by Green Day