Strudelify

Since I Don't Have You

Guns N' Roses

KeyF♯ majorTempo71 bpm
0:00/0:00
// Since I Don't Have You — Guns N' Roses
// 71 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 16 "Acoustic Bass" acoustic bass (copy of ch 2 "Fingered Bass" electric bass finger); ch 15 "Fl. Key Click" breath noise (copy of ch 4 "Steel String Guitar" acoustic guitar steel); ch 11 "Muted Guitar" electric guitar muted (copy of ch 12 "Distortion Guitar" distortion guitar); ch 14 "Clean Guitar" electric guitar clean (copy of ch 13 "Steel String Guitar" acoustic guitar steel)
// note: Full arrangement: all 64 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(71/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 · rock organ
const rock_organ = note(`<
  ~@15 A B C D E F G H A B C D E F I@2 J K L M N O ~@8 A B C D E F G P Q R Q R Q R Q R Q ~@2
>`.pickRestart({
  A: "c#6@11 ~@7 a#5@2 g#5@2 f#5@2", B: "~@3 g#5 f#5 d5 ~@5 c#5",
  C: "c#6@11 ~@7 g#5 a5 [f#5,g#5] ~ f#5 ~, ~@21 g#5@2 ~", D: "~@3 g#5 f#5 d5 c#5@2 ~@3 c#6",
  E: "f#6@4 f6@2 d#6@2 f6 ~ d#6@2 c#6@5 ~ g#5 ~ [g#5,a5] f#5 g#5@2", F: "f#5 ~@5 g#5@2 f#5@2 e5@2 d5@3 ~@9",
  G: "g#5@10 a#5@2 g#5@7 ~ g#5@2 a#5@2", H: "c#6@2 g#5@2 a#5@7 b5 g#5@10 c#5@2, ~@12 a#5 ~@11",
  I: "[g#5@5 a#5 g#5@5 a#5@2 f#5@5 ~@6]/2", J: "~@4 g#5@3 ~ g#5 ~ g#5@2 f#6@2 f6 [f6,f#6] d#6@8",
  K: "~@5 c#6@3 a#5@2 b5@2 c#6@2 b5@2 a#5@6 ~@2", L: "~@6 f#6@2 d#6@2 f6@2 f#6@2 f6@2 d#6@7 ~",
  M: "~@4 c#6@4 a#5@2 b5@2 c#6@2 b5@2 a#5@5 ~@3", N: "~@4 g#5@3 ~ g#5@2 a#5@2 g#5@7 ~ g#5@2 a#5@2",
  O: "c#6@2 g#5@2 a#5@7 [a#5,b5] g#5@9 ~@3", P: "c#6@2 g#5@2 a#5@7 b5 g#5@10 ~@2, ~@12 a#5 ~@11",
  Q: "~@4 f#5@2 d#5@3 ~@7 f#5@2 d#5@3 ~@3", R: "~@2 f#5 d#5@2 f#5 a#5@2 g#5 a#5@2 g#5",
})).s("gm_rock_organ").gain(0.22)

// bass · electric bass finger · "Fingered Bass"
const bass = note(`<
  ~@9 A B C D E F G H I H J K L M N O J P Q R S T U V U V U F N O J P Q R S W N O J P Q R S X Y Z Y Z Y Z Y Z AA AB@2
>`.pickRestart({
  A: "f#1@5 f1 d#1@6", B: "g#1@6 b1 ~@2 b1 ~ g#1", C: "f#1@9 ~ f1@2 d#1@10 g#1@2", D: "f#1@5 a#1 b1@5 a#1",
  E: "g#1@9 ~ g#1@2 g#2@2 g#1 ~ g#1@2 g#1 ~ g#1 ~ g#1@2", F: "c#2@3 ~ c#2@2 b1@3 ~ b1@2 a#1@3 ~ a#1@2 g#1@3 ~ g#1@2",
  G: "f#1@3 ~@2 f#1!2 ~@4 a#1", H: "b1@9 ~ b1@2 c#2@2 ~@4 c#2@2 ~@4", I: "f#1@9 ~ f#1@2 f#1@2 ~@6 g#1@2 a#1@2",
  J: "f#1@6 ~@4 f#1 ~ f#1@2 ~@6 g#1@2 a#1@2", K: "b1@6 ~@4 b1 ~ b1@2 ~@6 b1@2 a#1@2",
  L: "g#1@3 ~ g#1@2 g#1@3 ~ g#1 ~ g#1@3 ~ g#1 ~ g#1@3 ~ g#1@2",
  M: "c#2@3 ~ c#2@2 b1@3 ~ b1@2 a#1@3 ~ a#1@2 g#1@2 c#1@2 d#1@2", N: "f#1@3 ~@2 f#1 f#1@4 g#1 a#1",
  O: "b1@9 ~ b1@2 c#2@5 ~ c#2@6", P: "b1@9 ~ b1@2 c#2@2 c#2@2 c#2@2 c#2 ~ c#2@2 g#1@2",
  Q: "f#1@3 ~@2 f#1!2 ~@3 g#1 a#1", R: "b1@9 ~ b1 ~ b1@5 ~ b1@4 a#1@2",
  S: "g#1@3 ~ g#1 ~ g#1@4 g#1@2 g#1@2 g#1@2 g#1@2 g#1 ~ g#1@2 g#1@2",
  T: "f#1@3 ~ f#1 ~ f#1@3 ~ f#1 ~ f#1 ~ f#1 ~ f#1@2 f#1 ~ f#1 ~ f#1@2",
  U: "g#1@3 ~ g#1 ~ g#1@3 ~ g#1 ~ g#1@3 ~ g#1 ~ g#1@3 ~ g#1@2",
  V: "f#1@3 ~ f#1 ~ f#1@3 ~ f#1 ~ f#1@3 ~ f#1 ~ f#1@3 ~ f#1@2",
  W: "c#2@2 c#2 ~ c#2@2 b1@2 b1 ~ b1@2 a#1 ~ a#1 ~ a#1@2 g#1 ~ g#1 ~ g#1@2",
  X: "c#2 ~ c#2 ~ c#2@2 c#2@2 c#2 ~ c#2@2 c#2@2 c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2@2",
  Y: "f#1@3 ~ f#1 ~ f#1@3 ~ f#1@2 d#1@3 ~ d#1 ~ d#1@2 f1@2 f#1@2",
  Z: "g#1@3 ~ g#1 ~ g#1@3 ~ g#1@2 c#2@3 ~ c#2 ~ c#2@3 ~ c#2@2",
  AA: "f#1@3 ~ f#1 ~ f#1@3 ~ f#1@2 d#1@3 ~ d#1 ~ d#1@2 d#1@2 f1@2", AB: "f#1/2",
})).s("gm_electric_bass_finger").gain(0.22)

// chords · piano · "Piano 2"
const piano = note(`<
  ~@9 A B A C D E F G F G F H I J F G F G F H I K I K I K I J F G F G F H I J F G F G F H I J L M L M L M L M L N@2
>`.pickRestart({
  A: "[f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~", // F# D#m
  B: "[f#5,a#5,d#6] ~ [f#5,a#5,d#6] ~ [f#5,a#5,d#6] ~ [f#5,a#5,d#6] ~ [f#5,a#5,d#6] ~ [f#5,a#5,d#6] ~ [f#5,b5,d6] ~ [f#5,b5,d6] ~ [f#5,b5,d6] ~ [f#5,b5,d6] ~ [f#5,b5,d6] ~ [f#5,b5,d6] ~", // D#m Bm
  C: "[f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,a#5,c#6] ~ [f#5,b5,d#6] ~ [f#5,b5,d#6] ~ [f#5,b5,d#6] ~ [f#5,b5,d#6] ~ [f#5,b5,d#6] ~ [f#5,b5,d#6] ~", // F# B
  D: "[g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~ [g#5,b5,d#6] ~", // G#m
  E: "[g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~ [g#5,c#6,f6] ~", // C#
  F: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~", // F#
  G: "[b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~", // Bm C#
  H: "[b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~", // Bm
  I: "[d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~ [d#5,g#5,b5] ~", // G#m
  J: "[f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~", // C#
  K: "[c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~", // F#
  L: "[c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~ [d#5,f#5,a#5] ~", // F# D#m
  M: "[d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~ [f5,g#5,c#6] ~", // B C#
  N: "[f#4,c#5,a#5]/2", // F#
})).s("gm_piano").gain(0.08)

// other · acoustic guitar steel · "Steel String Guitar"
const acoustic_guitar_steel = note(`<
  ~@9 A B C D E F G H G H G I E F G H G H G I E J K G K G K F G H G H G I E F G H G H G I E F A L A L A L A L A ~@2
>`.pickRestart({
  A: "f#3 a#3 c#4 f#4 c#4 a#3 f#3 a#3 d#4 f#4 d#4 a#3", B: "g#3 b3 d#4 f#4 d#4 b3 d4 f#4 b3 d4 f#3 b3",
  C: "f#3 a#3 c#4 f#4 c#4 a#3 f#3 a#3 d#4 f#4 d#4 g#3", D: "f#3 a#3 c#4 f#4 c#4 a#3 b3 d#4 f#3 b3 d#4 f#3",
  E: "g#3 b3 d#4 f#4 d#4 b3 g#3 b3 d#4 f#4 d#4 b3", F: "f4 c#4 g#3@2 c#4 f4 ~ c#4 g#3@2 c#4 f4",
  G: "f#3 a#3 c#4 f#4 c#4 a#3 f#3 a#3 c#4 f#4 c#4 a#3", H: "b3 d4 f#3 b3 d4 f#4 f4 c#4 g#3 c#4 f4 c#4",
  I: "f#3 b3 d4 f#3 b3 d4 f#4 b3 d4 f#4 d4 b3", J: "f#4 c#4 a#3 f#3 a#3 c#4 f#4 f#3 a#3 c#4 f#4 c#4",
  K: "g#3 b3 d#4 f#4 d#4 b3 g#3 b3 d#4 g#3 b3 d#4", L: "g#3 b3 d#4 f#4 d#4 b3 f4 c#4 g#3 c#4 f4 c#4",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0.8)

// other · acoustic guitar steel · "New Track"
const acoustic_guitar_steel_2 = note(`<
  ~@9 A B C D E F G H G H G I E F G H G H G I E J K G K G K F G H G H G I E F G H G H G I E F A L A L A L A L A ~@2
>`.pickRestart({
  A: "f#2 a#2 c#3 f#3 c#3 a#2 f#2 a#2 d#3 f#3 d#3 a#2", B: "g#2 b2 d#3 f#3 d#3 b2 d3 f#3 b2 d3 f#2 b2",
  C: "f#2 a#2 c#3 f#3 c#3 a#2 f#2 a#2 d#3 f#3 d#3 g#2", D: "f#2 a#2 c#3 f#3 c#3 a#2 b2 d#3 f#2 b2 d#3 f#2",
  E: "g#2 b2 d#3 f#3 d#3 b2 g#2 b2 d#3 f#3 d#3 b2", F: "f3 c#3 g#2@2 c#3 f3 ~ c#3 g#2@2 c#3 f3",
  G: "f#2 a#2 c#3 f#3 c#3 a#2 f#2 a#2 c#3 f#3 c#3 a#2", H: "b2 d3 f#2 b2 d3 f#3 f3 c#3 g#2 c#3 f3 c#3",
  I: "f#2 b2 d3 f#2 b2 d3 f#3 b2 d3 f#3 d3 b2", J: "f#3 c#3 a#2 f#2 a#2 c#3 f#3 f#2 a#2 c#3 f#3 c#3",
  K: "g#2 b2 d#3 f#3 d#3 b2 g#2 b2 d#3 g#2 b2 d#3", L: "g#2 b2 d#3 f#3 d#3 b2 f3 c#3 g#2 c#3 f3 c#3",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0.2)

// other · overdriven guitar · "Overdrive Guitar"
const overdriven_guitar = note("<A B C B D E F G H I ~@27 B C B D E F G H I ~@18>".pickRestart({
  A: "~@11 c#4", B: "b4@8 g#4@3 f#4", C: "g#4@10 [e4,f#4] d4 c#4@8 ~@2 c#4@2", D: "g#4@10 [e4,f#4] d4 c#4@8 ~@2 c#5@2",
  E: "f#5@3 f5@2 d#5 c#5@3 g#4@2 f#4", F: "a4@10 g#4 f#4 d4@9 ~@3", G: "d#4@9 ~ d#4@12 f4@2",
  H: "g#4@2 f4 ~ f4 ~ f4@4 d#4@2 f4@6 d#4@2 c#4@2 a#3@2", I: "c#4@11 ~",
})).s("gm_overdriven_guitar").gain(0.29)

// chords · electric guitar clean · "Clean Guitar"
const electric_guitar_clean = note(`<
  ~@9 A B A C D E F G F G F H D E F G F G F H D F D F D F D E F G F G F H D E F G F G F H D E A I A B A B A B A ~@2
>`.pickRestart({
  A: "~@6 [f#4,a#4,c#5] ~@11 [f#4,a#4,d#5] ~@5", B: "~@6 [f#4,b4,d#5] ~@11 [f#4,b4,d5] ~@5",
  C: "~@6 [f#4,a#4,c#5] ~@11 [f#4,b4,d#5] ~@5", D: "~@6 [g#4,b4,d#5] ~@11 [g#4,b4,d#5] ~@5",
  E: "~@6 [g#4,c#5,f5] ~@11 [g#4,c#5,f5] ~@5", F: "~@6 [f#4,a#4,c#5] ~@11 [f#4,a#4,c#5] ~@5",
  G: "~@6 [f#4,b4,d5] ~@11 [f4,g#4,c#5] ~@5", H: "~@6 [f#4,b4,d5] ~@11 [f#4,b4,d5] ~@5",
  I: "~@6 [f#4,b4,d#5] ~@11 [g#4,c#5,f5] ~@5", // B C#
})).s("gm_electric_guitar_clean").gain(0.14)

// other · distortion guitar
const distortion_guitar = note("<~@14 A B ~@6 A B ~@12 A B ~@6 A B ~@6 C D E D E D E D E D F@2>".pickRestart({
  A: "c#3 b2 a#2 g#2", B: "f#2 ~@3",
  C: "~@4 c#3 ~ [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3] ~ [c#3,g#3]@2 [c#3,g#3]@2 [c#3,g#3]@2", // C#5
  D: "f#2@5 f#3 d#3@6", E: "g#2@5 b2 d#3@2 c#3 d#3@2 c#3", F: "f#2/2",
})).s("gm_distortion_guitar").gain(0.15)

// other · distortion guitar · soft notes · C#5
const distortion_guitar_soft = note("<~@52 [[c#3,g#3] ~ [c#3,g#3] ~ g#3 ~@19] ~@11>")
  .s("gm_distortion_guitar").gain(0.08)

// other · acoustic guitar steel · "Steel String Guitar"
const acoustic_guitar_steel_3 = note(`<
  ~@9 A B C D E F G H I H J K L M N O J P Q R S T U V U V U F N O J P Q R S W N O J P Q R S X Y Z Y Z Y Z Y Z AA AB@2
>`.pickRestart({
  A: "f#2@5 f2 d#2@6", B: "g#2@6 b2 ~@2 b2 ~ g#2", C: "f#2@9 ~ f2@2 d#2@10 g#2@2", D: "f#2@5 a#2 b2@5 a#2",
  E: "g#2@9 ~ g#2@2 g#3@2 g#2 ~ g#2@2 g#2 ~ g#2 ~ g#2@2", F: "c#3@3 ~ c#3@2 b2@3 ~ b2@2 a#2@3 ~ a#2@2 g#2@3 ~ g#2@2",
  G: "f#2@3 ~@2 f#2!2 ~@4 a#2", H: "b2@9 ~ b2@2 c#3@2 ~@4 c#3@2 ~@4", I: "f#2@9 ~ f#2@2 f#2@2 ~@6 g#2@2 a#2@2",
  J: "f#2@6 ~@4 f#2 ~ f#2@2 ~@6 g#2@2 a#2@2", K: "b2@6 ~@4 b2 ~ b2@2 ~@6 b2@2 a#2@2",
  L: "g#2@3 ~ g#2@2 g#2@3 ~ g#2 ~ g#2@3 ~ g#2 ~ g#2@3 ~ g#2@2",
  M: "c#3@3 ~ c#3@2 b2@3 ~ b2@2 a#2@3 ~ a#2@2 g#2@2 c#2@2 d#2@2", N: "f#2@3 ~@2 f#2 f#2@4 g#2 a#2",
  O: "b2@9 ~ b2@2 c#3@5 ~ c#3@6", P: "b2@9 ~ b2@2 c#3@2 c#3@2 c#3@2 c#3 ~ c#3@2 g#2@2",
  Q: "f#2@3 ~@2 f#2!2 ~@3 g#2 a#2", R: "b2@9 ~ b2 ~ b2@5 ~ b2@4 a#2@2",
  S: "g#2@3 ~ g#2 ~ g#2@4 g#2@2 g#2@2 g#2@2 g#2@2 g#2 ~ g#2@2 g#2@2",
  T: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2 ~ f#2 ~ f#2@2 f#2 ~ f#2 ~ f#2@2",
  U: "g#2@3 ~ g#2 ~ g#2@3 ~ g#2 ~ g#2@3 ~ g#2 ~ g#2@3 ~ g#2@2",
  V: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2@2",
  W: "c#3@2 c#3 ~ c#3@2 b2@2 b2 ~ b2@2 a#2 ~ a#2 ~ a#2@2 g#2 ~ g#2 ~ g#2@2",
  X: "c#3 ~ c#3 ~ c#3@2 c#3@2 c#3 ~ c#3@2 c#3@2 c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3@2",
  Y: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2@2 d#2@3 ~ d#2 ~ d#2@2 f2@2 f#2@2",
  Z: "g#2@3 ~ g#2 ~ g#2@3 ~ g#2@2 c#3@3 ~ c#3 ~ c#3@3 ~ c#3@2",
  AA: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2@2 d#2@3 ~ d#2 ~ d#2@2 d#2@2 f2@2", AB: "f#2/2",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A B A@3 C A D A D A D E D A D A D A D E D E C E@3 F E G E C E H E I A D A D A D E J E K E L E K E L E M ~
>`.pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~@4 x ~@5 x", C: "x ~ x ~@2 x!2 ~ x ~@3", D: "x ~@4 x!2 ~@5",
  E: "x ~ x ~@2 x!2 ~ x ~@2 x", F: "x!2 ~@2", G: "x ~ x ~@2 x!2 ~@3 x ~", H: "x ~@4 x!2 ~ x ~@3", I: "x ~@4 x ~@6",
  J: "x ~@4 x!7", K: "x ~ x ~@2 x ~ x!2 ~ x!2", L: "x ~ x ~@2 x ~ x!2 ~@3", M: "x",
})).gain(0.45)

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

// drums · hihat
const hihat = s("hh").struct("<~@9 A@7 B A B A@4 C B A B A@13 B A@5 B A B A@13 ~@2>".pickRestart({
  A: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~@3",
  C: "x ~ x ~@3 x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@13 A ~@7 A ~@5 A ~@5 A ~ A ~@5 B ~@13>".pickRestart({
  A: "~@11 x", B: "~@22 x!2",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@13 B ~@7 B ~ B ~@3 C ~@5 B ~ D ~@3 B ~ E ~@13>".pickRestart({
  A: "~@12 x ~@5 x ~ x!2 ~@2", B: "~@5 x", C: "~@6 x ~@2 x!2 ~", D: "~@3 x ~ x", E: "~@20 x!2 ~@2",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A ~ A ~@4 B A ~ A ~@13 A ~@5 A ~ A ~@15>".pickRestart({
  A: "~@11 x", B: "~ x ~@4",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@22 [~@3 x] ~@7 [~@3 x] ~@13 [~@3 x] ~@19>").gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~ A ~@2 A@2 ~@5 A ~ A ~@5 A ~ A@5 B A C ~@2 A ~ A@3 ~@3 A ~ A@3 ~ A ~ B ~ A ~ D A ~
>`.pickRestart({
  A: "x", B: "x!2 ~@2", C: "~@11 x", D: "x!2",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~ x ~ x]!53 ~@2>").gain(0.45)

// drums · shaker
const shaker = s("sh").struct("<~@9 [~@17 x ~@6]!53 ~@2>").gain(0.2)
// … 6 more lines

More by Guns N' Roses