Strudelify

Paper Lanterns

Green Day

KeyB♭ majorTempo174 bpm
0:00/0:00
// Paper Lanterns — Green Day
// 174 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(174/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 · distortion guitar · "Billie Joe - Elec. Guitar"
const distortion_guitar = note(`<
  A@8 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 F@2 H I J@2 A@4 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 F@2 H I J@2 A@8 K
  L K L K L K L ~@7 M ~@23
>`.pickRestart({
  A: "[bb2@2 bb2 [ab2,eb3,ab3] ab2@2 ab2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [f3,bb3,d4] [bb2,f3,bb3]@2 [bb2,f3,bb3]!2, [f3,bb3]@3 ~ [eb3,ab3]@3 ~@9]/2", // Ab5 Eb5 Bb Bb5 Ab5
  B: "[[bb2,f3,bb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3]!2 [f2,c3,f3]@2 [f2,c3,f3]!2 [f2,c3,f3]@2 [f2,c3,f3]!3]/2", // Bb5 F5
  C: "[[eb2,bb2,eb3]!2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]!4]/2", // Eb5 Bb5
  D: "[[bb2,f3,bb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3]!2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!3]/2", // Bb5 Ab5
  E: "[[eb3,bb3,eb4]!2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@2 [bb2,f3,bb3]!4]/2", // Eb5 Bb5
  F: "[[eb3,bb3,eb4]!3 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2 [f3,c4,f4]@2 [f3,c4,f4]!2 [f3,c4,f4]@2 [f3,c4,f4]!3]/2", // Eb5 F5
  G: "[[bb2,f3,bb3]!2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3]!7]/2", // Bb5
  H: "[bb2,f3,bb3]!2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!4", I: "[g2,d3,g3]@2 [g2,d3,g3]!6",
  J: "[[ab2,eb3,ab3]!3 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!2 ~@5]/2", // Ab5 Eb5
  K: "bb2 ~ bb2 ~ [bb2,f3,bb3]@2 ab2 ~ ab2 ~ [ab2,eb3,ab3]@2 ab2 ~ eb3 ~", // Bb5 Ab5
  L: "eb3 ~ [eb3,bb3,eb4]@2 eb3 ~ d3 ~ bb2 ~ bb2 ~ [bb2,f3,bb3]@2 bb2 ~", // Eb5 Bb5
  M: "[gb3,g3] [e3,f3] e3 [d3,eb3] [c3,d3] [c3,db3] [b2,c3] [b2,e3] [g2,bb2] [a2,c3] [ab2,c3] g2 [gb2,a2,b2] [f2,g2] [e2,g2] [eb2,a2]", // Gmaj7 Fmaj7 Ebmaj7 Csus2 Dbmaj7 Cmaj7 E5 Gm …
})).s("gm_distortion_guitar").gain(0.25)

// bass · electric bass pick · "Mike - Bass Guitar"
const bass = note(`<
  ~@4 A@4 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 F@2 H I J@2 A@4 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 F@2 H I J@2
  A@24 ~@23
>`.pickRestart({
  A: "[bb1@2 bb2 bb1 ab1@2 ab1 eb2@2 eb2 ab2 bb2 bb1@2 eb2 d2]/2", B: "[bb1!3 bb1@2 bb1!2 f1@2 f1!2 f1@2 f1 a1 f1]/2",
  C: "[eb1!2 eb1@2 eb1!3 bb1@2 bb1 bb1@2 d2 c2 bb1 c2]/2", D: "[bb1!3 bb1@2 bb1!2 ab1@2 ab1!2 ab1@2 ab1 c2 ab1]/2",
  E: "[eb2!2 eb2@2 eb2!3 bb1@2 bb1 bb1@2 d2 c2 bb1 c2]/2", F: "[eb2!3 eb2@2 eb2!2 f2@2 f2!2 f2@2 f2!3]/2",
  G: "[bb1!2 bb1@2 bb1!3 bb1@2 bb1 d2 bb1 f2 eb2 d2 bb1]/2", H: "bb1!2 bb1@2 bb1!2 a1!2", I: "g1@2 d2 g2 g1!4",
  J: "[ab1!3 ab1@2 c2 ab1 eb1@2 eb1!2 ~@5]/2",
})).s("gm_electric_bass_pick").gain(0.25)

// other · distortion guitar · "Billie Joe - Distortion"
const distortion_guitar_2 = note("<~@71 A B@2 C D E F G H I J K L M N O P ~@19 Q@4>".pickRestart({
  A: "~@5 bb4!3", B: "[db5@2 ~@2 db4 ~ bb3 ~ ab4@6 db5@4 ~@4 f5@2 f5@2 bb5@2 f5@2 eb5@2]/2",
  C: "f5 eb5 db5@2 bb4@2 ab4@2 gb4@2 f4@2 eb4@2 db4@2", D: "[e4,f4] eb4 db4 bb3@3 f4!2",
  E: "f4 bb3 ~ bb4@2 db5 bb4 ab4", F: "bb4 ab4 ~ f4@2 f4 ab4 bb4", G: "bb4@2 bb4 ab4 bb4 db5 eb5 e5",
  H: "f5 eb5 db5 bb4@2 bb4 db5!2", I: "bb5@2 ab5 f5 ab5 bb5 f5 bb5@2 bb5 ab5 f5 ab5 f5 eb5 db5",
  J: "e5@2 eb5 db5@2 eb5@2 db5 bb4@2 bb4@2 db5@2 eb5@2", K: "[e5,f5] [f5,ab5]!2 [e5,f5] [f5,ab5]!2 [e5,f5] [f5,ab5]",
  L: "[f5,ab5] [e5,f5] [f5,ab5]!2 [e5,f5] [f5,ab5]!2 [e5,f5]", M: "ab5@3 g5@3 f5@2 g5@3 f5@3 eb5@2",
  N: "db5 bb4!2 d5@2 bb4 d5 f5", O: "[ab5,bb5] bb5!3 [ab5,bb5] bb5!3 bb5@2 f5@2 ab5@2 bb5@2", P: "db6 bb5 ab5 bb5@5",
  Q: "[[f5,ab5]@3 [f5,ab5]@3 [bb4,f5]@3 [f5,ab5]@3 [f5,ab5]@3 [bb4,f5]@3 [f5,ab5]@3 [f5,ab5]@3 [bb4,f5]@2 [f5,ab5]@2 [bb4,f5]@2 [f5,ab5]@22 [bb2,f3,bb3]@4 ~@8]/4", // Fm Bb5 Fm Bb5 Fm Bb5 Fm Bb5 …
})).s("gm_distortion_guitar").gain(0.25)

// chords · distortion guitar · "Billie Joe - Elec. Guitar"
const distortion_guitar_3 = note("<~@88 A@2 B@2 A@2 C D E@2 F@6 G@2 H@2 I@3>".pickRestart({
  A: "[[eb3,bb3,eb4]!3 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2 [f3,c4,f4]@2 [f3,c4,f4]!2 [f3,c4,f4]@2 [f3,c4,f4]!3]/2", // Eb5 F5
  B: "[[bb2,f3,bb3]!2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!3 [bb2,f3,bb3]@2 [bb2,f3,bb3]!7]/2", // Bb5
  C: "[bb2,f3,bb3]!2 [bb2,f3,bb3]@2 [bb2,f3,bb3]!4", D: "[g2,d3,g3]@2 [g2,d3,g3]!6",
  E: "[[ab2,eb3,ab3]!3 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3]!2 ~@5]/2", // Ab5 Eb5
  F: "[bb2@2 bb2 [ab2,eb3,ab3] ab2@2 ab2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [f3,bb3,d4] [bb2,f3,bb3]@2 [bb2,f3,bb3]!2, [f3,bb3]@3 ~ [eb3,ab3]@3 ~@9]/2", // Ab5 Eb5 Bb Bb5 Ab5
  G: "[bb2@4 bb2@2 [ab2,eb3,ab3]@2 ab2@4 ab2@2 [eb3,bb3,eb4]@4 [eb3,bb3,eb4]@4 [f3,bb3,d4]@2 [bb2,f3,bb3]@3 [bb2,f3,bb3]!5, [f3,bb3]@3 ~ [eb3,ab3]@3 ~@9]/2", // Ab5 Eb5 Bb Bb5 Ab5
  H: "[bb2,f3,bb3]!16", I: "[[bb2,f3,bb3]!15 [bb2,bb3] [bb2,bb3]@20 [bb2,f3,bb3]@4 ~@8, ~@5 f3@7 ~@4]/3",
})).s("gm_distortion_guitar").gain(0.25)

// bass · electric bass pick · "Mike - Bass Guitar"
const bass_2 = note("<~@88 A@2 B@2 A@2 C D E@2 F@6 G@2 H@2 I J@2>".pickRestart({
  A: "[eb2!3 eb2@2 eb2!2 f2@2 f2!2 f2@2 f2!3]/2", B: "[bb1!2 bb1@2 bb1!3 bb1@2 bb1 d2 bb1 f2 eb2 d2 bb1]/2",
  C: "bb1!2 bb1@2 bb1!2 a1!2", D: "g1@2 d2 g2 g1!4", E: "[ab1!3 ab1@2 c2 ab1 eb1@2 eb1!2 ~@5]/2",
  F: "[bb1@2 bb2 bb1 ab1@2 ab1 eb2@2 eb2 ab2 bb2 bb1@2 eb2 d2]/2",
  G: "[bb1@2 bb2 bb1 ab1@2 bb1 eb2@2 eb2@2 bb1 bb1@2 bb1!2]/2",
  H: "[bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@2]/2", I: "~ bb1@3 bb1@3 bb1@3 bb1@3 bb1@3",
  J: "[bb1@5 bb1 ~@2]/2",
})).s("gm_electric_bass_pick").gain(0.25)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@23 B ~@29 B ~@13 C ~@19 B ~@12 D E F ~ C ~@2>".pickRestart({
  A: "~@2 x!2 ~@5 x ~@6", B: "~@8 x!8", C: "~@9 x!3 ~@4", D: "~@5 x ~@2", E: "~@10 x ~@4 x", F: "~@9 x!2 ~@3 x ~",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A ~@4 B C@3 B C@3 B C@3 B C@3 ~@9 D ~@4 B C@3 B C@3 B C@3 B C@3 ~@9 D ~@8 C@15 E ~@9 D ~@13
>`.pickRestart({
  A: "~@7 x", B: "~ x!7", C: "x!8", D: "~@2 x!2", E: "~ x ~@3 x ~@2",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~ x ~@2] ~@101 [~@7 x] [x ~@6 x!2 ~@4 x ~@2] ~@4>").gain(0.25)

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

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

stack(
  distortion_guitar, bass, distortion_guitar_2, distortion_guitar_3, bass_2, kick, snare, low_tom, hihat, mid_tom,
  open_hat, splash
)

More by Green Day