Strudelify
Still Got the Blues cover art

1990 · Still Got the Blues

Still Got the Blues

Gary Moore

KeyA minorTempo80 bpm
0:00/0:00
// Still Got the Blues — Gary Moore
// 80 bpm, 6/8, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 6/8 at bar 1) are rendered on a constant 6/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 168 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): DISTORTION.
setcpm(80/3)

// 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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A@3 B@2 C D E@4 B@2 F@2 E@4 G@3 H I@7 J E@4 B@2 F@2 E@4 G@3 H I@7 K L@2 M@2 N@2 O@3 J P@4 B@2 Q@2 E@4 G@3 H I@7 R
  S@2 T@4 U@6 B@2 Q@2 P@4 B@2 C V@5 B@2 Q@2 P@4 B@2 C V@5 B@2 Q@2 P@4 B@2 C V@5 B@2 Q@2 P@4 W@8 ~@2
>`.pickRestart({
  A: "[~ g1@3 c2@3 f1@2]/3", B: "[f2@4 e2@4 b1@23 ~ e2@15 ~]/2", C: "b1 g#1 a1@4", D: "e2@4 c2@4 a1@11 ~ a1@4",
  E: "[c2@4 e2@4 d2@24 g2@23 ~ c2@24 f2@14 ~@2]/4", F: "[b1@4 g#1@3 ~ a1@11 ~ b1@12 c2@10 ~@2 a1@4]/2",
  G: "[f2@4 e2@4 b1@23 ~ b1@22 ~@2 e1@2 ~@2 e1@2 ~@2 e1@2 ~@2 e1@2 ~@2]/3",
  H: "e1@2 ~@2 e1@3 ~ e1@2 ~@2 e1@2 ~@2 e1@3 ~ e1@3 ~",
  I: "[e1@3 ~ g1@4 a1@23 ~ e1@20 g1@4 a1@23 ~ d2@23 ~ f1@24 e1@23 ~ a1@16]/7", J: "e2@4 c2@4 a1@3 ~@9 a1@3 ~",
  K: "~@4 a1@7 ~", L: "[a1@4 a#1@4 b1@24 e2@15 ~]/2", M: "[b1@4 g1@4 a1@12 b1@11 ~ c2@13 ~@3]/2",
  N: "[a1 a#1 b1@6 e2@4]/2", O: "[~@4 e2@4 f2@11 ~ e2@12 d2@23 ~ a1@16]/3", P: "[c2 e2 d2@6 g1@6 c2@6 f1@4]/4",
  Q: "[b1@4 g#1@3 ~ a1@11 ~ b1@12 c2@12 a1@4]/2", R: "~@6 e1 ~ e1 ~ e1@2", S: "[b1@4 g1@3 ~ a1@23 ~ e1@16]/2",
  T: "[~@4 g1@4 a1@23 ~ d2@23 ~ f1@40]/4", U: "[~@8 e1@47 ~ d2@23 ~ g1@24 c2@24 f1@16]/6",
  V: "[e2@4 c2@4 a1@11 ~ a1@3 c2@4 e2@3 ~@2 d2@24 g1@24 c2@24 f1@16]/5", W: "[f2@4 e2@4 b1@23 ~ e2@48 ~ a1@110 ~]/8",
})).s("gm_electric_bass_finger").gain(0.54)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B C D E@2 F@2 ~@26 G@2 H@2 I@4 ~@2 J@2 K L@2 ~@6 M ~@10 N O P Q R S T@2 U@2 V W X@3 Y Z ~@6 AA AB ~@4 AC@2 ~ N O P
  AD R AE AF@2 AG@2 AH AI R AJ AK AL AM@4 AN AO AP@2 AQ AR AS AT@4 AU@4 AV AW AX AY@2 AZ BA@4 BB BC@2 BD@2 BE@2 R S BF@2
  BG@2 BH@2 BI@5 BJ@5
>`.pickRestart({
  A: "~@2 a4 ~ d5 ~ e5 ~ f5@15 ~", B: "~ f5@5 ~ e5 ~ d5@15", C: "~@4 c5 ~ d5 ~ e5@15 ~", D: "e5@7 ~ c5@16",
  E: "[~@3 a4 ~ b4 c5 ~ d5@14 ~ d5@8 ~@2 b4@15]/2", F: "[a4@4 g4@3 ~ a4@29 ~@11]/2", G: "[e4@4 g4 ~@3 g4@30 ~@10]/2",
  H: "[~@4 a4 ~ g4 ~ d4@30 ~@10]/2", I: "[~@4 e4 ~ d4 ~ a3@30 ~@9 a4@7 ~ e4@2 d4 c4 ~ a3@22 ~@14]/4",
  J: "[a4@4 c5@2 ~ d5@31 ~@10]/2", K: "~@4 d5 ~ c5 a4@6 ~@11", L: "[~@7 e5@25 ~@16]/2",
  M: "~@3 d#4@3 d4@2 ~ a3 ~ a3@10 ~@3, ~@4 c4 ~@7", N: "~ a4 d5 e5 f5@8", O: "f5@5 ~ e5@2 d5@16", P: "~ g4 c5 d5 e5@8",
  Q: "e5@6 ~ d5 c5@16", R: "~@2 a4@2 b4@2 c5@2 d5@15 ~", S: "d5@8 b4@15 ~", T: "[a4@4 g4@3 ~ a4@12 b4@12 c5@16]/2",
  U: "[~@2 a4 ~ d5@2 e5@2 f5@20 g5@4 e5@4 d5@12]/2", V: "~@2 g4 c5@2 d5@2 ~ e5@16", W: "~@2 f5@2 e5 ~ d5@2 c5@16",
  X: "[~@2 a4@2 b4@2 c5@2 d5@11 ~ d5@8 c5@2 a4@2 d5@3 ~ d5@15 d5 c5 a4 e4 ~ d6@8 c6@6 a5@2]/3",
  Y: "~ e5@2 d5@2 e5@2 ~@3 d5@2 e5 ~ d5 ~ e5 d5 ~ a5 ~ e5 d5 ~, g5 ~@3 g5 ~@5 g5 ~, ~@9 e5@2 ~@2 c5@2 ~@9",
  Z: "g5 e5 d5 e5 ~@2 d5@2 e5@8 ~@8, ~@5 c5@2 ~@17", AA: "~@4 a2@4 ~@4 e3@2 ~@2 e3@2 ~@2 e3@3 ~",
  AB: "e3@3 ~ e3@3 ~ a3@11 ~@5", AC: "[~@7 d#4@24 ~@17]/2", AD: "e5@6 d5 ~ c5@16", AE: "d5@8 ~ b4@15",
  AF: "[a4@4 b4@4 c5@11 ~ d5@11 ~ e5@16]/2", AG: "[~@2 a4 ~ d5@2 e5@2 f5@21 ~ e5 ~ d5@16]/2",
  AH: "~@2 g4 ~ c5@2 d5@2 e5@14 f5@2", AI: "~ e5@3 d5@4 c5@16", AJ: "~ d5@8 b4@15", AK: "a4@4 g4@4 a4@11 ~ a4@3 ~",
  AL: "a4 ~ a4 ~ a4@3 ~ a4 ~ a4 a4@3 ~ a4 ~@2 a4 ~ a4@2 ~@2",
  AM: "[a4 ~ c5@2 d5@2 e5@2 f5@20 f5@3 ~ f5@19 ~ g5@4 e5@4 ~ e5@14 c5 d5@2 a4@2 c5@3 ~ d5@4 ~@8]/4",
  AN: "a4 ~ c5 ~ d5 ~ e5 ~ f5@4 d5@2 e5@2 c5@2 g4@2 a4@2 c5@2", AO: "d5@7 ~ b4@8 a4@4 g#4@4",
  AP: "[a4@3 ~ b4@3 ~ e4@11 ~ d4@11 ~ c4@8 ~@4 a2@4]/2", AQ: "c3@2 e3 ~ e3@2 d3@6",
  AR: "f3@4 a3@3 ~ g3@3 a3@2 c4@2 ~ a3@2 c4@3 d4@2 f4", AS: "~ d4 f4 ~ a4 ~@2 a4 ~ b4@6 ~ a4@4 g4@4, ~@3 c5 ~@8",
  AT: "[a4@3 ~ c5@4 e5@11 g5@2 e5@9 c5 e5@4 ~ d5@16 d5@3 ~ d5!2 ~@2 e5@2 d5@2 f5@2 d5@2 e5@2 ~ c5@2 [c5,d5] b4 ~ g#4 b4 a4 g#4 a4@3 ~ e4@4 d4@4 c4@4, ~@59 d5@2 ~@9 d5@2 ~@3 a4@2 ~@19]/4", // Csus2
  AU: "[b3@4 a3@3 ~ a4@3 ~ a5@8 ~ a5@2 g5@2 ~ d5@2 e5@2 ~@2 d5 a4 c5 ~ d5 f5 ~@2 c6@2 d6@9 ~ d6@3 ~ d6@5 d6@14 ~ c6@3 ~ b5@7 ~ a5@4 g5@3 ~, ~@25 e5@2 ~@3 d5@2 ~@7 a5@2 ~@55, ~@31 c5@2 ~@63]/4",
  AV: "e5 g5 ~ d5 ~ e5 d5 ~ c5 d5 c5 ~ d5 ~ g5@2 a5@8, ~@2 e5@2 ~@9 e5@2 ~@9",
  AW: "a5 ~ a5 ~ a5 ~ a5 ~ d6@8 c6@3 ~ a5 ~ g5 e5", AX: "~ c5 ~ d5@2 a4 d5 c5 d5 ~ d5 ~ d5 ~@2 c5@3 ~@6, ~@7 d5 ~@4",
  AY: "[e5@3 d5 e5 ~ g5 e5 d#5 ~ e5 g5 e5 ~ d#5 e5 ~ g5 e5 d#5 e5 ~@3 d#5@2 e5 ~ e5@3 a4@3 ~@2 e6@12, ~@22 g5@2 ~@3 g5@2 ~@19, ~@23 e5@2 ~@23]/2",
  AZ: "~ e6@6 ~ e6@8 ~ e6@7",
  BA: "[~@2 e6@7 e6@3 ~ e6@3 ~ d6@11 c6@4 b5@2 g5 ~@2 e5 ~ g5@2 d5 ~ a4@2 g4@2 c4@2 ~ d4@2 e4@2 a3@2 d4@3 ~@2 d4@7 c4@10 ~@2 d6@9 ~ d6@6, ~@18 a5 ~@29]/4",
  BB: "~@3 d6@6 ~ d6@4 ~ d6@9", BC: "[~@2 d6@6 d6@7 ~ c6@2 a5@2 c6@2 ~ c6@3 a5@6 ~@5 e6@11]/2",
  BD: "[~@2 a4@2 d5@2 e5@2 f5@19 ~ f5@2 e5@2 d5@16]/2", BE: "[~@3 g4@2 c5 d5 ~ e5@12 e5@9 ~@3 c5@16]/2",
  BF: "[a4@3 ~ g4@4 a4@8 e4@3 ~ b4@8 d5@4 c5@16]/2", BG: "[~@2 a4 ~ d5@2 e5@2 f5@20 ~ e5@3 d5@16]/2",
  BH: "[~@2 g4@2 c5 ~ d5@2 e5@8 g5@3 ~ e5@11 ~ c5@2 ~ d5 c5@12]/2",
  BI: "[~@2 a4 ~ b4 ~ c5 ~ d5@23 ~ b4@12 g#4@12 e4@20 ~@4 a4@24 c5@2 a4 c5 a4 ~ e4 ~@2 d4@2 ~ c4 d4 a3 c4, ~@109 g4@2 ~ [e4,g4]@2 ~@6]/5", // Em
  BJ: "[d4 ~ e4@2 a4@2 ~ e4 ~ c4@2 d4 a3 ~ d4@2 c4@2 a3@2 g3@3 e3@3 d3@4 c3@4 b2@6 ~ a2@79, ~@3 g4 ~@56]/5",
})).s("gm_overdriven_guitar").gain(0.68).pan(0.4)

// other · guitar harmonics · "GTHARMONIC"
const guitar_harmonics = note("<~@122 [~ e4 ~@4] ~@31 [~ c4@5 ~@18] ~@5 [~@11 e3@12 ~] ~@7>")
  .s("gm_guitar_harmonics").gain(0.5).pan(0.2)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@8 A@8 B@8 C@2 D E@5 F@7 G@5 H@4 C@2 D I@5 J@4 K@3 L@3 ~@16 M@2 D N@4 O D P@2 Q@6 ~@38 R@5 S@6 T@8 U@5 V@5 ~@2
>`.pickRestart({
  A: "[~@8 [a3,c4,d4,f4]@48 [g3,b3]@23 ~ a3@23 ~ [a3,d4,f4]@24 [g#3,b3,e4]@22 ~@2 [a3,c4,e4]@12 [b3,d4]@12 [a3,c4,e4]@16, ~@56 e4@47 ~@89, ~@79 c4@23 ~@90]/8", // Dm7 G Dm E Am Bm Am
  B: "[~@8 [a3,c4,d4,f4]@48 [g3,b3]@24 [a3,c4]@23 ~ [a3,d4]@23 ~ [a3,d4]@23 ~ [g#3,b3,e4]@31 ~@9, ~@56 e4@47 ~ f4@48 ~@40]/8", // Dm7 G Am D5 E
  C: "[e4 g4 a4 c5 a4@12 g4@8]/2", D: "e4@2 g4@2 a4@2 c5@2 a4@15 ~",
  E: "[b4@4 c5@4 e5@20 ~@4 d#4@24 [g#3,d4]@24 [a3,c4,e4]@27 ~@13, ~@31 g4@49 ~@40]/5", // G#dim Am
  F: "[~@8 [a3,c4,d4,f4]@48 [g3,b3]@23 ~ a3@23 ~ [a3,d4,f4]@24 [g#3,b3,e4]@22 ~@2 [a3,c4,e4]@12 [b3,d4]@4, ~@56 e4@47 ~@65, ~@79 c4@23 ~@66]/7", // Dm7 G Dm E Am Bm
  G: "[~@20 a4@3 c5@4 ~ e5@4 f5@39 g5@4 d5@4 ~ e5@40, ~@4 [a3,c4,e4]@11 ~@45]/5", // Am
  H: "[f5@3 c5@4 ~ d5@47 a4@24 b4@14 ~@3, ~@55 e4@38 ~@3]/4",
  I: "[b4@4 c5@4 e5@20 ~@4 d#4@24 [g#3,d4]@24 [a3,c4,e4]@27 ~ a4@4 b4@4 c5@4, ~@31 g4@49 ~@40]/5", // G#dim Am
  J: "[d5@4 e5@4 d5@22 ~@2 d5@24 c5@12 b4@12 a4@11 ~ c5@4]/4", K: "[d5@4 e5@4 d5@22 ~@2 d5@23 ~ a5@8 c6@4 b5@4]/3",
  L: "[g5@3 ~ e5@4 c5@23 a4@27 ~@14]/3", M: "[~ a4@3 g4@2]/2",
  N: "[b4 c5 e5@5 ~ d#4@6 [g#3,d4]@6 [a3,c4,e4]@3 a4, ~@31 g4@49 ~@16]/4", // G#dim Am
  O: "b4@4 c5@3 ~@5 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2", P: "[b4@4 c5@4 b4@14 ~ e4@2 ~@2 a4@2 c5@2 ~ a4@16, ~@13 g4 ~@10]/2",
  Q: "[b4@3 c5@4 ~@13 a4@10 ~@2 [a3,d#4,g4]@46 ~@2 [g#3,d4,g4]@45 ~@19, ~@7 g#4@13 ~@124, ~@4 [a3,c4]@11 ~@57]/6", // Am7b5 G Am
  R: "[~@20 a4@3 c5@4 e5@4 [c5,f5]@24 ~ [d5,f5]@15 g5@4 d5@4 ~ e5@40]/5", // F5 Dm
  S: "[a4@3 c5@3 ~ d5@24 ~ d5@24 c5@12 d5@11 ~ e5@12 a4@3 c5@4 e5@4 f5@40 g5]/6",
  T: "[~@4 d5@4 e5@48 d5@23 b4@24 ~ a4@12 b4@7 d5@4 c5@12 a4@4 c5@4 ~ e5@4 f5@39 g5]/8",
  U: "[~@3 d5@4 ~ e5@48 d5@24 g#4@40, ~@16 b4@3 ~@5]/5", V: "[~@9 [e4,a4,c5]@107 ~@4]/5",
})).s("gm_string_ensemble_1").gain(0.45).pan(0.4)

// other · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note(`<
  A B@2 C D E F G H ~@15 I J K L M ~@2 N O P Q C D E R S T B@2 C D U V ~ I J K L M ~@3 W X Y Z AA AB AC ~@2 N AD P Q C D
  E R S T B@2 C D U AE@2 AF J K L M ~@3 I J K AG AH ~ AI@2 A P Q C D E R S T B@2 C D E F AJ AK P Q C D E R S T B@2 C D E
  F AJ AK P Q C D E R S T B@2 C D E F AJ AK P Q C D E R S T B@2 C D AL ~@8
>`.pickRestart({
  A: "~@2 a3 c4 d4 f4", B: "[d4@4 c4@4 a3@4 c4@4 d4@4 f4@3 d4@4 ~ c4@4 g3@4 b3@4 c4@4 e4@4]/2",
  C: "c4@4 b3@3 ~ f3@4 a3@4 c4@4 e4@4", D: "c4@4 a3@3 ~ f3@4 a3@4 d4@4 f4@4", E: "d4 a3 e3 g#3 b3 e4",
  F: "b3@2 g#3@2 a3@3 ~ a3@2 c4@2", G: "a3@2 c4@2 a3@3 ~@3 a2@2", H: "c3 e3 ~@4",
  I: "~@8 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3", // Am
  J: "[c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [b3,e4,g4]@2 ~@2 [b3,e4,g4]@2 ~@2 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3", // Am Em
  K: "[b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [c4,e4,a4]@2 ~@2 [c4,e4,a4]@2 ~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3", // Em Am
  L: "[c4,e4,a4]@2 ~@2 [c4,e4,a4]@2 ~@2 [e4,f4,a4]@2 ~@2 [e4,f4,a4] ~@3 [e4,f4,a4]@2 ~@2 [e4,f4,a4] ~@3", // Am Fmaj7
  M: "[e4,f4,a4] ~@3 [e4,f4,a4] ~@3 [c4,d#4,g4]@14 ~@2", N: "~@5 a2", O: "c3@4 e3@3 ~ [d3,a3]@4 c4@4 d4@4 f4@4",
  P: "d4 c4 a3 c4 d4 f4", Q: "d4 c4 g3 b3 c4 e4", R: "b3 g#3 a3 e4 a3 b3", S: "d4@4 a3@3 ~ a3@4 c4@4 a3@3 ~ a3@4",
  T: "c4@4 e4@3 ~ a3@4 c4@4 d4@4 f4@4", U: "d4 a3 f3 a3 d4 f4", V: "d4 a3 e3 ~@3",
  W: "~@8 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@2 f#5", // D
  X: "[a4,d5] ~@3 [a4,d5,f#5] ~@3 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3", // D5 D Bm
  Y: "[b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3 [a4,c5,e5]@2 ~@2 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [b4,e5,g5] ~@3", // Bm Am Em
  Z: "[b4,e5,g5] ~@3 [b4,e5,g5] ~@3 [c5,e5,a5]@2 ~@2 [c5,e5,a5] ~@3 [c5,e5,a5] ~@3 [c5,e5,a5] ~@3", // Em Am
  AA: "[c5,e5,a5] ~@3 [c5,e5,a5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3", // Am D
  AB: "[a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [b4,d5,f#5]@2 ~@2 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3", // D Bm
  AC: "[b4,d5,f#5] ~@3 [b4,d5,f#5] ~@3 [c5,e5,a5]@12 ~@4", AD: "c3 e3 a3 c4 d4 f4",
  AE: "[d4@4 a3@4 e3@4 a3@4 c4@4 e4@3 c4@4 a3@4 e3@4 g#3@4 ~ b3@4 e4@4]/2",
  AF: "b3@4 g#3@4 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3", // Am
  AG: "[c4,e4,a4]@2 ~@2 [c4,e4,a4]@2 ~@2 [c4,d4,a4] ~@3 [c4,d4,a4] ~@3 [c4,d4,a4] ~@3 [c4,d4,a4] ~@3", // Am D7
  AH: "[c4,d4,a4] ~@3 [c4,d4,a4] ~@3 [c4,d#4,g4]@14 ~@2", AI: "[~@23 g5@5 ~ d5@5 g#4@14, ~ [g#3,d4,g4]@4 ~]/2",
  AJ: "a3@4 c4@4 a3@6 ~@2 a3@4 e4@3 ~", AK: "c4@2 a3 ~ a3@2 c4@2 d4@2 f4@2",
  AL: "d4@4 a3@3 ~@2 b3@14 ~, ~@7 e3@15 ~@2, ~@4 g#3@7 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.3)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@98 [x!2 ~@4] ~@69>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@22 A B C ~@6 D ~@14 A B C ~@6 E ~@9 D ~@14 A B C ~@11 D ~@66 F B@3 ~@3
>`.pickRestart({
  A: "~@2 x!4", B: "x!6", C: "x!2 ~@4", D: "~ x ~", E: "~@5 x", F: "~@3 x!3",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@97 [~@5 x] ~@70>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 A@3 ~ A ~@5 A ~ B ~@15 A ~@7 A ~@5 A ~ B ~@5 A@2 C ~@7 A ~@7 A ~@5 A ~ B
  ~@5 A@2 C ~@7 A ~@4 A ~@8
>`.pickRestart({
  A: "~ x ~", B: "x", C: "x!3 ~@3",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct(`<
  A B@6 C A B@13 D ~ A B@6 C A B@13 D ~ A B@13 C ~ A C A B@13 D ~ A B@6 E B@4 D ~@3 A B@60 D ~ F B@3 ~@3
>`.pickRestart({
  A: "~@2 x!4", B: "x!6", C: "x!3 ~@3", D: "x!2 ~@4", E: "x!2 ~ x!3", F: "~@4 x!2",
})).gain(0.8)

stack(
  bass, overdriven_guitar, guitar_harmonics, string_ensemble_1, acoustic_guitar_nylon, kick, snare, mid_tom, open_hat,
  high_tom, crash, ride
)

More by Gary Moore