Strudelify

Dust N' Bones

Guns N' Roses

KeyG majorTempo96 bpm
0:00/0:00
// Dust N' Bones — Guns N' Roses
// 96 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 78, 4/4 at bar 78) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/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 · "Guitar 1"
const distortion_guitar = note(`<
  A@3 ~ B@3 C D E F G H@2 D E F G I@2 J I@2 J I@2 J K@2 L M@2 N O@2 P E Q R S@2 T E Q R S@2 T U@2 T U@2 T V@3 W@2 X Y@3
  Z@3 AA AB AC AA AB AC AA AB AC AA AB AD@6 AE@4 AF@2 AG@7 AH@2 AI AJ@9 AK@3 AL AM AN AO AP AQ@3
>`.pickRestart({
  A: "[~ d6@3]/3", B: "[~@5 [f5,a5]@3 e3@3 [b4,e5]@8 d5@4 g5@3 e5@3 d5@2 e5@3 b4!4 a4@2 g4 a4@2 b4 d5 a4 b4 a4]/3",
  C: "a4 g4 a4 g4 e4 g4 e4 d4 b3@2 ~ a4@5", D: "~ g4@3 a4@2 g4@3 g4@3 e4@4", E: "e3@2 ~ a4@6 g4@3 a4@2 g4@2",
  F: "~ d4@3 e4@4 g4@2 a4@6", G: "~ a4 g4 e4 g4@6 d4@3 d4@3",
  H: "[e3@3 [b4,e5]@3 d5@2 e5@3 a4 e5@3 d5@2 e5@3 b4 a4@3 e3@2 ~ a4@5]/2", // E5
  I: "[e3@3 [b4,e5]@3 d5@2 e5@3 a4 e5@3 d5@2 e5@3 b4 a4@3 [d4,a4,d5]@6 [d4,a4,d5,e5]@2]/2", // E5 D5 Dsus2
  J: "~ [d4,a4,d5,f#5]@3 [d4,a4,d5,g5]@3 [d4,a4,d5,f#5]@3 [d4,a4,d5,e5]@3 [d4,a4,d5]@3", // D Dsus4 D Dsus2 D5
  K: "[[c4,g4,c5]@12 [c4,g4,c5]@12 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2]/2", // C5 B5
  L: "c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5", // B5
  M: "[b3@3 a3@3 g3@3 f#3@3 b3@3 a3@3 g3@3 f#3@3 e3@8, f#4@3 ~@3 f#4@3 ~@7]/2", N: "~ e5@2 [g5,b5]@13",
  O: "[~@3 [a4,c#5]@11 d#5 c#5@2 a4@3 a4 a4@2 g4 a4@2 [a4,c#5] a4@2 g4 a4@2]/2", // A
  P: "g4 a4@2 g4 a4@3 a4@2 g4 a4@2 g4 e4@2 b3", Q: "~ g4@3 e4@4 e3@2 ~ a4@5", R: "~ g4@3 a4@2 g4@3 d4@3 e4@4",
  S: "[g4@2 a4@7 a4 g4 e4 g4@6 d4@3 d4@3 e3@3 [b4,e5]@3 d5@2]/2", T: "e5@3 a4 e5@3 d5@2 e5@3 b4 a4@3",
  U: "[[d4,a4,d5]@6 [d4,a4,d5,e5]@3 [d4,a4,d5,f#5]@3 [d4,a4,d5,g5]@3 [d4,a4,d5,f#5]@3 [d4,a4,d5,e5]@3 [d4,a4,d5]@3 e3@3 [b4,e5]@3 d5@2]/2", // D5 Dsus2 D Dsus4 D Dsus2 D5 E5
  V: "[[d4,a4,d5]@2 [d4,a4,d5,e5] [d4,a4,d5,f#5] [d4,a4,d5,g5] [d4,a4,d5,f#5] [d4,a4,d5,e5] [d4,a4,d5] [c4,g4,c5]@4 [c4,g4,c5]@4]/3", // D5 Dsus2 D Dsus4 D Dsus2 D5 C5
  W: "[[b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 [b3,f#4,b4]@2 c5 b3@3 a3@3 g3@2, ~@12 f#4@3 ~]/2", // B5
  X: "~ f#3@3 b3@3 a3@3 g3@3 f#3@3, ~@2 f#4@3 ~@3", Y: "[e3,b3,e4]/3", Z: "[e3@3 ~]/3",
  AA: "[b3,f#4]@2 a3 [b3,f#4]@2 a3 [b3,f#4]@2 a3 [b3,f#4]@2 a3 [d4,a4]@2 [d4,a4]@2", // B5 D5
  AB: "~ [a3,e4]@7 [b3,f#4]@2 a3 [b3,f#4]@2 a3 [b3,f#4]@2", AC: "a3 [b3,f#4]@2 a3 [d4,a4]@2 [e4,b4]@3 [a3,e4]@7",
  AD: "[a3 [b3,f#4]@2 a3 [d4,a4]@2 [e4,b4]@3 [a3,e4]@25 e3@2 e3 e4@6 e4 d4 b3 g4@5 e4 d4@2 b3 d4@2 e4 e3@3 e4@6 e4 d4 b3 g4@2 g#4 e4@2 d4 b3@2 d4 a3@2 g3 e3@2 ~ a4@6 g4@3 a4@2]/6", // B5 D5 E5 A5
  AE: "[g4@3 g4@3 e4@4 e3@2 ~ a4@6 g4@3 a4@2 g4@3 d4@3 e4@4 g4@2 a4@7 a4 g4 e4 g4@6 d4@3 d4@3 e3@3 [b4,e5]@3]/4", // E5
  AF: "[d5@2 e5@3 a4 e5@3 d5@2 e5@3 b4 a4@3 e3@2 ~ a4@6 g4@3 a4@2]/2",
  AG: "[g4@3 g4@3 e4@4 e3@2 ~ a4@6 g4@3 a4@2 g4@3 d4@3 e4@4 g4@2 a4@7 a4 g4 e4 g4@6 d4@3 d4@3 g4@2 a4@7 a4 g4 e4 g4@6 d4@3 d4@3 g4@2 a4@7 a4 g4 e4 g4@6 d4@3 d4@3 e3@3 g3@3]/7",
  AH: "[a3@2 f#3 a#3@2 f#3 b3@3 d4@3 e4@2 e3 g4@3 a4@3 a#4@3 b4@3 d5@3 e5@2]/2",
  AI: "~ g5@3 [a5,c#6]@2 [b5,d#6]@4 [g6,a#6] ~ [a5,c6] [a5,c#6]@2 [a5,c#6]", // A B Gm Am A
  AJ: "[[a5,c#6]@2 [a5,c#6]@3 [g5,b5]@7 d5@2 ~ d5@3 ~@2 [a5,c6] [a5,c#6]@2 [a5,c#6] [a5,c#6]@2 [a5,c#6]@3 [g5,b5]@7 d5@2 ~ d5@3 ~@2 [a5,c6] [a5,c#6]@2 [a5,c#6]]/3", // A G Am A G Am A
  AK: "[[a5,c#6]@2 [a5,c#6]@3 [g5,b5]@7 d5@2 ~ d5@3 ~@2 [a5,c6] [a5,c#6]@2 [a5,c#6] [a5,c#6]@2 [a5,c#6]@3 [g5,b5]@7 d5@2 ~ d5@3 [a5,c#6]@2 [a5,c#6] ~ [a5,c#6]!2]/3", // A G Am A G A
  AL: "[g5,b5]@2 [g5,b5] ~ [g5,b5]!2 [a5,c#6]@2 [a5,c#6] ~ [a5,c#6]!2 [g5,b5]@2 [g5,b5] ~", // G A G
  AM: "[g5,b5]!2 [a5,c#6]@2 [a5,c#6] ~ [a5,c#6]!2 [g5,b5]@2 [g5,b5] ~ [g5,b5]!2 [a5,c#6]@2", // G A G A
  AN: "[a5,c#6] ~ [a5,c#6]!2 [g5,b5]@2 [g5,b5] ~ [g5,b5]!2 [a5,c#6]@2 [a5,c#6] ~ [a5,c#6]!2", // A G A
  AO: "[g5,b5]@2 [g5,b5] ~ [g5,b5]!2 [a5,c#6]@2 [a5,c#6] ~ [a5,c#6]!2 [g5,b5]@2 [g5,b5]@2", // G A G
  AP: "[g5,b5]@2 [e5,g#5]@11 [a5,c#6]@3", AQ: "[[a5,c#6]@3 [a5,c#6]@3 [g5,b5]@28 [a4,d5]@3 ~@11]/3",
})).s("gm_distortion_guitar").gain(0.31)

// chords · distortion guitar · "Guitar 2 Rhythm"
const distortion_guitar_2 = note(`<
  A@3 B@2 C D E F G H@2 I@2 F G H@2 J K ~ L M ~ N@2 ~@5 O@2 P@2 Q R S F T@2 U R S F T@2 V ~ W@2 ~ X@2 ~@25 Y Z@3 AA AB
  AC AD AE AF AA AB AC AG@3 AH@8 AI@8 AJ AK@3 AL@4
>`.pickRestart({
  A: "[e3,b3,e4]/3", // E5
  B: "[a3@2 ~ a4@9 g3@2 ~ d4@3 f#3@2 ~ d4@3 [e3,b3,e4]@2 ~ [e3,b3,e4]@2 ~ [e3,b3,e4]@2, ~@2 e4@3 ~@9 b3@3 ~@3 a3@3 ~@9]/2", // E5
  C: "[e3,c4,f#4] [b3,e4]@2 [a3,d4] [e3,b3,e4]@2 ~ [e3,b3,e4]@2 ~ [e3,b3,e4]@2 ~ [e3,a3,d4]@2 [b3,e4]", // F#m7b5 E5 D5 E5 Dsus2 E5
  D: "[e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4] [e3,a3,e4]@2 [b3,e4] ~@2 [e3,b3,e4]@4 ~", // E5 A5 E5
  E: "~@2 e4@6 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4] ~", // E5 Dsus2
  F: "[e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4] [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4]", // E5 Dsus2 E5 Dsus2 E5 Dsus2
  G: "[e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4] [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4]!2", // E5 Dsus2 E5 Dsus2 E5
  H: "[~ [e3,b3,e4] [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] a3@2 ~ a4@9 g3@2 ~ d4@3 f#3@2 ~ d4@3, ~@10 e4@3 ~@9 b3@3 ~@3 a3@3 ~]/2", // E5 Dsus2 E5 Dsus2
  I: "[[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4]@2 [e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,a3]@2 b3 a3@2 b3 a3@2 b3 a3@2 b3 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4] ~]/2", // E5 Dsus2 E5 Dsus2 E5 A5 E5 Dsus2
  J: "[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4]@2 [e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4] ~", // E5 Dsus2 E5 Dsus2 E5
  K: "~ [e3,b3,e4] ~@2 [e3,b3,e4]@3 ~@9", // E5
  L: "[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,b3,e4]@3 [e3,b3,e4]@2", M: "~ e3 a3@2 d4@4 ~@8",
  N: "[[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4]@2 [e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,a3]@2 b3 a3@2 b3 a3@2 b3 c#4@3 ~@8]/2", // E5 Dsus2 E5 Dsus2 E5 A5
  O: "[~ e3@3]/2",
  P: "[[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,b3,e4]@2 [e3,a3,d4] [e3,b3,e4]@2 [e3,a3,d4] [e3,a3]@2 b3 a3@2 b3 a3@2 b3 a3@2 [e3,b3,e4]@9]/2", // E5 Dsus2 E5 Dsus2 A5 E5
  Q: "~ [e3,b3] ~@2 [e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4]!2 ~ [e3,b3,e4]!2 ~ [e3,b3,e4]", // E5
  R: "[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4]!2", // E5 Dsus2 E5 Dsus2 E5
  S: "~ [e3,b3,e4] [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4] [e3,a3,d4] ~", // E5 Dsus2 E5 Dsus2 E5 Dsus2
  T: "[a3@2 ~ a4@9 g3@2 ~ d4@3 f#3@2 ~ d4@3 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4]@2, ~@2 e4@3 ~@9 b3@3 ~@3 a3@3 ~@9]/2", // E5 Dsus2
  U: "[e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,a3]@2 b3 a3@2 b3 a3@2 b3 a3@2 b3", // E5 Dsus2 E5 A5
  V: "[e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,b3,e4]@3 ~", // E5 Dsus2 E5
  W: "[~@8 [e3,b3,e4]@14 c5@3 c5@4 [e4,b4]@3, ~@22 e4 ~@2 e4 ~@6]/2", X: "[~ [e3,b3,e4]@3]/2",
  Y: "~@2 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4]@2 [e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,a3]@2", // E5 Dsus2 E5 Dsus2 E5 A5
  Z: "[b3 a3@2 b3 a3@2 b3 [e3,a3,d4]@2 [e3,b3,e4]@13 [e4,a4]@9 [a3,d4]@2 [b3,e4] [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~]/3", // Dsus2 E5 A5 D5 E5 Dsus2 E5 Dsus2 …
  AA: "[e3,b3,e4]!2 ~ [e3,b3,e4] [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4]", // E5 Dsus2 E5 Dsus2 E5
  AB: "[e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~ [e3,b3,e4]!2 ~ [e3,b3,e4] [e3,a3,d4] ~ [e3,b3,e4]@2", // Dsus2 E5 Dsus2 E5 Dsus2 E5
  AC: "~ [e3,a3,d4] a3@2 ~ a4@9 g3@2, ~@4 e4@3 ~@9", // Dsus2
  AD: "~ d4@3 f#3@2 ~ d4@3 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2, b3@3 ~@3 a3@3 ~@7", // E5
  AE: "[e3,a3,d4]@2 [e3,b3,e4] [e3,a3,d4]@2 [e3,b3,e4] [e3,b3,e4]@3 [e3,b3,e4]@2 [e3,b3,e4] ~@2 [e3,b3,e4]@2", // Dsus2 E5 Dsus2 E5
  AF: "~ [e3,b3,e4]!2 ~@2 [e3,b3,e4] ~@2 [e3,a3,d4] ~ [e3,b3,e4]@3 [e3,a3,d4] [e3,b3,e4] ~", // E5 Dsus2 E5 Dsus2 E5
  AG: "[~ d4@3 f#3@2 ~ d4@3 a3@2 ~ a4@9 g3@2 ~ d4@3 f#3@2 ~ d4@3 a3@2 ~ a4@9 g3@2, b3 ~ a3 ~ e4 ~@3 b3 ~ a3 ~ e4 ~@3]/3",
  AH: "[~ d4@3 f#3@2 ~ d4@3 [e3,b3,e4]@42 ~@2 b4 e6@2 b5@19 ~@2 e3 a3@2 e3@19 ~@2 b4 e6@2 b5@19 e4@3 e3, b3@3 ~@3 a3@3 ~@119]/8", // E5
  AI: "[~ [e3,b3,e4]@4 [b4,e5]@21 e3@48 e3@48 e3@2 e3@2 e3!2]/8", AJ: "e3@2 e3@2 e3!2 e3@2 e3@2 e3!2 e3@2 e3@2",
  AK: "e3!16", AL: "[e3!2 e3@48 e3@6 ~@8]/4",
})).s("gm_distortion_guitar").gain(0.26)

// other · distortion guitar · "Guitar 3 Lead"
const distortion_guitar_3 = note("<~@66 A@3 B@3 C D E F@2 G@3 ~@39>".pickRestart({
  A: "[[e5,g5]@12 g5@3 g5@2 e5@6 f#5 d5@3 b4@9 b4@2 d5 b4@9, ~@12 e5@5 ~@31]/3", // Em
  B: "[e6@3 a6@9 e6@2 ~ e6@9 [e5,a5] ~@2 b5@8 g4 f#5@2 a5 d6@2 a5@7, ~@14 g6@3 ~@7 d6@3 ~@21]/3", // A5
  C: "a5@5 d6 a5@5 d6 [f#5,a5]@2 f#5 e5, ~@6 f#5 ~@9", D: "f#5 e5 e5@2 e5 a5 e5!2 [f#5,b5]!2 a5 b5 a5!3 f#5",
  E: "f5 f#5 e5 f#5 e5@2 d5 [b4,e5]@2 [e5,g#5]@4 d5 e5 b4", // E5 E
  F: "[e5 b4 d5 e5 f5 f#5 f5 e5 f#5 f5 e5 f#5 e5@2 d5 [b4,e5]@2 b4 c#5@4 d5@2 d5 c#5 b4 c#5@2 c#5 b4 a4, ~@18 d5 ~@13]/2", // E5
  G: "[f#4 a4@2 e4 e4@3 e4@2 e4@25 ~@14]/3",
})).s("gm_distortion_guitar").gain(0.41)

stack(distortion_guitar, distortion_guitar_2, distortion_guitar_3)

More by Guns N' Roses