Strudelify
Lightning Crashes cover art

1994 · Throwing Copper

Lightning Crashes

Live

KeyF♯ majorTempo90 bpm
0:00/0:00
// Lightning Crashes — Live
// 90 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 2 "guitar" electric guitar clean (copy of ch 1 "guitar" acoustic guitar steel)
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30, guitar program 29.
setcpm(90/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 · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C D E B F D A B C D E B F D A B C D E B F D A B C D E B F D A B C D E B F D G H G H G H G H ~@26 I J I J I J K L
  I J I J I J K L ~@33
>`.pickRestart({
  A: "[e2,b2,e3,g#3,b3,f#4]@5 ~ [e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3,f#4]@4 [e3,g#3,b3]@2 ~@2, ~@3 [e2,b2]", // E E5
  B: "[b2,f#3,b3,c#4,f#4]@4 ~@2 [b2,f#3,b3,c#4]@2 [b2,f#3,b3,c#4,f#4]@4 [b2,f#3,b3,c#4]@2 g#2 ~", // Bsus2
  C: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#4]@6 ~ d#2, ~@2 [f#3,a#3,c#4] ~", // F# F#5 F#
  D: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#3,a#3,c#4,f#4]@4 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [d#2,a#3] d#2", // F# D#5
  E: "[e2,b2,e3,g#3,b3,f#4]@2 ~ [e2,b2,e3,g#3,b3,f#4] [e2,b2,e3,g#3,b3,f#4]@2 [e3,g#3,b3] ~, ~@3 [e2,b2]", // E E5
  F: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@3 d#2", // F#
  G: "[e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3,f#4]@2 ~@2 [b2,f#3,b3,c#4,f#4]@2 [b2,f#3,b3,c#4,f#4]@2 [b2,f#3,b3,c#4,f#4]@2 d#2!2", // E Bsus2
  H: "[f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#3,a#3,c#4,f#4] [f#2,c#3]!3 [f#2,c#3,f#3,a#3,c#4,f#4] ~", // F# F#5 F#
  I: "[d#3,g#3,b3,d#4]@3 c#3", J: "[d#2,d#3,a#3,c#4,f#4]@4 [d#2,d#3,a#3,c#4,f#4]!3 [f#3,a#3,d#4]",
  K: "[e2,b2,e3,g#3,b3]@6 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@4 [e2,b2,e3,g#3,b3]@2 [e3,g#3,b3] [f3,a3,c4]", // E F
  L: "[f#2,c#3,f#3,a#3,c#4]@12 [f#3,a#3,c#4]@2 [f#3,a#3,c#4]!2", // F#
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.8)

// chords · acoustic guitar steel · "guitar" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F E F E F E F ~@75
>`.pickRestart({
  A: "~@4 [e3,g#3,b3]@2 ~@8 [e3,g#3,b3]!2", B: "~@4 [f#3,b3,c#4]@2 ~@8 [f#3,b3,c#4]!2",
  C: "~@4 [f#3,a#3,c#4]@2 ~@6 [f#3,a#3,c#4]@2 g#2 ~", D: "~@4 [f#3,a#3,c#4]@2 ~@8 [g#2,d#3,f#3]!2",
  E: "~@6 [e3,g#3,b3]!2 ~@6 [g#2,f#3,b3]!2", F: "~@14 [f#3,a#3,c#4]!2",
})).s("gm_acoustic_guitar_steel").gain(0.05).pan(0.8)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@65 A ~ A ~@3 A ~ A ~@17 A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@6
>`.pickRestart({
  A: "~ b2",
})).s("gm_distortion_guitar").gain(0.13)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@25 A B C D E B F D A B C D E B F D ~@8 G B C D E B F D G B C D E B F H ~@59
>`.pickRestart({
  A: "[e2,b2,e3,g#3,b3,f#4]@5 ~ [e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3,f#4]@4 [e3,g#3,b3]@2 ~@2, ~@3 [e2,b2]", // E E5
  B: "[b2,f#3,b3,c#4,f#4]@4 ~@2 [b2,f#3,b3,c#4]@2 [b2,f#3,b3,c#4,f#4]@4 [b2,f#3,b3,c#4]@2 g#2 ~", // Bsus2
  C: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#4]@6 ~ d#2, ~@2 [f#3,a#3,c#4] ~", // F# F#5 F#
  D: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#3,a#3,c#4,f#4]@4 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [d#2,a#3] d#2", // F# D#5
  E: "[e2,b2,e3,g#3,b3,f#4]@2 ~ [e2,b2,e3,g#3,b3,f#4] [e2,b2,e3,g#3,b3,f#4]@2 [e3,g#3,b3] ~, ~@3 [e2,b2]", // E E5
  F: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3,f#3,a#3,c#4,f#4]@4 ~@3 d#2", // F#
  G: "[e2,b2,e3,g#3,b3,f#4]@2 ~ [e2,b2,e3,g#3,b3,f#4] [e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3] ~", // E
  H: "[f#2,c#3,f#3,a#3,c#4,f#4]", // F#
})).s("gm_overdriven_guitar").gain(0.06).pan(0)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@25 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C ~@60
>`.pickRestart({
  A: "~@4 [e3,g#3,b3]@2 ~@8 [e3,g#3,b3]!2", B: "~@4 [f#3,b3,c#4]@2 ~@8 [f#3,b3,c#4]!2",
  C: "~@4 [f#3,a#3,c#4]@2 ~@6 [f#3,a#3,c#4]@2 g#2 ~", D: "~@4 [f#3,a#3,c#4]@2 ~@8 [g#2,d#3,f#3]!2",
})).s("gm_overdriven_guitar").gain(0.02).pan(0)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@66 A B C ~ C ~ C ~ C ~@17 A B C ~ C ~ C ~ A B C ~ C ~ C ~ A B C ~ C ~ C ~ C ~ C ~@5
>`.pickRestart({
  A: "~@7 [f#2,c#3] ~@8", B: "d2 ~@7 f3 ~@7", C: "~@7 [f#2,c#3] ~ [f#2,c#3] ~@6",
})).s("gm_overdriven_guitar").gain(0.12)

// chords · distortion guitar · "(except for track 1 & 2)"
const distortion_guitar_2 = note(`<
  ~@41 A B A B A B A B ~@16 A B A B A B A B A B ~@16 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 ~@5
>`.pickRestart({
  A: "[e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3,f#4]@2 [e2,b2,e3,g#3,b3,f#4]@2 [e3,g#3,b3]!2 [b2,f#3,b3,c#4,f#4]@2 [b2,f#3,b3,c#4,f#4]@2 [b2,f#3,b3,c#4,f#4]@2 [d#2,g#2,f#3,b3]!2", // E Bsus2 G#m7
  B: "[f#2,c#3,f#3,a#3,c#4,f#4]@4 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3,f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4]!2", // F# F#5 F#
})).s("gm_distortion_guitar").gain(0.09).pan(1)

// bass · electric bass finger
const bass = note(`<
  ~@41 A B C D E F G H I J K L I J K L M N O P I Q R S T U V W X Y Z AA AB AA AC AD AC AE AF AD AG AH AC AD AC AE AF AD
  AG AH T U V W X Y Z AA T U V W X Y Z AA T U V W X Y Z AA AB AA AB AA AI AJ@4
>`.pickRestart({
  A: "e1 b1", B: "f#1@7 ~ f#1@6 d#1@2", C: "e1@6 ~ e1 b1 ~ b1@4 e1 ~", D: "f#1@7 e1 f#1 ~ f#1@4 d#1@2, f1 ~@15",
  E: "e1@7 e1 b1@8", F: "f#1@7 e1 f#1 ~ f#1@4 d#1@2", G: "e1@8 b1@7 e1", H: "f#1@15 ~", I: "e1@4 ~@2 e1 ~ e1@8",
  J: "b1@4 ~@2 b1 ~ b1@6 e1@2", K: "f#1@7 d#1", L: "f#1@5 d#1 f#1 d#1", M: "e1@5 ~ e1 ~ e1@7 e1",
  N: "b1@4 ~@2 b1 ~ b1@7 d#1", O: "f#1@6 f#1 ~ f#1@8", P: "f#1@8 f#1 ~ f#1@5 d#1", Q: "b1@5 ~ b1 ~ b1@6 d#1 e1",
  R: "f#1@4 ~@2 f#1 ~ f#1@7 d#1", S: "f#1@7 d#1 f#1 ~ f#1 ~ f#1 d#1 f#1@2",
  T: "e1 ~ e1!2 e1@2 e1 b1 ~ b1 b1@2 b1 ~ b1 d#1", U: "f#1 ~ f#1!2 f#1@2 f#1 f#1@2 d#1 f#1@2 f#1 ~ f#1 d#1",
  V: "e1 ~ e1 ~ e1 ~ e1 b1@2 b1 b1@2 b1@2 d#1 e1", W: "f#1@3 f#1 f#1@3 f#1 ~ f#1 f#1@2 f#1 ~ f#1 d#1",
  X: "e1 ~ e1@2 e1@2 ~ e1 b1 ~ b1@3 ~ b1!2", Y: "f#1@3 f#1 f#1@2 ~ f#1 ~ f#1 f#1@2 f#1@2 f#1 d#1",
  Z: "e1 ~ e1@4 ~ e1 b1 ~ b1 ~ b1@2 b1!2", AA: "f#1 ~ f#1 ~ f#1@2 f#1 d#1 f#1!3 d#1 f#1!4",
  AB: "e1@2 e1@3 ~@3 b1@2 b1@2 b1@2 b1@2", AC: "g#1!2", AD: "d#2", AE: "d#2!2", AF: "g#1",
  AG: "~ e3@2 g#3 a#3 b3 a#3@2, e2 ~", AH: "a#3 b3@2 a#3 c#4 b3@2 a#3", AI: "e1", AJ: "[b1@20 f#1@31 ~ f#1@2 ~@10]/4",
})).s("gm_electric_bass_finger").gain(0.36)

// bass · electric bass finger · "bendy bass"
const bass_2 = note("<~@75 A B C D A B ~ E A B C D A B ~ E ~@33>".pickRestart({
  A: "~@7 f#3 g#3@6 f#3@2, ~@3 d#3 ~@4", B: "f#3@6 d#3@2 f#3@6 d#3 ~", C: "d#3@6 d#3 f#3 g#3@6 d#3@2",
  D: "f#3@6 d#3@2 f#3@3 f#3@3 d#3@2", E: "f#1@8 f#1@7 ~",
})).s("gm_electric_bass_finger").gain(0.41)

// drums · rim
const rim = s("rim").struct("<[x!4] [~ x ~ x]!40 ~@10 [~ x ~ x]!13 ~@60>").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~@53 A B@10 C D E F E G H I J K J L@3 M N O P Q L@3 M N O P Q D E F E G H I J D E F E G H I J D E F E G H I J K J K J
  R@2 S ~ T
>`.pickRestart({
  A: "~@5 x ~ x", B: "x!2 ~ x!3 ~ x", C: "x!2 ~ x!2 ~@3", D: "x ~ x!2 ~@2 x ~ x ~ x!2 ~@2 x!2",
  E: "x ~ x!2 ~@2 x!3 ~ x!2 ~@2 x!2", F: "x ~@2 x ~@2 x ~ x ~ x!2 ~@2 x ~", G: "x ~@2 x ~@2 x ~ x ~ x!2 ~@2 x!2",
  H: "~@3 x ~@2 x ~ x ~ x!2 ~@2 x ~", I: "x ~ x!2 ~@2 x ~ x ~@2 x ~@2 x ~", J: "x ~@2 x ~@2 x ~@4 x ~@4",
  K: "~@2 x!2 ~@2 x ~ x ~@2 x ~@2 x ~", L: "x!2", M: "x ~@2 x ~@2 x ~ x ~@7", N: "x ~@2 x ~@2 x ~@3 x ~@5",
  O: "x ~@7 x ~@2 x ~@4", P: "x ~@2 x ~@2 x ~ x ~ x ~@2 x!2 ~", Q: "x ~@2 x ~@3 x ~@8", R: "x", S: "~ x ~@2",
  T: "~@3 x ~@12",
})).gain(0.45)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@53 A B@5 ~@10 C ~@25 C ~@7 C ~@7 C ~@12>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@6",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<~@52 [x!8]!12 ~@11 [x!8]!16 ~@28 [x!4] [x ~@3 x ~@4 x ~@4 x ~] ~@3>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@64 [x!8]!11 x ~@15 [x!8]!28 x ~@4>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@65 A ~@7 A B ~@16 A ~@7 A ~@7 A ~@7 A B A B A@2 C ~ C>".pickRestart({
  A: "x", B: "~@2 x ~@3 x!2", C: "~ x ~@2",
})).gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct("<~@75 [x!8]!16 ~@33>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@41 [~ x ~ x]!23 ~@60>").gain(0.35)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, distortion_guitar, overdriven_guitar, overdriven_guitar_soft,
  overdriven_guitar_2, distortion_guitar_2, bass, bass_2, rim, kick, snare, snare_soft, hihat, open_hat, crash,
  ride_bell, tambourine
)

More by Live