Strudelify
Paradise City cover art

1987 · Appetite For Destruction

Paradise City

Guns N' Roses

KeyG majorTempo98 bpm
0:00/0:00
// Paradise City — Guns N' Roses
// 98 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 41, 4/4 at bar 42, 2/4 at bar 51, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 4 "SynString" named as a string part, played on synth strings 1 (its brass section patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 158 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · distortion guitar · "Dst Gtr"
const distortion_guitar = note(`<
  ~@15 A B C D B@2 C D B@2 C D B@2 C D B E F E G E F E H@2 I J K L@2 J K M N O B C D B@2 C D B E F E G E F E H@2 P@3 Q@4
  R@2 J K S@2 T U V W X Y X Z X Y X AA E F E H@2 P@3 Q@12 AB@3 AC@3 AD@3 AE@2 AF@6 AG@6 AH@3 AI@8 AJ AK@2 ~@8
>`.pickRestart({
  A: "~@28 d3 ~ d3 ~", B: "[g2,d3,g3]@27 ~ [d3,g3] ~ [d3,g3] ~", C: "[c3,g3]@27 ~ [c3,g3] ~ [c3,g3] ~",
  D: "[f2,c3,f3]@11 ~ [c3,f3] ~ [c3,f3] ~ [c3,g3]@11 ~ [c3,g3] ~ [c3,g3] ~", // F5 C5
  E: "[g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2] [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3", // G F F# G F F# G F …
  F: "[g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2] [f1,f2] [g1,g2] [f1,f2] [c2,c3] [a#1,a#2]@3", // G F F# G F F# G F …
  G: "[g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [g1,g2]@2 [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3", // G F F# G F G F G …
  H: "[[g1,g2]@4 [f1,f2]@2 [f#1,f#2]@2 [g1,g2]@4 [f1,f2]@2 [g1,g2]@2 [c2,c3]@30 ~@2 [c2,c3]@3 ~ [c2,c3]@2 [a#1,a#2] ~ [c2,c3] ~ [a#1,a#2]@2 [f1,f2]@2 [g1,g2]@2]/2", // G F F# G F G C A# …
  I: "~@8 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2]", // G F F# G F F#
  J: "[g1,g2] [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2]", // G F G F G A# G F …
  K: "[g1,g2] [f1,f2] [g1,g2] [f1,f2] [c2,c3] [a#1,a#2]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2]", // G F G F C A# G F …
  L: "[[g1,g2] [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [g1,g2]@2 [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2]]/2", // G F G F G A# G F …
  M: "[g1,g2] [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [g1,g2]", // G F G F G A# G F …
  N: "[c2,c3]@15 ~", O: "[c2,c3]@3 ~ [c2,c3]@2 [a#1,a#2] ~ [c2,c3] ~ [a#1,a#2]@2 [f1,f2]@2 [g1,g2]@2 ~@16",
  P: "[~@16 [g2,d3,g3]@27 ~ [d3,g3] ~ [d3,g3] ~ [c3,g3]@27 ~ [c3,g3] ~ [c3,g3] ~ [f2,c3,f3]@11 ~ [c3,f3] ~ [c3,f3] ~]/3", // G5 C5 F5
  Q: "[[c3,g3]@11 ~ [c3,g3] ~ [c3,g3] ~ [g2,d3,g3]@27 ~ [d3,g3] ~ [d3,g3] ~ [g2,d3,g3]@27 ~ [d3,g3] ~ [d3,g3] ~ [c3,g3]@27 ~ [c3,g3] ~ [c3,g3] ~ [f2,c3,f3]@11 ~ [c3,f3] ~ [c3,f3] ~]/4", // C5 G5 C5 F5
  R: "[[c3,g3]@11 ~ [c3,g3] ~ [c3,g3] ~ [f3,c4,f4]@27 ~ [d3,g3] ~ [d3,g3] ~ [g1,g2]@4 [f1,f2]@2 [f#1,f#2]@2 [g1,g2]@4 [f1,f2]@2 [f#1,f#2]@2]/2", // C5 F5 G5 G F F# G F …
  S: "[[g1,g2] [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [g1,g2]@2 [f1,f2] [g1,g2] [f1,f2] [g1,g2] [a#1,a#2]@3 [a1,a2]@2 [g1,g2] [g#1,g#2] [a1,a2]@2 [g1,g2] [g#1,g#2]]/2", // G F G F G A# G F …
  T: "[a1,a2] [g1,g2] [a1,a2] [g1,g2] [a1,a2] [c2,c3]@3 [a1,a2]@2 [g1,g2] [g#1,g#2] [a1,a2]@2 [g1,g2] [g#1,g#2]", // A G A G A C A G …
  U: "[a1,a2] [g1,g2] [a1,a2] [g1,g2] [d2,d3] [c2,c3]@3 [g1,g2]@2 [f1,f2] [f#1,f#2] [g1,g2]@2 [f1,f2] [f#1,f#2]", // A G A G D C G F …
  V: "[g1,g2]@2 [f1,f2]@2 [g1,g2]@2 [f1,f2]@2 [g1,g2]@2 [a#1,a#2]@6 [g1,g2]@4 [f1,f2] ~ [f#1,f#2] ~ [g1,g2]@4 [f1,f2]@4", // G F G F G A# G F …
  W: "[c2,c3]@31 ~", X: "[d2,d3]!4 [d2,d3]@3 [d2,d3]!5 [d2,d3]@2 [g1,g2]@2",
  Y: "[c2,c3]!4 [c2,c3]@3 [c2,c3]!5 [c2,c3]@2 [g1,g2]@2", Z: "[c2,c3]!4 [c2,c3]@3 [c2,c3]!5 [c2,c3]@2 [a1,a2]@2",
  AA: "[c2,c3]!4 [c2,c3]@3 [c2,c3] [a#1,a#2]!4 [a#1,a#2]@2 [f1,f2]@2", // C A# F
  AB: "[[c3,g3]@11 ~ [c3,g3] ~ [c3,g3] ~ [g1,g2]@63 ~@17]/3", AC: "[~@16 [g1,g2]@63 ~@17]/3",
  AD: "[~@16 [g1,g2]@4 [f1,f2]@2 [f#1,f#2]@2 [g1,g2]@3 [f1,f2]@2 [f#1,f#2]@2 [g1,g2]@2 [f1,f2]@2 [g1,g2]@2 [f1,f2]@2 ~ [a#1,a#2]@6 [c2,c3]@4 [a#1,a#2]@2 [b1,b2]@2 [c2,c3]@3 [a#1,a#2]@2 [b1,b2]@2 [c2,c3]@2 [a#1,a#2]@2 [c2,c3]@2 [a#1,a#2]@2 ~ [a#1,a#2]@6 [f1,f2]@4 [d#1,d#2]@2 ~ [f1,f2]@4 [d#1,d#2]@2 [e1,e2]@2 [c2,c3]@2 ~ [c2,c3]@2, ~@39 [g1,g2]@2 ~@28 [c2,c3]@2 ~@11 [e1,e2]@2 ~@9 [a#1,a#2]@2 ~]/3", // G F F# G F F# G F …
  AE: "[[a#1,a#2]@2 [c2,c3]@2 [a#1,a#2]@6 [g1,g2]@3 [f1,f2]@2 [f#1,f#2]@2 [g1,g2]@3 [f1,f2]@2 [g1,g2]@4 ~ [g1,g2]@2 [f1,f2]@2 [g1,g2]@2 [a#1,a#2]@5 [g2,d3]@26, ~@13 [f1,f2] ~@18]/2", // A# C A# G F F# G F …
  AF: "[~ [c2,g2]@27 ~ [f2,c3]@13 ~ [c2,g2]@13 [g2,d3]@27 ~ [g2,d3]@27 ~ [c2,g2]@27 [f2,c3]@13 ~ [c2,g2]@14 [g2,d3]@25]/6", // C5 F5 C5 G5 C5 F5 C5 G5
  AG: "[~@2 [g2,d3]@27 ~ [c2,g2]@27 [f2,c3]@13 ~ [c2,g2]@14 [g2,d3]@27 [g2,d3]@27 ~ [c2,g2]@27 [f2,c3]@13 ~ [c2,g2]@11]/6", // G5 C5 F5 C5 G5 C5 F5 C5
  AH: "[~@3 [g2,d3]@27 [g2,d3]@27 ~ [c2,g2]@27 [f2,c3]@11]/3", // G5 C5 F5
  AI: "[~@3 [c2,g2]@14 [g2,d3]@27 [g2,d3]@27 ~ [c2,g2]@27 [f2,c3]@13 ~ [c2,g2]@14 [g2,d3]@27 [g2,d3]@27 ~ [c2,g2]@27 [f2,c3]@13 ~ [c2,g2]@14 [g2,d3]@15 [g2,d3]@3 [g2,d3]]/8", // C5 G5 C5 F5 C5 G5 C5 F5 …
  AJ: "~@2 [g2,d3]@2 [g2,d3]@2 ~ [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@4 [g2,d3]@4", // G5
  AK: "[[g2,d3]@5 [g2,d3]@33 [g2,d3]@2 ~@24]/2", // G5
})).s("gm_distortion_guitar").gain(0.36)

// bass · electric bass finger · "El Bass"
const bass = note(`<
  ~@16 A B C A@2 B C A@2 B C A@2 B C A D E F G D E F H@2 I J K L@2 J K M N O P Q R S P Q R T D E F G D E F H@2 U V W X Y
  V W Z@2 J K AA@2 AB AC AD AE AF AG AF AH AF AG AF AI D E F H@2 U V W X Y V W X Y V W X Y V W AJ@3 AK@3 AL AM@2 AN AO
  AP AQ@2 AR AS AT AU AV AW@2 AX AY@3 AZ BA BB BC BD@2 BE BF@3 BG@2 ~@8
>`.pickRestart({
  A: "g1@31 ~", B: "c2", C: "f2 c2", D: "g1@4 f1 ~ f#1 ~ g1@4 f1 ~ f#1 ~ g1@2 f1 ~ g1 ~ f1@2 g1 ~ a#1@6",
  E: "g1@3 ~ f1@2 f#1@2 g1@4 f1@2 f#1@2 g1@2 f1@2 g1@2 f1@2 c2@2 a#1@6",
  F: "g1@2 f1 f#1 g1@2 f1 f#1 g1 f1 g1 f1 g1 a#1@3", G: "g1@2 f1 f#1 g1@2 f1 g1@2 f1 g1 f1 g1 a#1@3",
  H: "[g1@4 f1@2 f#1@2 g1@4 f1@2 g1@2 c2@30 ~@2 c2@3 ~ c2@2 a#1 ~ c2 ~ a#1@2 f1@2 g1@2]/2",
  I: "~@16 g1@4 f1 ~ f#1 ~ g1@4 f1 ~ f#1 ~", J: "g1@2 f1 ~ g1 ~ f1@2 g1 ~ a#1@6 g1@3 ~ f1@2 f#1@2 g1@4 f1@2 f#1@2",
  K: "g1 f1 g1 f1 c2 a#1@3 g1@2 f1 f#1 g1@2 f1 f#1",
  L: "[g1@2 f1@2 g1@2 f1@2 g1@2 a#1@6 g1@4 f1@2 f#1@2 g1@4 f1@2 g1@4 f1@2 g1@2 f1@2 g1@2 a#1@6 g1@4 f1 ~ f#1 ~ g1@4 f1 ~ f#1 ~]/2",
  M: "g1 f1 g1 f1 g1 a#1@3 g1@2 f1 f#1 g1@2 f1 g1", N: "c2@15 ~", O: "c2@3 ~ c2@2 a#1 ~ c2 ~ a#1@2 f1@2 g1@2 ~@16",
  P: "g1@11 ~ g1 ~ g1@3 ~ g1 ~ g1@7 ~ a#1@2 g1 ~", Q: "c2@11 ~ g1 ~ c2@3 ~ g1 ~ c2@7 ~ d2 ~ c2 ~",
  R: "f2@11 ~ f2 ~ f2 ~ c2@3 ~ c2@7 ~ c2 ~ d2 ~", S: "g1@7 ~ g1@3 ~ f1 ~ g1@3 ~ f1 ~ g1@3 ~ g1@3 ~ f1 ~ f1 ~",
  T: "g1@15 ~", U: "~@16 g1@11 ~ g1 ~ g1@2", V: "~@2 g1 ~ g1@7 ~ a#1@2 g1 ~ c2@11 ~ g1 ~ c2@2",
  W: "~@2 g1 ~ c2@7 ~ d2 ~ c2 ~ f2@11 ~ f2 ~ f2 ~", X: "c2@3 ~ c2@7 ~ c2 ~ d2 ~ g1@7 ~ g1@3 ~ f1 ~ g1@2",
  Y: "~@2 f1 ~ g1@3 ~ g1@3 ~ f1 ~ f1 ~ g1@11 ~ g1 ~ g1@2",
  Z: "[c2@3 ~ c2@7 ~ c2 ~ d2 ~ g2 ~ f2@29 ~ g1@4 f1 ~ f#1 ~ g1@4 f1 ~ f#1 ~]/2",
  AA: "[g1@2 f1@2 g1@2 f1@2 g1@2 a#1@6 g1@4 f1@2 f#1@2 g1@4 f1@2 g1@4 f1@2 g1@2 f1@2 g1@2 a#1@6 a1@4 g1 ~ g#1 ~ a1@4 g1 ~ g#1 ~]/2",
  AB: "a1@2 g1 ~ a1 ~ g1@2 a1 ~ c2@6 a1@3 ~ g1@2 g#1@2 a1@4 g1@2 g#1@2",
  AC: "a1 g1 a1 g1 d2 c2@3 g1@2 f1 f#1 g1@2 f1 f#1", AD: "g1@2 f1@2 g1@2 f1@2 g1@2 a#1@6 g1@4 f1 ~ f#1 ~ g1@4 f1@4",
  AE: "c2@31 ~", AF: "d2 ~ d2 ~ d2 ~ d2 ~ d2@5 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@3 ~ g1@3 ~",
  AG: "c2 ~ c2 ~ c2 ~ c2 ~ c2@5 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@3 ~ g1@3 ~",
  AH: "c2 ~ c2 ~ c2 ~ c2 ~ c2@5 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@3 ~ a1@3 ~", AI: "c2@15 ~ a#1@15 ~",
  AJ: "[c2@3 ~ c2@7 ~ c2 ~ d2 ~ g1@61 ~@19]/3", AK: "[~@16 g1@61 ~@19]/3",
  AL: "~@10 e1@2 f1@2 f#1@2 g1@4 f1 ~ f#1 ~ g1@3 f1 ~ g1@3",
  AM: "[~ f1 ~ g1@2 f1 ~@2 f1 ~ a#1@3 ~ c2@3 ~ a#1@3 ~ c2@3 a#1 ~ c2@3 ~ c2@2 a#1@3 ~ c2@3 a#1@3 ~ f2@3 ~ e2 ~@2 f2@3 ~ e2 ~ c2@4 c2 a1@2, ~@7 g1@3 ~@54]/2",
  AN: "~@2 c2@3 ~ a1@3 ~ g1@3 f1@3 ~ g1@3 f1@2 g1@3 ~ g1 e1 ~ e1@2 f1",
  AO: "~ f1 f#1 ~ f#1 ~ g1@3 f1 ~ f#1 ~ g1@3 f1 ~ g1@3 f1 ~ g1@2 f1 ~@2 f1 ~ a#1@2, ~@27 g1@3 ~@2",
  AP: "~ c2@3 ~ a#1@3 c2@3 ~ a#1 ~ c2@3 c2 ~ a#1@3 c2@3 ~ a#1@3 f2@3",
  AQ: "[e2 ~@3 f2@3 e2 ~ c2@3 c2 ~ a1@3 ~ c2@3 a1@3 g1@2 g2@2 b2@2 ~ c3@2 c3@2 c#3@2 ~ d3@2 d3@2 e2 e2@2 f2@2 f2@2 f#2 f#2@2 g1@3 f1 ~ f#1 ~ g1@3 f1 ~, ~@30 b2@2 ~@5 c#3@2 ~@25]/2",
  AR: "g1@3 f1 ~ g1@2 f1 ~@2 f1 ~ a#1@3 ~ c2@3 a#1@3 c2@3 ~ a#1 ~ c2@3 c2, ~@9 g1@3 ~@20",
  AS: "~ a#1@3 c2@3 ~ a#1@3 f2@3 e2 ~@3 f2@3 e2 ~ c2@3 c2 ~ a1@3 ~",
  AT: "c2@3 a1@3 ~ g1@3 f1@2 ~ g1@3 ~ f1@2 g1@3 g1 ~ e1 e1@2 f1 ~ f1 ~ f#1",
  AU: "f#1 ~ g1@3 f1 ~ f#1 ~ g1@3 f1 ~ g1@3 f1 ~ g1@2 f1 ~@2 f1 ~ a#1@3 ~ c2@2, ~@23 g1@3 ~@6",
  AV: "~ a#1@3 c2@3 ~ a#1 ~ c2@3 c2 ~ a#1@3 c2@3 ~ a#1@3 f2@3 e2 ~@3",
  AW: "[f2@3 e2 ~ c2@3 ~ c2 a1@3 ~ c2@3 a1@3 ~@2 g2@2 g2@2 g2 g2@2 g2@2 g2@2 ~ g3@2 g3@2 g3 g3@2 g3@2 g3@2 g3!2 ~ g1@3 f1 ~ f#1 ~ g1@3 f1 ~ g1@3 ~, ~@21 g1@2 ~@10 g2@2 ~@29]/2",
  AX: "f1 g1@2 f1 ~@2 f1 ~ a#1@3 ~ c2@3 a#1@3 c2@3 ~ a#1 ~ c2@3 c2 ~ a#1@3, ~@5 g1@3 ~@24",
  AY: "[c2@3 ~ a#1@3 f2@3 ~ e2 ~@2 f2@3 e2 ~ c2@3 ~ c2 a1@3 ~ c2@3 a1@3 ~ g1@3 f1@2 ~ g1@3 ~ f1@2 g1@3 g1 ~ e1 e1@2 f1 ~ f1 ~ f#1!2 ~ g1@4 f1 f#1 ~ g1@3 f1 ~ g1@3 ~ f1 g1@2 f1 ~@2 f1 ~ a#1@3 ~ c2@3 a#1@3, ~@83 g1@3 ~@10]/3",
  AZ: "c2@3 ~ a#1 ~ c2@3 c2 ~ a#1@3 c2@3 ~ a#1@3 f2@3 ~ e2 ~@2 f2@3 e2",
  BA: "~ c2@3 ~ c2 a1@3 ~ c2@3 a1@3 ~@2 g2@2 g2@2 g2 g2@2 g2@2 g2@2 ~ g3@2, ~@17 g1@2 ~@10 g2@2 ~",
  BB: "g3@2 g3@2 g3 g3@2 g3@2 g3!2 ~ g1@4 f1 f#1 ~ g1@3 f1 ~ g1@3 ~ f1 g1@2 f1",
  BC: "~@2 f1 ~ a#1@3 ~ c2@3 a#1@3 ~ c2@3 a#1 ~ c2@3 c2 ~ a#1@3 c2@3 ~, ~ g1@3 ~@28",
  BD: "[a#1@3 f2@3 ~ e2 ~@2 f2@3 e2 ~ c2@3 ~ c2 a1@3 ~ c2@3 a1@3 ~ g1@3 f1@2 ~@2 g1@3 f1@2 g1@3 g1 ~ e1 ~@2 f1 ~ f1 ~ f#1!2 ~ g1@4 f1 f#1, ~@25 e1 ~@6]/2",
  BE: "~ g1@3 f1 ~ g1@3 ~ f1 g1@2 f1 ~ g1@2 f1 a#1@3 ~ c2@3 a#1@3 ~ c2@3",
  BF: "[a#1 ~ c2@3 c2 ~ a#1@3 c2@3 ~ a#1@3 f2@12 ~@2 c2@12 ~@2 g1@15 g1@3 g1@3 g1@2 g1@2 ~ g1@2 g1@2 g1@2 g1@2 g1@3 g1@3 g1@3 g1@4 g1@4]/3",
  BG: "[g1@5 g1@31 ~@2 g1@2 ~@24]/2",
})).s("gm_electric_bass_finger").gain(0.5)

// other · overdriven guitar · "DstGtr2"
const overdriven_guitar = note(`<
  ~@84 A B C B C B C B ~ D E F G ~@16 H@6 I@3 J@2 K L@2 M N O@2 P Q R S T@2 U V W X Y Z@2 AA AB AC AD@2 ~@9
>`.pickRestart({
  A: "~@15 f4", B: "f#4@2 d5@2 g4@2 f4@2 f#4@2 d5@2 ~@4 f#4 ~ d5@2 g4 ~ f4@2 f#4@2 d5@2 ~@4",
  C: "e4@2 c5@2 f4@2 d#4@2 e4@2 c5@2 ~@4 e4 ~ c5@2 f4 ~ d#4@2 e4@2 c5@2 ~@4",
  D: "b3@4 a3 ~ a#3 ~ b3@4 a3 ~ a#3 ~ b3@2 a3 ~ b3 ~ a3@2 b3 ~ d4@6",
  E: "b3@3 ~ a3@2 a#3@2 b3@4 a3@2 a#3@2 b3@2 a3@2 b3@2 a3@2 e4@2 d4@6",
  F: "b3@2 a3 a#3 b3@2 a3 a#3 b3 a3 b3 a3 b3 d4@3", G: "b3@2 a3 a#3 b3@2 a3 b3 ~@8", H: "[~@8 b4@31 ~@9]/3",
  I: "[~@16 g3@3 ~ f3 ~ f#3 ~ g3@3 f3 ~ f#3@2 g3@2 f3 ~ g3@2 f3 ~ g3 a#3@5 ~ c4@3 ~ a#3 ~ [b3,c4] ~ c4@3 a#3 ~ b3 ~ c4@2 a#3@2 c4@2 a#3 ~ d4@3 a#3@7 ~ g3@2 ~ g3@3 ~@3 g3@5 g3@2]/3", // Cmaj7
  J: "[~@2 a#3@3 ~ a#3@3 ~ g3@3 g3@2 ~@2 g3@3 f3 ~ g3@3 ~ f3 g3 ~ f3 ~ c4@3 a#3@3 ~ g3@3 f3 ~ f#3 ~ g3@3 f3 ~ f#3 ~@2 f3 ~ g3@2 f3 ~ g3 a#3@4, ~@26 g3 ~@5]/2",
  K: "~ c4@3 ~ a#3 ~ [b3,c4] c4@3 ~ a#3 ~ b3 c4@2 a#3 ~@2 a#3 ~ d4@3 ~ a#3@6, ~@19 c4@2 ~@11", // Cmaj7
  L: "[g3@2 ~@2 g3@3 ~@2 g3@4 ~ g3@3 ~ a#3@2 ~ a#3@3 g3@3 ~ g3@2 ~ g3@3 ~ f3 ~ g3@3 f3 ~ g3 f3 ~ c4@3 ~ a#3@3 g3@3 f3 ~ f#3 ~ g3@3 f3 ~]/2",
  M: "f#3 ~@2 f3 ~ g3@2 f3 ~ g3 a#3@4 ~@2 c4@3 a#3 ~ [b3,c4] c4@3 ~ a#3 ~ b3 c4@2 a#3, ~ g3 ~@14", // Cmaj7
  N: "~@2 a#3 ~ d4@3 ~ a#3@6 g3@2 ~@2 g3@3 ~@2 g3@4 ~ g3@3 ~, ~ c4@2 ~@29",
  O: "[a#3@2 ~ a#3@3 ~ g3@3 g3@2 ~ g3@3 ~ f3 ~ g3@3 f3 ~ g3 f3 ~ c4@3 ~ a#3@3 g3@3 f3 ~ f#3 ~ g3@3 f3 ~ f#3 ~@2 f3 ~ g3@2 f3 ~ g3 a#3@4 ~@2 c4@2, ~@24 g3 ~@7]/2",
  P: "~ a#3 ~ [b3,c4] c4@3 ~ a#3 ~ b3 c4@2 a#3 ~@2 a#3 ~ d4@3 ~ a#3@6 g3@2 ~@2, ~@15 c4@2 ~@15", // Cmaj7
  Q: "g3@3 ~@2 g3@4 ~ g3@3 ~ a#3@2 ~ a#3@3 ~ g3@3 g3@2 ~ g3@3 ~ f3",
  R: "~ g3@3 f3 ~ g3 f3 ~ c4@3 ~ a#3@3 g3@3 f3 ~ f#3 ~ g3@3 f3 ~ f#3 ~ g3@2",
  S: "f3 g3@2 f3 ~ g3 a#3@4 ~@2 c4@3 a#3 ~ [b3,c4] c4@3 ~ a#3 ~ b3 c4@2 a#3 ~@2 a#3 ~, ~@29 c4@2 ~", // Cmaj7
  T: "[d4@3 ~ a#3@7 g3@2 ~ g3@3 ~@2 g3@4 ~ g3@3 ~ a#3@2 ~ a#3@3 ~ g3@3 g3@2 ~ g3@3 ~ f3 ~ g3@3 f3 ~ g3 f3 ~ c4@3 ~ a#3@3 g3@2]/2",
  U: "~@2 f3 f#3 ~ g3@3 f3 ~ f#3 ~ g3@2 f3 g3@2 f3 ~ g3 a#3@4 ~@2 c4@3 a#3 ~ [b3,c4]", // Cmaj7
  V: "c4@3 ~ a#3 ~ b3 c4@2 a#3 ~ c4@2 a#3 d4@3 ~ a#3@7 g3@2 ~ g3@3 ~",
  W: "~ g3@4 ~ g3@3 ~ a#3@2 ~ a#3@3 ~ g3@3 g3@2 ~ g3@3 ~ f3 ~ g3@3",
  X: "f3 ~ g3 ~ f3 c4@3 ~ a#3@3 g3@3 ~ f3 f#3 ~ g3@3 f3 ~ f#3 ~ g3@2 f3 g3@2 f3",
  Y: "~ g3 a#3@4 ~@2 c4@3 a#3 ~ [b3,c4] ~ c4@3 a#3 ~ b3 c4@2 a#3 ~ c4@2 a#3 d4@3 ~", // Cmaj7
  Z: "[a#3@7 g3@2 ~ g3@3 ~@2 g3@4 ~ g3@3 ~ a#3@2 ~ a#3@3 ~ g3@3 g3@2 ~@2 g3@3 f3 ~ g3@3 f3 ~ g3 ~ f3 c4@3 ~ a#3@3 g3@3 ~ f3 f#3]/2",
  AA: "~ g3@3 f3 ~ f#3 ~ g3@2 f3 g3@2 f3 ~ g3 ~ a#3@4 ~ c4@3 a#3 ~ [b3,c4] ~ c4@3", // Cmaj7
  AB: "a#3 ~ b3 c4@2 a#3 ~ c4@2 a#3 d4@3 ~ a#3@7 g3@2 ~ g3@3 ~@2 g3@3",
  AC: "~@2 g3@3 ~ a#3@2 ~ a#3@3 ~ g3@11 ~ c4@5 a#3@2",
  AD: "[g3 ~ c4@5 a#3 g3 ~@2 c4@3 a#3@2 g3 ~ a#3 ~ c4 ~ c4@3 ~@2 a#3@23 ~@14]/2",
})).s("gm_overdriven_guitar").gain(0.23)

// other · synth strings 1 · "SynString"
const synth_strings_1 = note(`<
  ~@16 A B C A@2 B D E A B C A@2 B D E ~@36 F G H I J G K L@2 ~@29 M@3 N@4 O@7 ~@38
>`.pickRestart({
  A: "g5@31 ~", B: "c5@31 ~", C: "f5 a5", D: "f5 e5", E: "d5@31 ~", F: "~@16 g4@3 ~ g4 ~ g4@3 ~@3 g4 ~ f4 ~",
  G: "g4 ~@3 g4@2 ~@2 a#4 ~ g4@4 ~@2 g4@3 ~ g4 ~ g4@3 ~ f4 ~ g4@2 f4 ~",
  H: "g4@3 ~ g4@3 ~ a#4 ~ g4@4 ~@2 d5@7 ~ c5@2 ~@2 a#4 ~@3", I: "c5@7 ~ d5@3 ~ a#4@3 ~ e4 ~@3 g4@12",
  J: "~@4 g4@9 ~@3 g4@3 ~ g4 ~ g4@3 ~@3 g4 ~ f4 ~", K: "g4@3 ~ g4@3 ~ a#4 ~ g4@4 ~@6 d5@3 ~ c5@3 ~ a#4@2 ~@2",
  L: "[c5@7 ~ c5@6 ~@2 c5@22 ~@2 d5@2 ~@2 a#4@3 ~ e4@3 ~ g4@8 ~@4]/2", M: "[~@16 g5@31 ~ c5@31 ~ f5@16]/3",
  N: "[a5@16 g5@31 ~ g5@31 ~ c5@31 ~ f5@16]/4", O: "[e5@16 [g4,d5,g5]@96 [g4,d5,g5]@95 ~@17]/7",
})).s("gm_synth_strings_1").gain(0.36)

// other · synth strings 1 · "SynString" · soft notes
const synth_strings_1_soft = note("<~@68 A B ~@2 A B ~@2 C ~@81>".pickRestart({
  A: "~@26 f4 ~@5", B: "~@2 f4 ~@29", C: "~@12 b4 ~@19",
})).s("gm_synth_strings_1").gain(0.24)

// chords · electric guitar clean · "CleanGtr"
const electric_guitar_clean = 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 ~@19 A B C D A B C D ~@9 E@6 F@4 ~@20 E@6 G@8 H@4 I@3
  ~@14 J K@4 L@7 M@5 ~@8
>`.pickRestart({
  A: "~@28 g3@3 ~, g2, [b2,g3]@16 b2 d3 g3@8 d4@6, d3@2 g4@3 [b2,d3]@3, ~ d4@11 d3@2 d4@10 g4@8", // Em Bm
  B: "~@7 g3, [c3,g3]@7 g3@3 e3@6, e3@6 e3@3 d4@3 g4@4, ~ d4@15 c3@16, ~@4 g4@7 g3@2 d4@3", // C5
  C: "~@7 g3, f3@9 g3 e3 g3 g4 d4@3, a3@3 a3@5, ~ c4@11 g4@2 c4@18, ~ d4 c3@2",
  D: "~@12 g4@2 d4 g3, g2@15 ~, d3@4 g4@7 g3@4 ~, ~ g3@11 d3@2 g3@6 [b2,d3]@10 ~@2, ~ d4@7 d3 d4@5 ~@2", // Bm
  E: "[~@44 g3@3 ~@29 g3@4 ~@28 g3@4 ~@24 g4@4 d4@2 g3@2 ~@28 g3@3 ~@15 g3@2, ~@8 g2@16 e3@6 e3@3 d4@3 g4@4 f3@9 g3 e3 g3 g4 d4@3 g2@15 ~ g2@16 e3@6 e3@2, ~@16 [b2,g3]@16 b2 d3 g3@8 d4@6 ~ d4@15 c3@16 a3@12 a3@20 d3@8 g4@14 g3@8 ~@2 d3@8 g4@12 [b2,d3]@12 [c3,g3]@16, ~@16 d3@8 g4@12 [b2,d3]@12 [c3,g3]@14 g3@6 e3@13 ~@7 d4@8 c3@17 ~ d4@14 d3@2 d4@10 ~@5 d4@11 d3@2 d4@10 g4@8 ~@8 g4@8, ~@17 d4@11 d3@2 d4@10 g4@8 ~@8 g4@14 g3@4 d4@7 c4@11 g4@2 c4@19 g3@11 d3@2 g3@6 [b2,d3]@10 ~@2 [b2,g3]@16 b2 d3 g3@8 d4@6 ~ d4@15]/6", // Em Bm C5 Bm C5 Bm Em
  F: "[~@6 g3@2 ~@23 f3@32 ~, c3@8 f3@11 g3 g4@5 f2@32 ~@7, ~ d4@3 g4@4 a3@6 a3@7 d4@7 c3@32 ~@4, ~@4 e3@13 ~@7 d4@8 c3@2 g3@2 e3@12 g2@64 ~@16, ~@6 g3@4 d4@7 c4@11 g4@2 c4@14 g3@64 ~@20]/4",
  G: "[~@12 g3@4 ~@28 g3@4 ~@24 g4@4 d4@2 g3@2 ~@28 g3@3 ~@29 g3@4 ~@28 g3@4 ~@24 g4@4 d4@2 g3@2 ~@28 g3@3 ~@15 g3@2, c3@8 f3@9 g3 e3 g3 g4 d4@3 g2@15 ~ g2@16 e3@6 e3@3 d4@3 g4@4 f3@9 g3 e3 g3 g4 d4@3 g2@15 ~ g2@16 e3@6 e3@2, ~ d4@3 g4@4 a3@6 a3@10 d3@4 g4@7 g3@4 ~ d3@4 g4@6 [b2,d3]@6 [c3,g3]@7 g3@3 e3@6 a3@6 a3@10 d3@4 g4@7 g3@4 ~ d3@4 g4@6 [b2,d3]@6 [c3,g3]@8, ~@4 e3@13 ~@7 d4@8 c3@17 ~ d4@14 d3@2 d4@10 ~@5 d4@11 d3@2 d4@10 g4@8 ~@8 g4@14 g3@4 d4@7 c4@11 g4@2 c4@19 g3@11 d3@2 g3@6 [b2,d3]@10 ~@2 [b2,g3]@16 b2 d3 g3@8 d4@6 ~ d4@15, ~@6 g3@4 d4@7 c4@11 g4@2 c4@19 g3@11 d3@2 g3@6 [b2,d3]@10 ~@2 [b2,g3]@16 b2 d3 g3@8 d4@6 ~ d4@15 c3@17 ~@7 d4@8 c3@17 ~ d4@14 d3@2 d4@10 ~@5 d4@11 d3@2 d4@10 g4@8 ~@8 g4@8]/8", // Bm C5 Bm C5 Bm Em Bm Em
  H: "[~@3 g3 ~@7 g3 [d3,g3,d4]@16 ~@4, c3@8 f3@9 g3 e3@32 ~@14, ~ d4@3 g4@4 a3@6 a3@5 g3 g4@32 ~@12, ~@4 e3@13 ~@7 d4@8 c3@64 ~@32, ~@6 g3@4 d4@7 c4@11 g4@2 c4@12 d4@6 ~@80]/4", // G5
  I: "[~ [d3,g3,d4]@4 ~]/3", J: "~@16 g4@3 g4@2 g4@4 ~ g4@2 f4@2 g4@2, ~@25 f4@3 ~@4",
  K: "[~ g4@4 ~ g4@5 ~ g4@3 g4@2 ~@3 f4@2 g4@2 ~ g4@3 ~@42 g4@14 g4@10 g4@3 ~ g4 g4@4 ~ g4@2 f4@2 g4@2 ~ g4@4 ~ g4@5 ~ g4@3 g4@2 g4, f4@20 ~@4 f4@43 e4@61, ~@5 a#4@27 a#4@14 c5@3 a#4@11 d5@64 ~@4, ~@17 g4@5 ~@7 g4@5 g4@29 a#4@40 f4@3 ~@4 f4@18, ~@39 d5@14 c5@62 a#4@13]/4",
  L: "[~@2 f4@2 g4@2 ~ g4@3 ~@25 c5@7 c5@7 ~@27 g4@3 ~ g4 g4@4 ~ g4@2 f4@2 g4@2 ~ g4@4 ~ g4@5 ~ g4@3 g4@2 ~@3 f4@2 g4@2 ~ g4@3 ~@42 g4@14 g4@10 g4@3 ~ g4 g4@4 ~ g4@2 f4@2 g4@2 ~ g4@4 ~@2 g4@5 g4@3 g4@2 ~@3 f4@2, ~@6 f4@63 d5@57 g4@29 a#4@40 f4@3 ~@4 f4@20 ~@2, ~@11 g4@5 g4@57 a#4@12 f4@3 ~@4 f4@5 a#4@24 g4@3 a#4@14 c5@3 a#4@11 d5@64 ~@3 g4@5, ~@14 a#4@14 c5@3 a#4@41 ~ b4@58 d5@14 c5@62 a#4@17, ~@25 d5@24 c5@60 g4@5 ~@2 f4@43 e4@64 ~]/7",
  M: "[g4@2 ~ g4@3 ~@25 c5@7 c5@7 ~@24 [a#4,b4]@64 ~@27, ~@2 f4@63 d5@64 ~@31, ~@7 g4@5 g4@64 ~@84, ~@10 a#4@14 c5@3 a#4@41 ~@92, ~@21 d5@24 c5@64 ~@51]/5", // Bmaj7
})).s("gm_electric_guitar_clean").gain(0.16)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@11 B A@2 C A@3 C D A@2 C A@3 C E F@7 G H I J@7 A K L@2 M N L@2 M O F@7 G H I P@2 Q R P@2 S T J@7 U V W V@3 W V B
  F@3 G H I P@2 Q R P@2 Q R P@2 Q R P@2 G X Y Z X AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW
  AX AY AZ BA BB BC BD BE BF ~@8
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "x!2", C: "x ~@3 x!2 ~@2", D: "x ~@6 x ~ x ~ x ~@2 x ~", E: "x ~@6 x ~ x ~ x ~@4",
  F: "x ~ x ~@4 x!2 ~ x ~@2 x ~@2", G: "x ~ x ~@4 x!2 ~@7", H: "~ x ~@6", I: "~@3 x ~@4 x ~ x ~@4 x",
  J: "x ~ x ~@2 x ~@2 x ~ x ~@4 x", K: "~@11 x ~@4", L: "x ~ x ~@4 x!2 ~ x ~@2 x ~ x", M: "x ~ x ~@4 x!2 ~ x ~@4 x",
  N: "x ~ x ~@10 x ~ x", O: "x ~@10 x ~ x ~@2", P: "x ~ x ~@2 x ~ x!2 ~ x ~@4 x", Q: "x ~ x ~@4 x!2 ~ x ~@5",
  R: "~@5 x ~ x!2 ~ x ~@4 x", S: "x ~ x ~@4 x!3 ~@6", T: "~@5 x ~@2 x ~ x ~@4 x", U: "x ~@6 x!2 ~ x ~@2 x ~ x",
  V: "x ~ x ~@5 x ~ x ~@4 x", W: "x!2 ~@2 x!2 ~@2", X: "~@5 x!2 ~", Y: "x!2 ~ x!2 ~@2 x", Z: "~ x ~ x ~ x ~ x!2 ~@7",
  AA: "x ~ x ~@3 x ~@2 x ~ x ~ x ~ x", AB: "~@2 x ~@13 x ~@7 x!2 ~@5 x", AC: "~ x ~@5 x!2 ~@5 x ~@7 x!2 ~@5 x ~ x",
  AD: "~@5 x!2 ~@5 x ~@6 x ~@7 x ~ x ~@2", AE: "~@2 x ~ x ~@5 x ~@6 x ~@6 x ~@6 x",
  AF: "~ x ~@4 x ~@4 x ~ x ~ x ~@2 x ~ x!2 ~@3 x ~ x!2 ~@3",
  AG: "x!2 ~@5 x!2 ~ x ~@3 x!2 ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~@2",
  AH: "~@2 x ~ x ~@4 x ~ x!2 ~@3 x ~ x!2 ~@3 x!2 ~@5 x!2", AI: "~@5 x!2 ~@4 x ~ x ~ x ~@2 x ~ x ~@6 x ~ x ~@2",
  AJ: "~@2 x!2 ~@5 x!2 ~@5 x ~@5 x ~ x ~@4 x ~ x", AK: "~@4 x ~ x ~@4 x ~@6 x ~@6 x!2 ~@5",
  AL: "x!2 ~@5 x ~@5 x ~@6 x ~@6 x ~ x ~@2", AM: "~@2 x ~@4 x ~ x ~ x ~@2 x ~ x!2 ~@3 x ~ x!2 ~@3 x ~ x ~",
  AN: "~@3 x!2 ~ x ~@3 x!2 ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~@4 x ~",
  AO: "x ~@4 x ~ x ~ x ~@2 x ~ x!2 ~@3 x ~ x!2 ~@4 x ~@4", AP: "~ x ~@4 x ~@7 x ~ x ~@6 x ~ x ~@4 x ~",
  AQ: "x ~@4 x!2 ~@5 x ~@5 x ~ x ~@4 x ~ x ~@4", AR: "x ~ x ~@4 x ~@6 x ~@6 x ~ x ~@4 x!2 ~@2",
  AS: "~@3 x ~@5 x ~@6 x ~@6 x ~ x ~@4 x ~", AT: "~@3 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x!2 ~@3 x ~ x ~@4 x",
  AU: "x ~ x ~@3 x!2 ~ x ~@3 x!2 ~ x ~@2 x ~ x ~@4 x ~ x ~@3",
  AV: "~ x ~ x ~ x ~@2 x ~ x!2 ~@3 x ~ x!2 ~@4 x ~@5 x ~@2", AW: "~@2 x ~@7 x ~ x ~@6 x ~ x ~@4 x ~ x ~@3",
  AX: "~ x!2 ~ x ~@3 x!2 ~@5 x!2 ~@4 x ~ x ~@4 x ~ x ~", AY: "~@3 x ~@6 x ~ x ~@4 x ~ x!2 ~@3 x!2 ~@5 x",
  AZ: "x ~@5 x!2 ~@4 x ~ x ~ x ~@2 x ~@6 x ~@5", BA: "~ x ~ x ~@4 x ~ x ~@4 x ~ x ~@4 x ~@6 x!2 ~",
  BB: "~@3 x ~ x ~@4 x ~@6 x ~@8 x ~@4 x", BC: "~@8 x ~@4 x ~@14 x ~@2 x",
// … 119 more lines

More by Guns N' Roses