Strudelify

Welcome to Paradise

Green Day

KeyE♭ minorTempo179 bpm
0:00/0:00
// Welcome to Paradise — Green Day
// 179 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 168 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(179/4)

// 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 B A B A B A B C@2 D@2 C@2 E@2 C@2 D@2 C@2 E@2 F@2 G H@2 I@2 J@2 K@2 H@2 I@2 L M A B A B C@2 D@2 C@2 E@2 C@2 D@2 C@2
  E@2 F@2 G H@2 I@2 J@2 K@2 H@2 I@2 L M A B A B A B A B ~@82
>`.pickRestart({
  A: "[eb3,bb3,eb4]@3 [eb3,bb3,eb4] eb3@2 eb3 [eb3,bb3,eb4], ~@4 [bb3,eb4]@3 ~", // Eb5
  B: "[db3,ab3,db4]!3 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2 [bb2,f3,bb3]", // Db5 Ab5 Bb5
  C: "[[eb3,bb3,eb4]!2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!3 [db3,ab3,db4]@2 [db3,ab3,db4]!2 [db3,ab3,db4]@2 [db3,ab3,db4]!3]/2", // Eb5 Db5
  D: "[[bb3,eb4,g4]@3 [bb3,eb4,g4] [bb3,eb4,g4]@3 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 [bb3,eb4,g4]@2]/2", // Eb
  E: "[[gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3]!7]/2", // Gb5 Bb5
  F: "[[gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!3 [f3,bb3,d4]@2 [f3,bb3,d4]!7]/2", G: "[f3,bb3,d4]!8",
  H: "[[eb2,bb2,eb3]!2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!3 [gb2,db3,gb3]@2 [gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!3]/2", // Eb5 Gb5
  I: "[[ab2,eb3,ab3]!2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!3 [b2,gb3,b3]@2 [b2,gb3,b3]!7]/2", // Ab5 B5
  J: "[[eb3,bb3,eb4]!2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!3 [gb3,db4,gb4]@2 [gb3,db4,gb4]!2 [gb3,db4,gb4]@2 [gb3,db4,gb4]!3]/2", // Eb5 Gb5
  K: "[[f3,bb3,d4]!2 [f3,bb3,d4]@2 [f3,bb3,d4]!3 [f3,bb3,d4]@2 [f3,bb3,d4]!7]/2", // Bb
  L: "[eb2,bb2,eb3]@3 eb2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@3 eb2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2", // Eb5
  M: "[bb2,f3,bb3] ~@7", // Bb5
})).s("gm_overdriven_guitar").gain(0.26)

// bass · epiano1
const bass = note(`<
  ~@4 A B A C D@2 E@2 F@2 G@2 D@2 E@2 F@2 H@2 I@2 J K@2 L@2 M@2 N@2 K@2 L@2 O P A B A C D@2 E@2 F@2 G@2 D@2 E@2 F@2 H@2
  I@2 J K@2 L@2 M@2 N@2 K@2 L@2 O P A B A B A B A B ~@82
>`.pickRestart({
  A: "db2 eb2@2 eb2 eb2@2 bb1 eb2", B: "db2!2 ab2 ab1@2 ab1!2 bb1", C: "db2!2 ab2 ab1@2 db2 f2 db2",
  D: "[eb2@2 eb2@2 g2 f2 eb2 db2@2 db2 eb2 f2@2 eb2 db2 f2]/2", E: "[eb2@3 eb2 eb2@3 eb2@2 eb2@2 eb2 eb2@2 eb2@2]/2",
  F: "[eb2@2 eb2@2 g2 f2 eb2 db2@2 db2!3 f2 gb2!2 db2]/2", G: "[gb1@2 gb1@2 gb1 ab1@2 bb1@2 bb1 c2 d2@2 c2 bb1 d2]/2",
  H: "[gb1@2 gb1@2 gb1 ab1@2 bb1@2 bb1!2 bb1@2 c2 d2 bb1]/2", I: "[gb1@2 gb1@2 gb1 ab1@2 bb1@2 bb1!7]/2",
  J: "bb1!2 c2 bb1 f2 d2 c2 bb1", K: "[eb2@2 eb2@2 gb2 f2 eb2 gb1@2 gb1 ab1 bb1@2 ab1 gb1 bb1]/2",
  L: "[ab1@2 ab1@2 ab1 ab1@2 b1@2 b1!4 db2!2 eb2]/2", M: "[eb2@2 eb2@2 gb2 f2 eb2 gb1@2 gb1 ab1 bb1@2 ab1 gb1 ab1]/2",
  N: "[bb1@2 bb1@2 bb1 f2@2 bb1@2 bb1 c2 bb1 d2 c2 bb1 d2]/2", O: "eb1@2 eb1 eb1@2 eb1!3", P: "bb1 ~@7",
})).s("gm_epiano1").gain(0.31)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@86 A@3 ~@4 B C@2 D@4 E@4 ~@5 F G H G H G H G H I J I J I J I J K@2 L@2 K@2 M@2 K@2 L@2 K@2 M@2 N@2 O P@2 Q@2 R@2 S@2
  P@2 Q@2 T U V W V W V W V W X
>`.pickRestart({
  A: "[eb3,bb3,eb4]/3", B: "~@15 bb2", C: "[eb3@28 ~@3 b2]/2", D: "[bb2@7 b2@2 bb2@2 ab2@2 bb2@2 b2@2 bb2@15]/4",
  E: "[~@7 gb3@2 f3@2 e3@2 eb3@2 e3@2 eb3@8 ~@7]/4", F: "~@14 bb2!2",
  G: "[eb3,bb3] ~ [eb3,bb3] ~@3 eb3!2 [gb3,db4] ~ [gb3,db4] ~@3 gb3!2", // Eb5 Gb5
  H: "[f3,c4] ~ [f3,c4] ~@3 f3!2 [e3,b3] ~ [e3,b3] ~@3 e3!2", I: "[bb3,eb4,g4]!4 [db4,gb4,bb4]!4",
  J: "[c4,f4,a4]!4 [b3,e4,ab4]!4", // F E
  K: "[[eb3,bb3,eb4]!2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!3 [db3,ab3,db4]@2 [db3,ab3,db4]!2 [db3,ab3,db4]@2 [db3,ab3,db4]!3]/2", // Eb5 Db5
  L: "[[bb3,eb4,g4]@3 [bb3,eb4,g4] [bb3,eb4,g4]@3 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 [bb3,eb4,g4]@2]/2", // Eb
  M: "[[gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3]!7]/2", // Gb5 Bb5
  N: "[[gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!3 [f3,bb3,d4]@2 [f3,bb3,d4]!7]/2", O: "[f3,bb3,d4]!8",
  P: "[[eb2,bb2,eb3]!2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!3 [gb2,db3,gb3]@2 [gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3]!3]/2", // Eb5 Gb5
  Q: "[[ab2,eb3,ab3]!2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!3 [b2,gb3,b3]@2 [b2,gb3,b3]!7]/2", // Ab5 B5
  R: "[[eb3,bb3,eb4]!2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!3 [gb3,db4,gb4]@2 [gb3,db4,gb4]!2 [gb3,db4,gb4]@2 [gb3,db4,gb4]!3]/2", // Eb5 Gb5
  S: "[[f3,bb3,d4]!2 [f3,bb3,d4]@2 [f3,bb3,d4]!3 [f3,bb3,d4]@2 [f3,bb3,d4]!7]/2", // Bb
  T: "[eb2,bb2,eb3]@3 eb2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@3 eb2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2", // Eb5
  U: "[bb2,f3,bb3] ~@7", V: "[eb3,bb3,eb4]@3 [eb3,bb3,eb4] eb3@2 eb3 [eb3,bb3,eb4], ~@4 [bb3,eb4]@3 ~",
  W: "[db3,ab3,db4]!3 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2 [bb2,f3,bb3]", X: "[eb3,bb3,eb4] ~@7",
})).s("gm_overdriven_guitar").gain(0.26)

// bass · epiano1
const bass_2 = note(`<
  ~@86 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C@2 D@2 E@2 F@2 C@2 D@2 E@2 G@2
  H@2 I J@2 K@2 L@2 M@2 J@2 K@2 N O P Q R S P Q P Q T
>`.pickRestart({
  A: "eb2 ~ eb2 ~ g2@2 eb2@2 gb2 ~ gb2 ~ bb2@2 gb2@2", B: "f2 ~ f2 ~ a2@2 f2@2 e2 ~ e2 ~ ab2@2 e2@2",
  C: "[eb2@2 eb2@2 g2 f2 eb2 db2@2 db2 eb2 f2@2 eb2 db2 f2]/2", D: "[eb2@3 eb2 eb2@3 eb2@2 eb2@2 eb2 eb2@2 eb2@2]/2",
  E: "[eb2@2 eb2@2 g2 f2 eb2 db2@2 db2!3 f2 gb2!2 db2]/2", F: "[gb1@2 gb1@2 gb1 ab1@2 bb1@2 bb1 c2 d2@2 c2 bb1 d2]/2",
  G: "[gb1@2 gb1@2 gb1 ab1@2 bb1@2 bb1!2 bb1@2 c2 d2 bb1]/2", H: "[gb1@2 gb1@2 gb1 ab1@2 bb1@2 bb1!7]/2",
  I: "bb1!2 c2 bb1 f2 d2 c2 bb1", J: "[eb2@2 eb2@2 gb2 f2 eb2 gb1@2 gb1 ab1 bb1@2 ab1 gb1 bb1]/2",
  K: "[ab1@2 ab1@2 ab1 ab1@2 b1@2 b1!4 db2!2 eb2]/2", L: "[eb2@2 eb2@2 gb2 f2 eb2 gb1@2 gb1 ab1 bb1@2 ab1 gb1 ab1]/2",
  M: "[bb1@2 bb1@2 bb1 f2@2 bb1@2 bb1 c2 bb1 d2 c2 bb1 d2]/2", N: "eb1@2 eb1 eb1@2 eb1!3", O: "bb1 ~@7",
  P: "db2 eb2@2 eb2 eb2@2 bb1 eb2", Q: "db2!2 ab2 ab1@2 ab1!2 bb1", R: "db2@2 eb2@4 eb2@2 eb2@4 bb1@2 bb2 eb3",
  S: "db3 bb2 ab2 bb2 ab2 gb2 eb2 db2", T: "eb2 ~@7",
})).s("gm_epiano1").gain(0.31)

// other · distortion guitar
const distortion_guitar = note("<~@98 A@2 ~@2 B C B D E@2 B C B C B C B C B C F@4 ~@46>".pickRestart({
  A: "[~@13 bb3 ab4@8 bb3 ~@9]/2", B: "~@2 [g3,bb3] eb3 ~@2 [bb3,db4] gb3", C: "~@2 [a3,c4] f3 ~@2 [ab3,b3] e3",
  D: "~@2 [a3,c4] f3 ~@2 [ab3,b3] [e3,bb3]", // Am Abm Edim
  E: "[eb4@2 [g3,bb3,f4] f4@2 ~ [bb3,db4] gb3 ~@2 [a3,c4] f3 ~@2 [ab3,b3] e3, ~@3 eb3 ~ bb4@2 eb5@8 ~]/2", F: "bb2!16",
})).s("gm_distortion_guitar").gain(0.26)

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

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

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

// drums · hihat
const hihat = s("hh").struct("<~@40 [~ x!3] ~@36 [~ x!3] ~@80 [~ x!3] ~@9>").gain(0.26)

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

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

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

stack(
  overdriven_guitar, bass, overdriven_guitar_2, bass_2, distortion_guitar, kick, snare, low_tom, hihat, mid_tom,
  open_hat, china
)

More by Green Day