Strudelify

Estranged

Guns N' Roses

KeyC majorTempo89 bpm
0:00/0:00
// Estranged — Guns N' Roses
// 89 bpm, 4/4, key C 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, 6/4 at bar 74, 4/4 at bar 76, 6/4 at bar 138, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 208 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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 · "Gtr. I | Guns n' Roses"
const distortion_guitar = note(`<
  ~ A@8 B@2 C@2 B@2 D@2 E F G@2 H F B@2 I J K L M N O P Q P R ~@6 S T U V W V U X J K L M L Y@6 ~@6 Z@4 AA@2 F AB E AC
  AD AE AF AC B@2 AG@2 ~@68 AH@7 AI@7 ~@9 AJ@8 AK@3 ~@7 AL@7 AM@6 ~
>`.pickRestart({
  A: "[~@3 g4@7 c4@6]/4", B: "[[g3,d4,g4]@90 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~]/2",
  C: "[[c4,g4,c5]@90 [c4,g4,c5]@2 ~ [c4,g4,c5]@2 ~]/2", // C5
  D: "[[c4,g4,c5]@66 [c4,g4,c5]@6 [c4,g4,c5]@6 [c4,g4,c5]@6 [c4,g4,c5]@6 [c4,g4,c5]@2 ~ [c4,g4,c5]@2 ~]/2", // C5
  E: "[a#3,f4,a#4]@7 [a#3,f4,a#4]", F: "[c4,g4,c5]@42 [c4,g4,c5]@2 ~ [c4,g4,c5]@2 ~",
  G: "[[g3,d4,g4]@78 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@6 [g3,d4,g4]@6]/2", H: "[a#3,f4,a#4]", I: "[d#4,a#4,d#5]",
  J: "[f4,c5,f5]", K: "g3@8 d4@6 d#4 d4", L: "c4@8 d#4!2 ~ d#4 ~ d#4 f4@2", M: "g4@8 d4@6 d#4 d4",
  N: "c4@8 d#4!2 ~ d#4 ~ d#4 f3@2", O: "g3", P: "d#4@3 d#4 f4@3 f4", Q: "g4@7 g4", R: "g4", S: "~@14 [g3,d4,g4]!2",
  T: "[f3,c4,f4]@7 [f3,c4,f4]", U: "[g3,d4,g4]@42 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~", V: "[f3,c4,f4]",
  W: "[g3,d4,g4]@21 [g3,d4,g4]@2 ~", X: "[d#4,a#4,d#5]@7 [d4,a4,d5]", Y: "[g4@5 g6@19]/6",
  Z: "[~@36 g4@84 c4@66 [g3,d4]@2 ~ [g3,d4]@2 ~]/4", AA: "[[g3,d4,g4]@12 [g3,d4,g4]!4]/2",
  AB: "[c4,g4,c5]@12 [c4,g4,c5]@12 [c4,g4,c5]@6 [c4,g4,c5]@6 [c4,g4,c5]@6 [c4,g4,c5]@2 ~ [c4,g4,c5]@2 ~", // C5
  AC: "[c4,g4,c5]", AD: "[g3,d4,g4]@18 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@18 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~",
  AE: "[g3,d4,g4]@12 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@6 [g3,d4,g4]@6 [g3,d4,g4]@6", // G5
  AF: "[a#3,f4,a#4]@27 [a#3,f4,a#4]@2 ~ [a#3,f4,a#4]@6 [a#3,f4,a#4]@6 [a#3,f4,a#4]@4 ~@2", AG: "[c4,g4,c5]/2",
  AH: "[~@43 [a3,e4,a4]@24 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [g3,d4,g4]@9 [a3,e4,a4]@24 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [g3,d4,g4]@9 [a3,e4,a4]@24 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [g3,d4,g4]@9 [a3,e4,a4]@5]/7", // A5 G5 F5 G5 A5 G5 F5 G5 …
  AI: "[~@19 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 e3@9 [d4,a4,d5]@30 [d4,a4,d5]@2 ~ [d4,a4,d5]@2 ~ [d4,a4,d5]@3 [c4,g4,c5]@9 [a#3,f4,a#4]@36 [a#3,f4,a#4]@3 a3@9 [g3,d4,g4]@48 [c4,g4,c5]@96 ~@5]/7", // G5 F5 D5 C5 A#5 G5 C5
  AJ: "[~@19 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [f3,c4,f4]@3 [f3,c4,f4]@6 [c4,g4,c5]@18 [c4,g4,c5]@2 ~ [c4,g4,c5]@6 [c4,g4,c5]@2 ~ [c4,g4,c5]@12 [c4,g4,c5]@2 ~ [c4,g4,c5]@2 ~ [g3,d4,g4]@18 [g3,d4,g4]@2 ~ [g3,d4,g4]@6 [g3,d4,g4]@2 ~ [g3,d4,g4]@12 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [f3,c4,f4]@18 [f3,c4,f4]@2 ~ [f3,c4,f4]@6 [f3,c4,f4]@2 ~ [f3,c4,f4]@12 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [c4,g4,c5]@18 [c4,g4,c5]@2 ~ [c4,g4,c5]@2 ~ [g3,d4,g4]@18 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [c4,g4,c5]@18 [c4,g4,c5]@2 ~ [c4,g4,c5]@6 [c4,g4,c5]@2 ~ [c4,g4,c5]@12 [c4,g4,c5]@6 [g3,d4,g4]@18 [g3,d4,g4]@2 ~ [g3,d4,g4]@6 [g3,d4,g4]@2 ~ [g3,d4,g4]@12 [g3,d4,g4]@6 [f3,c4,f4]@18 [f3,c4,f4]@2 ~ [f3,c4,f4]@6 [f3,c4,f4]@2 ~ [f3,c4,f4]@12 [f3,c4,f4]@6 [f3,c4,f4]@5]/8", // F5 C5 G5 F5 C5 G5 C5 G5 …
  AK: "[~ [f3,c4,f4]@6 [f3,c4,f4]@6 [f3,c4,f4]@6 [f3,c4,f4]@6 [f3,c4,f4]@6 [f3,c4,f4]@6 [f3,c4,f4]@6 [c4,g4,c5]@96 ~@5]/3", // F5 C5
  AL: "[~@19 [c4,g4,c5]@12 [b3,g4]@12 [a3,e4,a4]@24 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [g3,d4,g4]@9 [a3,e4,a4]@24 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [g3,d4,g4]@9 [a3,e4,a4]@24 [g3,d4,g4]@24 [f3,c4,f4]@30 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~ [f3,c4,f4]@3 [g3,d4,g4]@9 [a3,e4,a4]@5]/7", // C5 Em A5 G5 F5 G5 A5 G5 …
  AM: "[~@19 [g3,d4,g4]@24 [f3,c4,f4]@36 [f3,c4,f4]@3 e3@9 [d4,a4,d5]@48 [c4,g4,c5]@18 a3@12 g3@6 e3@12 [f3,c4,f4]@96 ~@5]/6", // G5 F5 D5 C5 F5
})).s("gm_distortion_guitar").gain(0.26)

// other · distortion guitar · "Gtr. II"
const distortion_guitar_2 = note(`<
  ~@8 A B C D E F G H I J@3 K L@4 M@2 N O P O P E Q R S@5 T U V W X ~@5 Y N O P O P E Q R Z@5 AA@2 AB@3 ~ AC AD G H AE
  AF@4 AG@4 AH@2 ~@50 AI AJ AK AL AM@2 AN AO AP AQ@3 ~@22 AR@5 AS@2 AT@6 AU AV AW@3 ~@21
>`.pickRestart({
  A: "~@25 a#5@16 ~ g5@6, ~@12 g5 ~@11", B: "g5@6 a#5@6 ~ f6@10 ~ d6@24, ~@6 d6 ~@17", C: "g5 a#5 f6@3 d6 c6@2",
  D: "c6@10 c6@3 f6 c6@2", E: "c6", F: "g5@2 a#5@2 d6 f6@3 d6@8", G: "g5@2 a#5@2 f6 g6 f6@4 d6@2 c6 d6@3",
  H: "c6@10 c6 d6@2 f6 c6 d6", I: "c6@8 c6 d6 c6 a#5 c6 a#5 g5@2",
  J: "[a#5@8 c6 d6@3 f6@2 d6 c6@9 c6@4 b5 c6 b5@4 c6@2 b5@2 c6@2 b5@2 c6@2 b5@2 c6@2]/3",
  K: "b5@2 c6@2 [b5,b6]@4 c6 b5 ~@2 c6 d6 c6 b5", L: "[a#5@8 c6 d6@3 f6@2 d6 c6@9 c6@4 c6@2 a5 a#5@31 a5@2]/4",
  M: "a#5/2", N: "g4 d5 g5 d6@5", O: "c5@2 g5@2 c6@2 d6@8 c6 b5", P: "c6 b5 g5@2 d5@2 d6@10", Q: "d6 c6 d6@12 c6@2",
  R: "a#5@13 a5 a#5 a5", S: "[g5@19 d7@53 g6@6 a6@2]/5", T: "a#6", U: "c6@8 a#5@2 a5@4 a#5 a5", V: "g5@3 g5",
  W: "g5 f5@3", X: "g5 f6@3", Y: "~@3 g6", Z: "[f5@2 c6@16 g6 a6]/5", AA: "[a#6@7 c7@4 a#6 a6 a#6@2 a6]/2",
  AB: "[g6@3 ~]/3", AC: "~@5 a#5@2 g5", AD: "g5@2 a#5@2 d6 f6 d6@10",
  AE: "c6@24 c6 d6@7 ~ f6@3 c6 d6 ~ c6@3 a#5@3 g5@3",
  AF: "[a#5@8 c6 d6@3 f6@2 c6@10 c6@4 b5 c6 b5@8 [a5,a6] b5@17 a5@2 c6 b5 ~@2 b5@2, ~@39 b6@9 ~@16]/4", // A
  AG: "[a#5@8 c6 d6@3 f6@2 c6@10 c6 d6@3 f6@2 g6@26 ~@6 f6 e6]/4", AH: "c6/2", AI: "c5@10 g4 a4 c5 d5 c5 a4",
  AJ: "c5 d5@3 c5@2 c5@4 g4 a4 c5 d5 c5 a4, e5@3 ~@5", AK: "g5@6 d5@3 e5@9 d5@12 c5@3 d5 ~ c5 b4@3 c5@3 b4@3 a4@3",
  AL: "g4 a4 f4 g4 d4 f4@3 g4 f4 g4 a4 c5 d5 f5@2",
  AM: "[f5@3 g5@3 a#5@3 g5@3 a#5@3 g5@3 a5@3 c6@3 c6@3 c6@3 a#5 ~ c6@4 c6@3 a#5 ~ c6 c6@3 a#5 ~ c6@31 g5@3 a5@3 c6@3 d6@3 c6@3 a5@3]/2",
  AN: "d6@4 c6@2 c6@4 g5 a5 c6 d6 c6 a5", AO: "d6 e6@3 g6@2 c6@4 c6@2 d6@2 g6 f6",
  AP: "~@3 f6@3 e6@3 ~@3 f6@3 e6@3 f6 ~ e6 d6@3 e6@3 d6@3 e6@3 e6@3 d6@4 c6@4 a5@4",
  AQ: "[d6@3 e6@30 ~ d6@2 e6@2 f6@2 g6@2 ~ f6@3 g6@39 f6@6 e6@48 ~@5]/3",
  AR: "[~@13 d6@18 c6@6 ~@6 d6@24 c6@12 d6@24 c6@36 a5@12 g5@18 a5@12 g5@18 a5@12 g5@24 ~@5]/5",
  AS: "[~@19 d6@24 c6@48 d6 d#6 ~ d6@2]/2",
  AT: "[~ c6@3 a5@3 d6 d#6 ~ d6@3 a5@3 d6 d#6@4 ~ d6@3 c6@3 a5@3 c6@3 d6@3 c6@3 a5@3 f6@3 g6@6 a#6@3 g6@18 g6@3 a#6@3 g6@3 f6@3 d#6@3 c6@3 f6@3 g6@6 a#6@3 g6@18 g6@3 a#6@3 g6@3 f6@3 d#6@3 c6@3 d6@3 e6@6 d6@3 c6@18 a#5@6 g5@6 f5@3 d#5@3 c5@12 f5@3 g5@9 g4@12 a#4@3 c5@3 d#5@18 f5 g5@4 ~ a#5@3 f5 g5 ~ d#5@12 f5@3 f#5@3 f5@3 d#5@3 f5@3 g5@2]/6",
  AU: "~ a#5@3 c6@3 c6@3 g5@3 a#5@3 c6@3 d6@3 d#6 d6 ~ c6@3 d6@3 d#6@3 f6@3 g6@3 f6@3 a#6@3 f6@2",
  AV: "~ g6@3 a#6 g6 ~ f6@3 g6@3 f6 g6@4 ~ g6@3 f6@3 d#6@3 c6@3 d#6@6 c6@3 a#5@3 c6@3 c6@2",
  AW: "[~ a#5@3 g5@3 a#5@3 g5@3 f5@3 d#5@3 f5@3 d#5@3 c5@3 a#4@3 f5 g5 ~ f5@3 d#5@3 f5 g5@97 ~@6]/3",
})).s("gm_distortion_guitar").gain(0.26)

// chords · distortion guitar · "Gtr. III"
const distortion_guitar_3 = note(`<
  ~@97 A B C D E D F D G C H I J K L ~ F ~@3 F M N C O N C O B P B C O B C O B P B Q R S T J C O T U V@8 W ~@14 X@2 Y Z
  AA AB AC ~@9 AD@2 AE@7 AF@2 ~@9 AG@4
>`.pickRestart({
  A: "[f3,c4,f4,a4,c5,f5]@10 f3 c4 f4 a4@3", B: "[c4,e4,g4,c5,e5]@10 c4 e4 g4 c5@3",
  C: "[g3,b3,d4,g4,d5]@10 g3 b3 d4 g4@3", D: "[a#3,f4,a#4,d5]", E: "[c4,e4,g4,c5]", F: "[c4,e4,g4,c5,e5]",
  G: "[f3,c4,f4,a4,c5]@10 f3 c4 f4 a4@3", H: "[a#3,f4,a#4,d5]@10 a#3 f4 a#4 d5@3",
  I: "[f3,c4,f4,a4,c5]@10 c4 f4 a4 c5 g4@2", J: "[c4,e4,g4,c5]@10 c4 e4 g4 c5@3",
  K: "[g3,b3,d4,g4,d5]@10 g3 b3 d4 g4@2 g4", L: "[f3,c4,f4,a4,c5]", M: "[c4,e4,g4,d5]@3 c5@2 g4@3",
  N: "[c4,e4,g4,c5,e5]@10 c4 e4 g4@4", O: "[f3,c4,f4,a4,c5]@10 c4 f4 a4 c5@3", P: "[g3,b3,d4,g4,d5] [f3,c4,f4,a4,c5]",
  Q: "[a3,e4,a4,c5,e5]@10 a3 e4 a4 c5@3", R: "[g3,b3,d4,g4,d5,g5]", S: "[f3,c4,f4,a4,c5]@2 c5 a4 f4 c5 a4@2",
  T: "f3@2 f3@2 f4@2 f3 f3@2 f3 f3@2 f4@2 f3@2", U: "[c4,e4,g4,b4,e5]@7 ~",
  V: "[~@43 [c4,e4,g4,c5,e5]@30 c4@3 e4@3 g4@3 c5@9 [g3,b3,d4,g4,d5]@30 g3@3 b3@3 d4@3 g4@9 [f3,c4,f4,a4,c5]@30 c4@3 f4@3 a4@3 c5@9 [c4,e4,g4,c5,e5]@30 c4@3 e4@3 g4@12 [g3,b3,d4,g4,d5]@30 g3@3 b3@3 d4@3 g4@9 [f3,c4,f4,a4,c5]@30 c4@3 f4@3 a4@3 c5@9 [c4,e4,g4,c5,e5]@30 c4@3 e4@3 g4@3 c5@9 [g3,b3,d4,g4,d5]@5]/8", // C G F C G F C G
  W: "~@19 [f3,c4,f4,a4,c5]@24 ~@5", X: "[~@43 [c4,e4,g4,c5,e5]@48 ~@5]/2", Y: "~@13 d5@6 ~@12 d5@6 ~@6 d5@5",
  Z: "~ e5@6 ~@6 e5@6 ~@12 e5@6 e5@6 e5@5", AA: "~ f5@6 ~@6 d5@6 ~@12 d5@6 ~@6 d5@5",
  AB: "~ e5@6 ~@6 e5@6 ~@12 e5@6 ~@6 g5@5", AC: "~@13 f5@6 ~@12 f5@6 ~@6 f5@5", AD: "[~@43 [c4,e4,g4,c5,e5]@53]/2",
  AE: "[~@19 e5@6 c5@6 g4@6 e4@6 [c4,e4,g4,c5,e5]@30 c4@3 e4@3 g4@3 c5@9 [g3,b3,d4,g4,d5]@30 g3@3 b3@3 d4@3 g4@9 [f3,c4,f4,a4,c5]@30 c4@3 f4@3 a4@3 c5@9 [c4,e4,g4,c5,e5]@30 c4@3 e4@3 g4@12 [g3,b3,d4,g4,d5]@30 g3@3 b3@3 d4@3 g4@9 [f3,c4,f4,a4,c5]@30 c4@3 f4@3 a4@3 c5@9 [c4,e4,g4,c5,e5]@5]/7", // C G F C G F C
  AF: "[~@13 a3@12 g3@6 e3@12 [c4,e4,g4,c5,e5]@24 ~@29]/2", // C
  AG: "[~@43 [f3,c4,f4,a4,c5,f5]@96 [c4,e4,g4,c5,e5]@48 ~@5]/4", // F C
})).s("gm_distortion_guitar").gain(0.26)

// chords · distortion guitar · "Gtr. III" · soft notes
const distortion_guitar_soft = note("<~@89 A B C D C E F ~@16 G ~@3 G ~@91>".pickRestart({
  A: "c4@2 g4@2 c5@10 c4 d4", B: "d#4@2 f4 g4 a#4@2 d#5@6 d#5 d5 c5 a#4", C: "d5@2 g4@2 c5@10 c4 d4",
  D: "d#4@2 f4 g4 a#4@2 d#5@4 d#5 d5 d#5 d5 c5 a#4", E: "d#4 f4 g4 a#4 d#5 d5 c5 a#4", F: "d5 ~@3",
  G: "f3@2 f3@2 f4@2 f3 f3@2 f3 f3@2 f4@2 f3@2",
})).s("gm_distortion_guitar").gain(0.15)

// other · distortion guitar · "Gtr. IV"
const distortion_guitar_4 = note("<~@187 A@7 ~@14>".pickRestart({
  A: "[~@25 c5@3 e5@3 g5@3 c6@9 [g4,d5,g5,b5]@30 g4@3 d5@3 g5@3 b5@9 [f4,c5,f5,a5]@30 f4@3 c5@3 f5@3 a5@9 [c5,e5,g5]@36 d6@3 e6@9 d6@30 c5@3 g5@3 c6@3 d6@9 a5@36 c6@3 d6@9 c6@12 ~@41]/7", // G F C
})).s("gm_distortion_guitar").gain(0.26)

// other · distortion guitar · "Gtr. IV" · soft notes
const distortion_guitar_soft_2 = note("<~@89 [~@8 a#5 c6 a#5@6] [~@8 c6 d6 c6@6] ~@2 [g5 a5 g5@2 e5@4 ~@8] ~@114>")
  .s("gm_distortion_guitar").gain(0.15)

// other · piano
const piano = note(`<
  ~@85
  [c6 d6 d6@2 d6@4 ~@8]
  [d6 e6 d6 c6 a5@4 ~@8]
  [a5 b5 a5 g5 e5 ~@2 d5 g5 e5 ~ d5 g5 e5 ~ d5]
  [g5 e5 d5 b4 a4 ~@11]
  ~@119
>`).s("gm_piano").gain(0.05)

stack(
  distortion_guitar, distortion_guitar_2, distortion_guitar_3, distortion_guitar_soft, distortion_guitar_4,
  distortion_guitar_soft_2, piano
)

More by Guns N' Roses