Strudelify

Locomotive

Guns N' Roses

KeyA majorTempo125 bpm
0:00/0:00
// Locomotive — Guns N' Roses
// 125 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 87, 4/4 at bar 88, 2/4 at bar 154, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 249 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 29.
setcpm(125/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.

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@5 A B@7 C D E F@2 G@3 H I H J@15 K L M N M N O C D E P J@18 Q R S T U T U T U V W X@3 Y Z@3 AA AB@4 AC@15 AD@7 AE@3
  AC@19 AF@2 AG AH AG AH AG AH AG AI AJ@3 AK AL AM@2 AN@2 J@3 AO AP AQ AR AS AT AU AV AW AX AY@2 T U T U T U V W X@3 Y
  Z@6 AZ@3 ~@59
>`.pickRestart({
  A: "~@6 [g#4,b4] ~", // G#m
  B: "[c#5@6 [a3,e4,a4]@16 [f#3,c#4,f#4]@16 [a3,e4,a4]!2 [a3,e4,a4]@14 [f#3,c#4,f#4]@12 [g4,c5]@4 [a3,e4,a4]@16 [f#3,c#4,f#4]@12 [g3,d4,g4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@4 e3@2 [a3,d4] [b3,e4]@2 e3]/7", // A5 F#5 A5 F#5 C5 A5 F#5 G5 …
  C: "e3@2 e3 e4 ~ e4 e3@4 [e4,a4]@2 ~ g#4 e3@2, ~@6 [e4,g4] ~", // A5 Em
  D: "e3@2 [g3,d4,g4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@4 e3@2 [a3,d4] [b3,e4]@2 ~", // G5 F#5 E5 D5 E5
  E: "[e3,b3,e4]@2 e3 e4 ~ e4 [e3,b3,e4]@4 [e3,b3,e4]@2 [a3,d4] [b3,e4]@3, ~@3 e3", F: "~@2 [a3,e4] ~",
  G: "[~@8 [a3,e4]@32 g3@2 a3@2 g3 a3!2 g3]/3", H: "a3!2 g3 a3!2 e3 g3 e3 g3 a3!2 g3 a3!2 g3 a3",
  I: "a3 g3 a3!2 e3!2 g3 e3 g3@2 a3@2 g3 a3!2 g3", J: "a3 g3 a3!2 e3!2 g3 e3 g3 a3!2 g3 a3!2 g3 a3",
  K: "a3 g3 a3!2 e3!2 g3 e3 g3@2 a3@2 g3 a3 g3 e3", L: "a3 ~ g3 a3 ~@2 [f#3,c#4,f#4]@4 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@4",
  M: "[f#3,c#4,f#4]!2 ~ [a3,e4]@3 [a3,e4]@2", N: "[a3,e4]!2 ~ [f#3,c#4,f#4]@3 [f#3,c#4,f#4]@2",
  O: "[f#3,c#4,f#4]@2 [g3,d4,g4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@4 e3@2 [a3,d4] [b3,e4]@2 e3", // F#5 G5 F#5 E5 D5 E5
  P: "~@8 g3 a3!2 g3 a3!2 g3 a3", Q: "a3 g3 a3!2 e3!2 g3 e3 c4@2 d4@2 c4 d4 c4@2",
  R: "d4!2 c4 d4 ~@2 c4@4 d4@2 c4 d4 c4@2", S: "[g3,d4,g4]@2 [g3,d4,g4]@2 [a3,e4]!2 [g#3,d#4]!2",
  T: "[g3,d4]!2 [f#3,c#4]!2 [f3,c4] [e4,b4] [d#4,a#4] [d4,a4]", U: "[c4,g4] a3 [c4,g4]@2 [a3,e4]!2 [g#3,d#4]!2",
  V: "[g3,d4]!2 [f#3,c#4]!2 ~ [f3,c4] ~ [e3,b3]", W: "~@2 [c4,g4]@2 ~@2 [c4,g4]@2 [a3,e4]!2 ~@6",
  X: "~@3 e3 g3 a3!2 g3 [a3,e4]!2 ~@6", Y: "~@3 e3 g3!2 a3@2 ~@2 [d4,a4,d5]@3 [a3,e4,a4]@3",
  Z: "[d4,a4,d5]@3 [a3,e4,a4]@2 e3 g3 a3!2 ~ [d4,a4,d5]@3 [a3,e4,a4]@3", AA: "[c4,g4,c5]@3 e4",
  AB: "[~@4 [a4,d5] [b4,e5]@2 [a4,d5] [b4,e5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [e4,b4,e5]@6 [a4,d5] [b4,e5]@2 [a4,d5] [b4,e5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [e4,b4,e5]@6 [a4,d5] [b4,e5]@2 [a4,d5] [b4,e5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [e4,b4,e5]@4 [e4,b4,e5]@2 [a4,d5] [b4,e5]@3 [g3,d4,g4]@4 [g3,d4,g4]@4, ~@4 e4@3 e4@3 ~@10 e4@3 e4@3 ~@10 e4@3 e4@3 ~@10 e4@4 ~@8]/4", // D5 E5 D5 E5 D5 E5 D5 E5 …
  AC: "g3 a3!2 g3 a3!2 g3 a3!2 g3 a3!2 e3!2 g3 e3",
  AD: "[g3@2 a3@2 g3 a3 g3 e3 a3 ~ g3 a3 ~@2 [f#3,c#4,f#4]@4 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@4 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 ~@2 [a3,e4]@6 [a3,e4]@4 [a3,e4]@2 [a3,e4]@2 ~@2 [f#3,c#4,f#4]@6 [f#3,c#4,f#4]@4 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 ~@2 [a3,e4]@6 [a3,e4]@4 [a3,e4]@2 [a3,e4]@2 ~@2 [f#3,c#4,f#4]@6 [f#3,c#4,f#4]@4 [f#3,c#4,f#4]@2 [g3,d4,g4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@4 e3@2 [a3,d4] [b3,e4]@2 e3 e3@2 e3 e4 ~ e4 e3@2]/7", // F#5 A5 F#5 A5 F#5 G5 F#5 E5 …
  AE: "[~@2 [e4,a4]@2 ~ g#4 e3@2 e3@2 [g3,d4,g4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@4 e3@2 [a3,d4] [b3,e4]@2 ~ [e3,b3,e4]@2 e3 e4 ~ e4 [e3,b3,e4]@4 [e3,b3,e4]@2 [a3,d4] [b3,e4]@3 ~@8, ~@2 [e4,g4] ~@15 e3@2 ~@4]/3", // A5 G5 F#5 E5 D5 E5 D5 E5 …
  AF: "[c4@2 d4@2 c4 d4 c4@2 d4!2 c4 d4 ~@2 c4@4 d4@2 c4 d4 c4@2 [g3,d4,g4]@4 [g3,d4,g4]@4]/2", // G5
  AG: "[a3,e4]!2 [g#3,d#4]!2 [g3,d4]!2 [f#3,c#4]!2", AH: "[f3,c4] [e4,b4] [d#4,a#4] [d4,a4] [c4,g4] a3 [c4,g4]@2",
  AI: "~ [f3,c4] ~ [e3,b3] ~ [c4,g4] ~ [c4,g4]", AJ: "[a3,e4]!2 ~@9 e3 g3 a3!2 g3", AK: "[a3,e4]!2 ~@9 e3 g3!2 a3@2",
  AL: "~@2 [d4,a4,d5]@3 [a3,e4,a4]@3 [d4,a4,d5]@3 [a3,e4,a4]@2 e3 g3 a3", // D5 A5 D5 A5
  AM: "a3 ~ [d4,a4,d5]@3 [a3,e4,a4]@3 [d4,a4,d5]@3 [a3,e4,a4]@2 e3 g3 a3", // D5 A5 D5 A5
  AN: "[a3 ~ [d4,a4,d5]@3 [a3,e4,a4]@3 [c4,g4,c5]@12 e4@4 g3 a3!2 g3 a3!2 g3 a3]/2", // D5 A5 C5
  AO: "a3 g3 a3!3 ~ c4@4 d4 a3 c4 d4!2 c4", AP: "d4!2 c4 d4!2 a3 c4@4 d4 a3 c4 d4!2 c4",
  AQ: "d4!2 c4 d4!2 ~ g3@4 a3 e3 g3 a3!2 g3", AR: "a3!2 g3 a3!2 e3 g3@4 a3 e3 g3 a3!2 g3",
  AS: "a3!2 g3 a3!2 e3 a3@4 b3@2 a3 b3!2 a3", AT: "b3 ~ a3 b3 ~ b3 a3@4 b3@2 a3 b3!2 a3",
  AU: "b3 ~ [g3,d4,g4]@2 [f#3,c#4,f#4]@2 [e3,b3,e4]@6 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]", // G5 F#5 E5
  AV: "[e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2", AW: "[g3,d4,g4]@2 [g3,d4,g4]@2 [a3,e4] ~@3",
  AX: "~@4 [f4,c5] [e4,b4] [d#4,a#4] [d4,a4]", // F5 E5 D#5 D5
  AY: "[[d4,a4]@2 a3!2 [c#4,g#4]@20 [a3,e4]@2 [a3,e4]@2 [g#3,d#4]@2 [g#3,d#4]@2]/2", // D5 C#5 A5 G#5
  AZ: "[[d4,a4,d5]@3 [a3,e4,a4]@2 e3 g3 a3!2 ~ [d4,a4,d5]@3 ~@3 [c4,g4]@32, ~@13 [a3,e4,a4]@32 ~@3]/3", // D5 A5 D5 C5 A5
})).s("gm_overdriven_guitar").gain(0.31)

// other · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@32 A B@2 C@2 D@2 E@2 ~@8 F G H I J ~@7 A B@2 C@2 D@2 K@3 ~@16 L M N O P ~@7 Q R S@2 Q T S@2 U@6 ~@3 V W X Y Z ~@7 Q
  R S@2 Q T AA@3 ~@15 AB@3 AC@2 AD AE AF AG AH AI@2 AJ AK AL AM AN ~@80
>`.pickRestart({
  A: "~@8 g4@2 e5@2 ~ e5 ~ e5", B: "[d5@2 a4 g5 ~ g5 d5@2 g4@2 [a4,c#5]@14 g4@2 e5@2 ~ e5 ~ e5]/2",
  C: "[d5@2 a4 g5 ~ g5 d5 c#5@17 g4@2 e5@2 ~ e5 ~ e5]/2", D: "[d5@2 a4 g5 ~ g5 d5@2 g4@2 a4@14 g4@2 e5@2 ~ e5 ~ e5]/2",
  E: "[d5@2 a4 g5 ~ g5 d5 c#5@17 ~@8]/2", F: "~@8 g3@2 c4 a3!3 c4@2",
  G: "a3 c4 d4@2 g4 e4 a4 e4 g4@2 c5 c#5 a4 c5@2 e5", H: "[e5,a5] e5 g5 a5@2 g5 a5 g5 f#5 g5 f#5 g5@2 f#5 e5@2",
  I: "~ e5!2 [d5,d#5] d#5 [c5,d5] a4 [a4,d5] c5@2 a4 g4 a4@2 g4 e4", J: "c5@2 a4 e4 d4 c4 a3 g3 a3@8",
  K: "[d5@2 a4 g5 ~ g5 d5@34 ~@8]/3", L: "d#5 d5 c5 a4 e5 d#5 d5 c5 f#5 e5 d5 c5 g5 f#5 e5 f#5",
  M: "a5 g5 f#5 e5 b5 a5 f#5 e5 c6 b5 a5 g5 b5 f#5 c6 a5", N: "e6 d6 c6 g6 e6 ~ a6@2 g6 a6 c7 a6 g6 c7 g6 [a6,c7]",
  O: "a6 [g6,a6] g6 a6 g6 [d6,e6] e6 [e6,g6] d6@2 c6 a5 d6 c6 a5 g5", P: "a5@3 ~@5",
  Q: "g4@2 e5@2 ~ e5 ~ e5 d5@2 a4 g5 ~ g5 d5@2", R: "g4 [a4,c#5]@7",
  S: "[g4@2 e5@2 ~ e5 ~ e5 d5@2 a4 g5 ~ g5 d5 c#5@17]/2", T: "g4 a4@7",
  U: "[~@4 [f#4,a#4] [g#4,b4] [g#4,c5] [a4,c#5]@5 [a4,c#5] [g#4,c5] [g4,b4] [f#4,a#4]@5 [f#4,a#4] [g#4,b4] [g#4,c5] [a4,c#5]@5 [a4,c#5] [g#4,c5] [g4,b4] [f#4,a#4]@5 [f#4,c#5] [g#4,d5] [f#4,c#5] [e4,e5]@9]/6", // F# G#m G# A G# G F# G#m …
  V: "b5 f#5 b5 f#5 b5 f#5 b5 f#5", W: "c6 c#6 a5 c6 a5 [g5,a5] g5@2 a5 g5 a5 g5 e5 g5 e5 g5",
  X: "g5@2 c6 a5 c6 d6 [a5,c6] c#6 c6 d6 a5 [c6,c#6] a5 g5 d#6@2", // Am C#maj7
  Y: "c6 e6 [c6,e6] c6!2 [c6,e6] b5 [b5,c6] c6@2 a5 f#5 b5@2 a5 g5", Z: "a5",
  AA: "[g4@2 e5@2 ~ e5 ~ e5 d5@2 a4 g5 ~ g5 d5@34]/3",
  AB: "[~@8 [c5,e5]@16 d5 e5 d5 e5 c5 a4 g4 d5@2 e5 d5 e5 c5 a4 g4 d5@2 g5 d5 e5 d5 e5 d5 e5]/3", // C
  AC: "[d5 e5 d5 e5 c5 a4 g4 d5@2 e5 d5 e5 c5 a4 g4 f#5@3 d5 e5 c5 a4 g4 g5@2 a5!2 g5 a5 g5 e5 g5]/2",
  AD: "d#5 e5 d5 d#5 e5 d5 [g4,c5,e5]@4 [a4,d5,f#5]@2 [g4,c5,e5] [a4,d5,f#5]@2 [g4,c5,e5]", // C D C D C
  AE: "[a4,d5,f#5]!2 [g4,c5,e5] [a4,d5,f#5] c5 a4 [g4,c5,e5]@4 [a4,d5,f#5]@2 [g4,c5,e5]@3 a4", // D C D C D C
  AF: "[d5,f#5] a4 [c5,e5]@3 ~ [d4,g4]@4 [e4,a4]@2 [d4,g4]@2 g4 e4", // D C G5 A5 G5
  AG: "[e4,a4] e4 [d4,g4] [e4,a4]@2 e4 [d4,g4]@4 [e4,a4]@2 [d4,g4] [e4,a4] g4 e4", // A5 G5 A5 G5 A5 G5 A5
  AH: "[e4,a4] e4 [d4,g4] [e4,a4]@2 e4 a3@6 c#4@4", AI: "[g#4@2 d5@2 e5@2 e5 [a5,d6]@2 b5 a5 b5@2 b5 g#5 g5]/2",
  AJ: "f#5@4 e5@4 e5 d5 b4 a#4 a4 g4 e4 a4", AK: "~ g4@7 [a5,c#6]@2 [a5,c#6]@2 [a5,c#6]!2 [g#5,c6]@2",
  AL: "[g5,b5]@2 [g5,b5]@2 [g5,b5]!2 [f#5,a#5]@2 [f5,a5]@2 [e5,g#5]@2 [d#5,g5]@2 [d5,f#5]@2", // G F# F E D# D
  AM: "[d5,f#5]@2 a4!2 [c#5,e5]@12", AN: "e5@2 [c#5,e5] ~@5",
})).s("gm_overdriven_guitar").gain(0.41)

// other · ocarina
const ocarina = note("<~@206 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3>".pickRestart({
  A: "[~@2 e5@7 ~@3]/3",
})).s("gm_ocarina").gain(0.41)

// other · overdriven guitar
const overdriven_guitar_3 = note(`<
  ~@3 A@2 ~ B C D E F G H I@3 J K@3 L M N M ~@21 O I@3 P ~@32 Q ~@29 R@2 S T ~@32 U ~@4 V W@3 X ~@5 Y Z ~@15 Q ~@3 AA
  AB@2 AC@3 ~@59
>`.pickRestart({
  A: "[~@6 [g5,b5]@5 [a4,e5,a5]@3 ~@2]/2", B: "~@14 a3!2", C: "g3 a3!2 g3 a3!2 ~@4 a3@2 f#3 a3!2 f#3",
  D: "a3!3 f#3 a3 g3 ~@4 a3@2 g3 a3!2 g3", E: "a3!3 e3 a3!2 ~@4 a3@2 f#3 a3!2 f#3",
  F: "a3!3 f#3 a3 g3 [g4,c5]@4 [e4,a4]@2 a3!3 g3", G: "a3!3 g3 a3 e3 ~@4 a3@2 f#3 a3!2 f#3",
  H: "a3!2 ~@10 e4@3 [a4,d5]", // D5
  I: "[b4@2 [d4,a4,d5]@2 [d4,a4,d5]@2 b4@6 [a4,d5] [b4,e5]@2 [a4,d5] b4@2 a4@2 [d4,a4,d5]@2 ~@6 e4@3 [a4,d5] ~@2 [d4,a4,d5]@2 [d4,a4,d5]@2 ~@10, ~@15 e4@3 ~@13 e4@3 ~@14]/3", // D5 E5 D5
  J: "[g3,d4,g4]@4 [g3,d4,g4]@4 g3 a3!2 g3 a3!2 g3 a3", K: "a3 g3 a3!2 e3!2 g3 e3 g3 a3!2 g3 a3!2 g3 a3",
  L: "a3 g3 a3!2 e3!2 g3 e3 ~ a3 ~ g3 a3 ~ g3 a3", M: "~ g3 a3 ~ e3 ~@11", N: "~@9 a3 ~ g3 a3 ~ g3 a3",
  O: "~@12 e4@3 [a4,d5]", P: "[g3,d4,g4]!2 ~@2", Q: "~@5 a3 ~@10",
  R: "[~@4 e4@3 [a4,d5] b4@2 [d4,a4,d5]@2 [d4,a4,d5]@2 b4@6 [a4,d5] [b4,e5]@2 [a4,d5] b4@2 a4@2 [d4,a4,d5]@2 ~@2, ~@23 e4@3 ~@6]/2", // D5 E5 D5
  S: "~@4 e4@3 [a4,d5] ~@2 [d4,a4,d5]@2 [d4,a4,d5]@2 ~@2, ~@7 e4@3 ~@6", T: "~@2 [g3,d4,g4]!2", U: "~@13 a3 ~@2",
  V: "~@14 e3 g3", W: "~ a3 g3 ~ a3 ~@6 e3 g3 ~ a3 g3", X: "~ a3 g3 ~@13", Y: "~@2 b3!4 d4@4 e4@2 d4 ~@2 d4",
  Z: "~@2 d4 e4 ~@2 d4@4 ~@2 d4@3 e3", AA: "~@13 c#5@3", AB: "~@3 c#5@2 ~@3 g4 e4 ~@3 c#5@3",
  AC: "[~@3 c#5@2 ~@3 g4 e4 ~@6 [g#4,e5]@32, ~@13 c#5@32 ~@3]/3", // C#m
})).s("gm_overdriven_guitar").gain(0.31)

// chords · piano
const piano = note(`<
  ~@189 A@2 B@2 A@2 C@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2
  F ~@3
>`.pickRestart({
  A: "[[a3,e4,a4]@12 [a3,e4,a4] [g3,d4,g4]@3]/2", B: "[[f3,c4,f4]@6 g4 c5, ~@12 c5 ~@3]/2",
  C: "[[f3,c4,f4]@7 [d4,g4,b4]]/2", // F5 G
  D: "[e4,a4,c5]@4 [e4,g4,c5] [e4,a4,c5]@2 [e4,a4,c5]@3 [e4,g4,c5]@2 [e4,a4,c5]@2 [e4,g4,c5]@2", // Am C Am C Am C
  E: "[f4,a4,c5]@4 [f4,g4,c5] [f4,a4,c5]@2 [f4,a4,c5]@3 [f4,g4,c5]@2 [f4,a4,c5]@2 [f4,g4,c5]@2", F: "[e4,a4,c5] ~@3",
})).s("gm_piano").gain(0.36)

// chords · piano · soft notes · C Am C Am C Am C Am …
const piano_soft = note(`<
  ~@245
  [~@4 [e4,g4,c5] [e4,a4,c5]@2 [e4,a4,c5]@3 [e4,g4,c5]@2 [e4,a4,c5]@2 [e4,g4,c5]@2]
  [[e4,a4,c5]@4 [e4,g4,c5] [e4,a4,c5]@2 [e4,a4,c5]@3 [e4,g4,c5]@2 [e4,a4,c5]@2 [e4,g4,c5]@2]
  [[f4,a4,c5]@4 [f4,g4,c5] [f4,a4,c5]@2 [f4,a4,c5]@3 [f4,g4,c5]@2 [f4,a4,c5]@2 [f4,g4,c5]@2]!2
>`).s("gm_piano").gain(0.1)

// other · overdriven guitar
const overdriven_guitar_4 = note("<~@128 A B C@2 A B D@3 ~@112>".pickRestart({
  A: "g4@2 a5@2 ~ a5 ~ a5 g5@2 d5 b5 ~ b5 f#5@2", B: "c#5", C: "[g4@2 a5@2 ~ a5 ~ a5 g5@2 d5 b5 ~ b5 f#5 e5@17]/2",
  D: "[g4@2 a5@2 ~ a5 ~ a5 g5@2 d5 b5 ~ b5 f#5@34]/3",
})).s("gm_overdriven_guitar").gain(0.31)

// other · ocarina
const ocarina_2 = note(`<
  ~@205 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
>`.pickRestart({
  A: "[a5@3 ~]/2",
})).s("gm_ocarina").gain(0.41)

// other · overdriven guitar
const overdriven_guitar_5 = note(`<
  ~@193 A@2 B@2 ~ C@3 D@4 ~@2 E@2 F@3 G H I F J K L M N O P Q R S T U V W X Y Z AA AB AC AD@3 AE AF AG AH AI AJ AK ~@3
>`.pickRestart({
  A: "c5/2", B: "[~@4 e5@2 c6 a5@9]/2", C: "[~@8 e5@3 c6@3 a5@30 d5@2 c5@2]/3", D: "[d5@2 c5@12 c5@4 c5 f4@13]/4",
  E: "[c5@2 a5@18 c4 ~ c4!10]/2", F: "c4!16", G: "c4!14 g4@2", H: "c4!14 g5@2", I: "c4!12 d6@4",
  J: "c4!4 c4@2 a3!2 d4@2 d4 c4 d4@3 c4", K: "a4@8 a4@2 a3!2 a4@2 e4@2", L: "g4 d4@3 d4@2 a3!2 d4@2 g4@2 e4 g4@3",
  M: "c4!8 a4@2 ~@2 a4@4", N: "~@4 d5@2 a4!2 d#5@2 a4!2 d5@2 a4!2", O: "e5 a5@3", P: "a3 ~ a3 ~ a3 ~ g5@6 g5@4",
  Q: "g5 f5!2 ~", R: "c5@2 c5!2 d5@2 a4@2 d5@2 e5 g5 d5@2 c5 a4", S: "d5@3 c5@5",
  T: "d5@2 c5@2 d5@2 a4@2 d5@2 e5 g5 d5@2 c5@2", U: "d5@2 a4@2 g5@2 e5 g5 e5 f5 d5 d#5 d5@2 e5 d#5",
  V: "e5 [d5,d#5] c5 a4 e5@2 g5@2 e5 g5@2 e5 g5@2 a5!2", W: "c6@2 d6 a5 c6 d6 c6 a5 d6@2 c6 d6 c6 a5 d6@2",
  X: "c6 d6 c6 a5 d6@2 c6 d6 d#6 d6@2 d6 d6@2 a5@2", Y: "c6@4 c6@2 a5 g5 a5@2 a5 g5 c6@4",
  Z: "a5 b5 c6 d6 e6@2 d6 e6 f6 g6 f6@2 e6 d6 g6 d6", AA: "f6@2 d6 e6 d6@2 g6!2 d6@2 c6@2 d6@2 a5@2",
  AB: "d6@2 e6 g6 d6@2 c6@2 d6@2 a5@2 d6@2 c6@2", AC: "d6@2 c6 d6@2 c6 d6 a5",
  AD: "[c6@2 d6@2 a5@2 c6@2 d6@2 a5@2 b5@2 b5@22 a5 g5 e5@2 e5@8]/3",
  AE: "b5@2 a5 b5 c6 d6 e6 d6 g6 d6 f6@2 d6 e6 d6@2", AF: "g6 f6 e6 g6 f6 e6 g6@3 g6 f6@2 d6 e6 d6@2",
  AG: "e6@2 d6@2 g6 d6@2 g6 d6@2 g6 d6@2 g6 d6@2", AH: "g6 d6@2 g6 d6@2 g6 d6 e6 d#6 d6 d#6 e6 f6 d#6 e6",
  AI: "d6 e6 d6!2 e6!2 d#6 d6 e6 d#6 d6 d#6 d6 c6 d6 a5", AJ: "c6 d6 a5!2 c6 a5!3 b5 c6 f5!2 f5@2 e5 d5", AK: "c7 ~",
})).s("gm_overdriven_guitar").gain(0.36)

// other · overdriven guitar · soft notes · C5 Gsus2
const overdriven_guitar_soft = note(`<
  ~@245
  [~@4 c7@3 f6]
  [c7@6 a6 g6 c7@8]
  [[g6,c7]@2 a6 [g6,a6] c7 g6 a6@2 g6 a6 g6@3 g6 e6 d6]
  [d6@2 f6@2 d6@2 e6 d6 e6 d#6 d6@2 c6@2 a5@2]
>`).s("gm_overdriven_guitar").gain(0.1)

// bass · electric bass pick
const bass = note("<~@4 A B C B C B C B D E@2 F G ~@232>".pickRestart({
  A: "~@3 a1@2 a1 c#2 a1", B: "d2@2 d2 d#2@3 e2@4 e2@2 f#2@2 e2@2", C: "f#2 e2 f#2 a1@2 a1 c#2 a1",
  D: "f#2@2 g2@2 f#2@2 e2@6 d2 e2@2 d2", E: "e2@2 d2@2 d2@2 e2@6 d2 e2@2 d2", F: "e2@2 d2@2 d2@2 e2@6 d2 e2@3",
  G: "g2!2 ~@2",
})).s("gm_electric_bass_pick").gain(0.41)

// bass · electric bass pick · soft notes
const bass_soft = note("<~@16 A@5 B C B D ~@224>".pickRestart({
  A: "[~@8 a2@3 f#2 a2@2 f#2 a2@2 f#2 a2@2 e2!2 f#2 e2 a2@3 f#2 a2@2 f#2 a2@2 f#2 a2@2 e2!2 f#2 e2 a2@3 f#2 a2@2 f#2 a2@2 f#2 a2@2 e2!2 f#2 e2 a2@3 f#2 a2@2 f#2 a2@2 f#2 a2@2 e2!2 f#2 e2 a2@2 a2@2 a2@2 a2@2]/5",
  B: "a2!2 e2!2 a2!4", C: "a2!2 e2 f#2 a2!4", D: "a2@2 a2@2 e2 f#2 a2 e2 ~@8",
})).s("gm_electric_bass_pick").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A B C B D ~ A B C B C B C B C B D ~@7 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C B C B D ~@8 E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F
  E F E F E F E F E F E F E F E F ~@8 A B C B C B C B C B C B C B G A B C B C B C B D ~@72
>`.pickRestart({
  A: "~@8 x ~ x ~@2 x ~@2", B: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", C: "x ~@2 x ~@2 x ~ x ~ x ~@2 x ~@2",
  D: "x ~@2 x ~@2 x ~@9", E: "x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~", F: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", G: "x ~@2 x ~@12",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C ~ B@10 C ~@3 D ~@2 E F ~@53 G@3 ~@2 H@3 ~@59 I@3 ~ J@3 ~@24 G@3 ~@2 H@7 ~@61
>`.pickRestart({
// … 51 more lines

More by Guns N' Roses