Strudelify

Espionage

Green Day

KeyG majorTempo138 bpm
0:00/0:00
// Espionage — Green Day
// 138 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138/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.

// bass · electric bass finger · "Mike - Bass"
const bass = note(`<
  ~@7 A@8 B@4 A@4 C D C D E C F G A@8 B@4 A@4 C D C D E C F G A@8 B@4 A@4 C D C D E C F G ~@6 A@8 B@4 A@4 C D C D E C F
  G H@4
>`.pickRestart({
  A: "e1!2 g1!2 e1!2 g1!2", B: "a1!2 c2!2 a1!2 c2!2", C: "b1@5 ~ b1@5 ~ a1@2 b1@2", D: "c2@5 ~ c2@5 ~ d2@2 c2@2",
  E: "b1@5 ~ b1@5 ~ b1@3 ~", F: "c2!8", G: "d#2!7 e2", H: "[e1@63 ~]/4",
})).s("gm_electric_bass_finger").gain(0.16)

// other · acoustic guitar steel · "Billie - Guitar 2"
const acoustic_guitar_steel = note(`<
  A@3 ~@4 B@8 C@4 B@4 D E D E F G H I B@8 C@4 B@4 D E D E F G H I B@8 C@4 B@4 D E D E F G H J@3 ~@4 B@8 C@4 B@4 D E D E
  F G H K@5
>`.pickRestart({
  A: "[~@16 [e2,b2]@31 ~, ~@7 e4@16 ~, ~@15 [e3,b3]@32 ~]/3", B: "e2!2 g2!2 e2!2 g2!2", C: "a2!2 c3!2 a2!2 c3!2",
  D: "b2@3 ~ b2 ~ [b3,f#4]@4 b2@2 a2@2 b2@2", E: "c3@3 ~ c3 ~ [c4,g4]@4 c3@2 d3@2 c3@2",
  F: "b2@3 ~ b2@2 [b3,f#4]@4 b2@2 b2@2 [b3,f#4]@2", G: "b2@2 b2 [b3,f#4]@2 b2!2 [b3,f#4]", H: "[c3,g3,c4]!8",
  I: "[d#3,a#3,d#4]!8", // D#5
  J: "[[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#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] ~ [e2,b2]@31 ~, ~@15 [e3,b3,e4]@32 ~]/3", // D#5 E5
  K: "[[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#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] ~ [e2,b2]@63 ~, ~@15 [e3,b3,e4]@64 ~]/5", // D#5 E5
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0)

// chords · trumpet
const trumpet = note(`<
  ~@5 A@2 B ~@7 C@2 D@2 E@4 ~@8 F@2 G@2 F@2 G@2 F@6 H@2 I J K L M@2 N O P ~@6 Q R ~@6 S T U V W X Y Z AA ~@14 AB@2 AC@2
  ~@2 AD@2 ~@2 AE AF ~@2 AG AH ~@4
>`.pickRestart({
  A: "e4/2", B: "[e4,e5] ~@7", C: "[e4@13 ~ d#4@17 ~]/2", D: "[d4@13 ~ c4@17 ~]/2",
  E: "[e4@13 ~ [d#4,d#5]@17 ~ [d4,d5]@31 ~, e5@63 ~]/4", F: "[~@10 d#5@6 d5@15 ~, ~@4 e5@27 ~]/2",
  G: "[~@5 d#5@3 d5@3 c#5@5, ~ e5@7]/2", H: "[~@5 d#5@3 d5@3 b4@3 g4 f#4, ~ e5@6 ~]/2", I: "b3@15 ~", J: "c4@15 ~",
  K: "[d#4,b4]@15 ~", L: "[e4,c5]@15 ~", M: "[[f#4,f#5]@31 ~]/2", N: "[c5,g5]", O: "[d#5,a#5]", P: "[e5,b5] ~@7",
  Q: "e4", R: "[a4,e5] ~@7", S: "[b4,e5]@15 ~", T: "b4@15 ~", U: "c5@15 ~", V: "d#5@15 ~", W: "e5@15 ~",
  X: "[f#4,f#5]@15 ~", Y: "[a4,a5]@5 ~ [f#4,f#5]@10", Z: "[g4,g5]@15 ~", AA: "[a#4,a#5]@5 ~ [g4,g5]@5 ~ [a#4,a#5]@3 ~",
  AB: "[[e4,e5]@2 [e4,e5]@2 ~@4 [e4,e5]@2 [e4,e5]@2 ~@2 [d#4,e5]@9 ~ [g4,g5]@3 ~ [e4,e5]@2 ~@2]/2", // E Emaj7 G E
  AC: "[[e4,e5]@2 [e4,e5]@2 ~@4 [e4,e5]@2 [e4,e5]@2 ~@2 [d#4,e5]@4 [c4,c5]@2 [e4,e5]@2 [f#4,f#5]@2 [g4,g5]@3 ~ [e4,e5]@2 ~@2]/2", // E Emaj7 C E F# G E
  AD: "[[e4,e5]@2 [e4,e5]@2 ~@4 [e4,e5]@2 [e4,e5]@2 ~@2 [e4,e5]@5 ~ g4@2 a4@2 c5@2 b4@2 a4@2 g4@2]/2", // E
  AE: "~@6 [b4,f#5]@7 ~@3", AF: "~@6 [c5,g5]@7 ~@3", AG: "[g5,c6]@15 ~",
  AH: "[a#5,d#6]@7 ~ [a#5,d#6]@2 [a#5,d#6]@2 [a#5,d#6]@2 [a#5,d#6]@2", // D#5
})).s("gm_trumpet").gain(0.22)

// other · trombone
const trombone = note(`<
  ~@5 A@2 B ~@3 C@4 D@2 E@2 D@2 F@2 ~@20 G@2 H I ~@15 J K ~@11 L M N O ~@6 P@8 ~@4 Q@2 R@2 S T S T U@2 T V W@4
>`.pickRestart({
  A: "b2/2", B: "[b2,e3] ~@7", C: "[e2@63 ~]/4", D: "[e3@13 ~ d#3@17 ~]/2", E: "[d3@13 ~ c3@17 ~]/2", F: "[d3@31 ~]/2",
  G: "[e2@31 ~]/2", H: "e2@2 e3@3 d#3@3", I: "d3@3 b2@3 g2 f#2", J: "e3", K: "a3 ~@7", L: "f#3@15 ~",
  M: "a3@5 ~ f#3@10", N: "g3@15 ~", O: "a#3@5 ~ g3@5 ~ a#3@3 ~",
  P: "[[e2,e3]@2 [e2,e3]@2 ~@4 [e2,e3]@2 [e2,e3]@2 ~@2 [e2,e3]@15 ~@3]/2", // E
  Q: "[[e2,e3]@2 [e2,e3]@2 ~@4 [e2,e3]@2 [e2,e3]@2 ~@2 [e2,d#3]@9 ~ [e2,d3]@7 ~]/2", // E Emaj7 E7
  R: "[[e2,e3]@2 [e2,e3]@2 ~@4 [e2,e3]@2 [e2,e3]@2 ~@2 [e2,e3]@5 ~ g2@2 a2@2 c3@2 b2@2 a2@2 g2@2]/2", S: "b2@15 ~",
  T: "c3@15 ~", U: "[b2@31 ~]/2", V: "d#3@15 ~", W: "[e3@63 ~]/4",
})).s("gm_trombone").gain(0.22)

// bass · baritone sax
const bass_2 = note("<~@5 A@2 B ~@101 C@4>".pickRestart({
  A: "e2/2", B: "e2 ~@7", C: "[e2@63 ~]/4",
})).s("gm_baritone_sax").gain(0.22)

// chords · overdriven guitar · "Billie - Guitar 3"
const overdriven_guitar = note("<~@55 A B A B A B A B C D C D A B A B ~@42>".pickRestart({
  A: "[e4,d5]!3 [e4,c#5]!3 [e4,c5]!2", B: "[e4,b4]!8", C: "[a4,g5]!3 [a4,f#5]!3 [a4,f5]!2", D: "[a4,e5]!8",
})).s("gm_overdriven_guitar").gain(0.34)

// other · alto sax
const alto_sax = note("<~@53 A B ~@16 C D C D ~@26 E F ~@6 G@4>".pickRestart({
  A: "c5@6 c5 d5 e5@4 e5@4", B: "~@2 d#5@4 d#5@2 g5@4 g5@3 ~", C: "b4@15 ~", D: "c5@15 ~", E: "~@6 f#5@7 ~@3",
  F: "~@6 g5@7 ~@3", G: "[b4@63 ~]/4",
})).s("gm_alto_sax").gain(0.29).pan(1)

// drums · kick
const kick = s("bd").struct("<~ A@6 B@16 C@6 D@2 B@16 C@6 D@2 B@16 C@6 D ~ A@6 B@16 C@6 D ~@5>".pickRestart({
  A: "x!4", B: "x!2 ~@2 x!2 ~@2", C: "x ~@4 x ~ x", D: "x!8",
})).gain(0.59)

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

// drums · low tom
const low_tom = s("lt").struct("<~@78 [~@4 x ~@4 x!2 ~ x!4] ~@29 [~@9 x ~@2 x!3 ~] ~@4>").gain(0.59)

// drums · open hat
const open_hat = s("oh").struct("<~@23 A@4 B A@3 ~@16 A@4 B A@3 ~@16 A@4 B A@2 ~@23 A@4 B A@2 ~@5>".pickRestart({
  A: "x!8", B: "~ x!7",
})).gain(0.59)

// drums · high tom
const high_tom = s("ht").struct("<~@78 [x!4 ~@2 x!3 ~@2 x ~@4] ~@29 [~@8 x ~ x!2 ~@4] ~@4>").gain(0.59)

// drums · crash
const crash = s("cr").struct("<~@27 A ~@23 A ~@23 A ~@9 A ~@19 A ~@3 A ~@3>".pickRestart({
  A: "x",
})).gain(0.59)

// drums · ride
const ride = s("rd").struct("<~@7 A@15 B ~@8 A@15 B ~@8 A@15 B ~@14 C A@14 B ~@12>".pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "~ x!7",
})).gain(0.59)

stack(
  bass, acoustic_guitar_steel, trumpet, trombone, bass_2, overdriven_guitar, alto_sax, kick, snare, low_tom, open_hat,
  high_tom, crash, ride
)

More by Green Day