Strudelify
Still Got the Blues cover art

1992 · 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 32-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: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A@3 B@2 C@2 D@4 E@4 F@4 G@3 H I@7 J@5 E@4 F@4 G@3 H I@7 K L@2 M@2 N@2 O@3 P Q@4 R@8 G@3 H I@7 S T@2 U@4 V@6 W@8 B@2
  X@6 W@8 B@2 X@6 W@8 B@2 X@6 W@8 Y@8 ~@2
>`.pickRestart({
  A: "[~@11 g1@31 c2@32 ~ f1@21]/3", B: "[f2@5 e2@5 b1@32 ~ e2@20 ~]/2",
  C: "[b1@5 g#1@5 ~ a1@20 e2@5 ~ c2@5 a1@14 ~@3 a1@5]/2", D: "[c2@5 e2@5 ~ d2@32 g2@32 c2@32 f2@19 ~@2]/4",
  E: "[f2@5 e2@6 b1@31 ~ e2@18 ~@2 b1@5 ~ g#1@4 ~ a1@16 b1@15 ~@2 c2@13 ~@3 a1@5]/4",
  F: "[c2@5 e2@5 ~ d2@31 ~ g2@31 ~ c2@32 f2@19 ~@2]/4",
  G: "[f2@5 e2@5 ~ b1@31 ~ b1@30 ~@2 e1@3 ~@2 e1@3 ~@2 e1@3 ~@3 e1@3 ~@2]/3",
  H: "e1@3 ~@2 e1@3 ~@3 e1@3 ~@2 e1@3 ~@2 e1@4 ~@2 e1@3 ~@2",
  I: "[e1@4 ~ g1@6 a1@31 ~ e1@26 ~ g1@5 a1@30 ~ d2@31 ~@2 f1@32 e1@31 a1@22]/7",
  J: "[e2@5 c2@5 a1@4 ~@13 a1@4 c2@5 ~ e2@5 ~ d2@32 g2@32 c2@32 f2@19 ~@2]/5", K: "~@10 a1@19 ~@3",
  L: "[a1@5 a#1@5 ~ b1@31 ~ e2@20 ~]/2", M: "[b1@5 g1@5 ~ a1@16 b1@15 ~ c2@18 ~@3]/2",
  N: "[a1@5 a#1@4 ~ b1@32 ~ e2@21]/2", O: "[~@5 e2@5 ~ f2@15 e2@17 d2@31 ~ a1@21]/3", P: "e2@5 c2@5 a1@3 ~@14 a1@5",
  Q: "[c2@5 e2@6 d2@32 g1@31 ~ c2@32 f1@21]/4",
  R: "[f2@5 e2@5 ~ b1@31 e2@21 b1@6 g#1@5 a1@15 ~ b1@16 c2@15 ~@2 a1@4 c2@5 ~ e2@5 d2@31 ~@2 g2@31 ~ c2@32 f2@19 ~@2]/8",
  S: "~@16 e1@3 ~@2 e1@3 ~@3 e1@5", T: "[b1@5 g1@4 ~@2 a1@31 ~ e1@21]/2", U: "[~@5 g1@5 ~ a1@32 d2@30 ~@2 f1@53]/4",
  V: "[~@11 e1@63 ~ d2@32 g1@31 ~ c2@32 f1@21]/6",
  W: "[f2@5 e2@5 ~ b1@31 e2@21 b1@6 g#1@5 a1@15 ~ b1@16 c2@15 ~@2 a1@4 c2@5 ~ e2@5 d2@32 ~ g1@31 c2@32 ~ f1@21]/8",
  X: "[b1@5 g#1@5 ~ a1@20 e2@5 ~ c2@5 a1@14 ~@2 a1@5 c2@5 e2@4 ~@3 d2@32 g1@31 ~ c2@32 f1@21]/6",
  Y: "[f2@5 e2@5 b1@32 ~ e2@65 a1@147 ~]/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 A N@2 O P Q R@2 S@2 T U V@3 W@2 ~@6 X Y ~@4 Z@2 ~ AA AB AC
  AD@2 AE AF@2 AG@4 P AH AI AJ@5 AK AL AM@2 AN AO AP AQ@4 AR AS@3 AT AU@2 AV AW AX AY@5 AZ@2 BA@4 BB Q BC@4 BD@7 BE@5
>`.pickRestart({
  A: "~@3 a4@2 d5@2 ~ e5@2 ~ f5@21", B: "~ f5@7 ~ e5@2 d5@21", C: "~@5 c5@2 ~ d5@2 e5@20 ~@2", D: "e5@9 ~@2 c5@21",
  E: "[~@4 a4 ~ b4 ~ c5 ~@2 d5@18 ~@2 d5@11 ~ b4@21]/2", F: "[a4@5 g4@5 ~ a4@39 ~@14]/2",
  G: "[e4@5 g4 ~@4 g4@40 ~@14]/2", H: "[~@5 a4@2 ~ g4@2 d4@40 ~@14]/2",
  I: "[~@6 e4@2 d4@2 a3@40 ~@13 a4@9 ~ e4@2 ~ d4@2 c4@2 ~ a3@30 ~@17]/4", J: "[a4@5 c5@2 ~@3 d5@42 ~@12]/2",
  K: "~@6 d5@2 c5@2 a4@7 ~@15", L: "[~@9 e5@33 ~@22]/2", M: "~@3 d#4@5 d4@2 c4@2 a3@2 ~ a3@14 ~@3",
  N: "[~ f5@7 e5@2 ~ d5@24 g4@2 c5@2 ~ d5@2 ~ e5@21]/2", O: "e5@8 ~ d5@2 c5@21", P: "~@3 a4@2 b4@2 ~ c5@2 ~ d5@21",
  Q: "d5@10 ~ b4@21", R: "[a4@5 g4@4 ~ a4@16 b4@16 c5@22]/2", S: "[~@3 a4@2 d5@2 ~ e5@2 ~ f5@26 g5@5 ~ e5@5 d5@16]/2",
  T: "~@2 g4@2 ~ c5@2 d5@3 e5@22", U: "~@3 f5@2 e5@2 ~ d5@2 c5@21 ~",
  V: "[~@3 a4@2 b4@2 ~ c5@2 ~ d5@15 d5@11 c5@2 ~ a4@2 d5@4 ~ d5@20 ~@4 e4 ~@3 d6@10 c6@8 a5@3, ~@69 [c5,d5]@2 ~@25, ~@35 a4 ~@12]/3", // Csus2
  W: "[g5@2 e5@2 d5@3 e5@3 g5@2 e5@2 ~ e5@2 c5@2 d5@2 e5@2 d5@2 ~ g5@2 e5@2 d5 g5@2 ~ d5@2 e5@2 c5@2 d5@2 ~ e5@11 ~@10, ~@14 d5@2 ~@9 a5@2 ~@6 e5@2 ~@29]/2",
  X: "~@5 a2@5 ~@6 e3@2 ~@3 e3@3 ~@3 e3@4 ~", Y: "e3@3 ~@2 e3@4 ~@2 a3@15 ~@6", Z: "[~@9 d#4@31 ~@24]/2",
  AA: "~@2 a4@3 d5@3 e5@2 ~ f5@20 ~", AB: "f5@8 e5@2 ~ d5@21", AC: "~@2 g4@2 ~ c5@2 d5@2 ~ e5@20 ~@2",
  AD: "[e5@8 d5@2 ~ c5@24 a4@2 ~ b4@2 c5@2 ~ d5@20 ~]/2", AE: "d5@11 ~ b4@20",
  AF: "[a4@5 b4@5 c5@15 ~ d5@15 ~ e5@22]/2",
  AG: "[~@3 a4 ~ d5@2 ~ e5@2 ~ f5@29 e5@2 ~ d5@24 g4@2 c5@2 ~ d5@2 ~ e5@19 f5@3 e5@4 d5@5 c5@22]/4",
  AH: "~ d5@11 b4@20", AI: "a4@5 g4@5 a4@15 ~@2 a4@4 ~",
  AJ: "[a4 ~ a4 ~@2 a4@4 ~ a4 ~@2 a4 ~ a4@4 ~@2 a4 ~ a4 ~@2 a4@3 ~@2 a4@2 ~@2 c5@2 d5@3 e5@3 f5@26 ~ f5@4 ~ f5@26 g5@5 ~ e5@5 ~ e5@18 ~ c5@2 d5@2 a4@2 ~ c5@5 d5@6 ~@10]/5",
  AK: "a4@2 c5@2 ~ d5@2 ~ e5@2 f5@6 d5@2 e5@3 c5@2 g4@2 ~ a4@2 ~ c5@3", AL: "d5@9 ~ b4@10 ~ a4@5 ~ g#4@5",
  AM: "[a4@4 ~ b4@4 ~ e4@15 ~ d4@15 ~ c4@11 ~@6 a2@5]/2", AN: "c3@5 e3@2 ~@3 e3@5 ~ d3@15 ~",
  AO: "f3@5 a3@4 ~ g3@4 a3@3 ~ c4@3 a3@3 c4@3 ~ d4@2 f4@2", AP: "~ d4@2 f4@2 a4@2 ~ c5@2 a4@2 b4@8 ~ a4@6 g4@5",
  AQ: "[a4@4 ~ c5@5 e5@14 ~ g5@2 ~ e5@11 ~ c5 ~ e5@6 d5@21 ~ d5@3 ~ d5 ~ d5 ~ d5@2 e5@2 ~ d5@2 f5@2 ~ d5@2 ~ e5@2 d5@2 c5@2 [c5,d5]@2 ~@2 g#4@2 b4@2 ~@2 a4@4 ~ e4@5 d4@5 c4@5 ~, ~@99 b4@2 ~@5 g#4@2 ~@20, ~@100 a4@2 ~@3 a4@2 ~@21]/4", // Csus2
  AR: "b3@5 a3@4 ~@2 a4@4 ~ a5@10 ~ a5@3 g5@2",
  AS: "[~ e5@2 d5@2 e5@2 d5@2 c5@2 ~ a4@2 c5@2 d5 ~@2 a5@2 c6@3 ~ d6@11 ~ d6@4 ~ d6@6 ~@2 d6@19 ~ c6@4 ~ b5@10 a5@5 ~ g5@4 ~, ~@11 d5@2 ~@5 f5@2 ~@76]/3",
  AT: "e5 g5 ~ e5@2 d5 e5@2 d5@2 c5 ~ d5 ~@2 d5 ~ e5@2 g5@2 a5@11, ~@7 c5 ~@8",
  AU: "[a5 ~@2 a5 ~ a5 ~@2 a5@2 ~ d6@10 ~ c6@4 ~ a5@2 g5@2 e5@2 ~ c5 ~ d5@2 a4 ~ d5 c5 ~ d5 ~ d5 ~@2 d5 ~ d5@2 c5@4 ~@8]/2",
  AV: "e5@4 d5 ~ e5@2 ~ e5@2 d#5@2 e5@2 ~ e5@2 d#5@2 e5@2 ~ e5@2 d#5@2 e5@2 ~ e5@2, ~@8 g5@2 ~@5 g5@2 ~@5 g5@2 ~@5 g5@2 ~",
  AW: "d#5@2 e5@2 g5@2 e5@3 ~ a4@4 ~@2 e6@16", AX: "~ e6@8 ~@2 e6@11 ~ e6@9",
  AY: "[~@2 e6@9 ~ e6@4 ~@2 e6@4 d6@14 ~ c6@5 b5@3 g5@2 a5@2 ~ e5@2 g5@3 d5 ~ a4@3 g4@3 c4@2 ~ d4@3 e4@3 a3@3 d4@4 ~@2 d4@10 c4@13 ~@3 d6@12 ~ d6@11 ~ d6@8 ~ d6@5 ~@2 d6@12]/5",
  AZ: "[~@2 d6@8 ~ d6@9 ~ c6@2 a5@2 ~ c6@3 ~ c6@4 ~ a5@8 ~@6 e6@15]/2",
  BA: "[~@3 a4@2 d5@3 e5@2 ~ f5@25 ~ f5@2 e5@3 ~ d5@24 ~ g4@2 c5@2 d5@2 ~ e5@16 e5@12 ~@4 c5@21]/4",
  BB: "~@3 a4@2 ~ b4@2 c5@2 ~ d5@20 ~",
  BC: "[a4@4 ~ g4@5 ~ a4@11 e4@4 b4@10 ~ d5@5 ~ c5@24 a4@2 d5@2 ~ e5@2 ~ f5@28 e5@3 d5@22]/4",
  BD: "[~@3 g4@2 c5@2 d5@2 ~ e5@11 ~ g5@4 e5@14 ~@2 c5@3 ~ d5 ~ c5@19 a4@2 b4 ~ c5@2 ~@2 d5@30 ~@2 b4@15 ~ g#4@16 e4@27 ~@4 a4@33 c5@3 a4 c5 ~ g4@2 e4@2 g4 ~ d4@3 c4@2 d4 a3 ~ c4, ~@104 a4 ~@2 e4 ~@4]/7",
  BE: "[~@2 e4@2 ~ a4@2 g4@2 ~ e4@2 c4@2 d4@2 a3@2 d4@2 ~ c4@3 a3@3 g3@3 e3@4 d3@5 c3@6 b2@8 ~ a2@106, ~ d4@2 ~@157]/5",
})).s("gm_overdriven_guitar").gain(0.68).pan(0.4)

// other · guitar harmonics · "GTHARMONIC"
const guitar_harmonics = note("<~@122 [~@5 e4@5 ~@22] ~@31 [~ c4@7 ~@24] ~@5 [~@15 e3@16 ~] ~@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 I@2 D J@5 K@4 L@3 M@3 ~@16 N@2 D O@4 P D Q@8 ~@38 R S@8 T@8 U@2 V@5 W@5 ~@2
>`.pickRestart({
  A: "[~@11 [a3,c4,d4,f4]@63 ~ [g3,b3]@31 [a3,c4]@31 ~ [a3,d4,f4]@31 ~@2 e4@30 ~ [a3,c4,e4]@16 [b3,d4]@16 [a3,c4,e4]@22, ~@37 e4@31 ~@17 [g#3,b3]@15 ~@28]/8", // Dm7 G Am Dm Am Bm Am G#m
  B: "[~@10 [a3,c4,d4,f4]@63 ~@2 g3@29 ~@3 [a3,c4]@30 ~ [a3,d4]@31 ~@2 [a3,d4]@31 [g#3,b3,e4]@41 ~@13, ~@74 e4@63 ~ f4@64 ~@54, ~@37 b3@16 ~@75]/8", // Dm7 Am D5 E
  C: "[e4@2 g4@2 ~ a4@2 c5@3 ~ a4@32 g4@21]/2", D: "e4@3 g4@2 a4@3 c5@3 a4@21",
  E: "[b4@5 c5@5 ~ e5@27 ~@4 d#4@31 ~@2 g#3@31 [a3,c4,e4]@36 ~@18, ~@42 g4@65 ~@53, ~@37 d4@15 ~@28]/5", // Am
  F: "[~@11 [a3,c4,d4,f4]@63 ~ [g3,b3]@31 [a3,c4]@31 ~ [a3,d4,f4]@31 ~@2 e4@30 ~ [a3,c4,e4]@16 [b3,d4]@6, ~@37 e4@31 ~@17 [g#3,b3]@15 ~@12]/7", // Dm7 G Am Dm Am Bm G#m
  G: "[~@26 a4@5 c5@5 ~ e5@5 f5@53 g5@5 d5@5 ~ e5@53 f5, ~@10 [a3,c4,e4]@29 ~@121]/5", // Am
  H: "[~@4 c5@6 d5@64 a4@32 b4@19 ~@3, ~@37 e4@25 ~@2]/4", I: "[e4@3 g4@2 a4@3 c5@3 a4@32 g4@21]/2",
  J: "[b4@5 c5@5 ~ e5@27 ~@4 d#4@31 ~@2 g#3@31 [a3,c4,e4]@36 ~@2 a4@5 b4@5 ~ c5@5, ~@42 g4@65 ~@53, ~@37 d4@15 ~@28]/5", // Am
  K: "[d5@5 e5@6 d5@29 ~@2 d5@31 ~ c5@16 b4@16 ~ a4@14 ~@2 c5@5]/4",
  L: "[d5@5 e5@5 ~ d5@31 d5@30 ~@2 a5@10 ~ c6@5 ~ b5@5]/3", M: "[g5@5 e5@5 c5@31 ~ a4@36 ~@18]/3",
  N: "[~@11 a4@32 g4@21]/2",
  O: "[b4@5 c5@5 ~ e5@27 ~@4 d#4@31 ~@2 g#3@31 [a3,c4,e4]@16 a4@5 ~, ~@42 g4@65 ~@21, ~@37 d4@15 ~@12]/4", // Am
  P: "b4@5 c5@4 ~@6 e4@2 ~@4 e4@3 ~@2 e4@3 ~@3",
  Q: "[b4@5 c5@6 b4@19 ~ e4@3 g4@2 a4@3 c5@3 a4@21 b4@5 c5@5 ~ g#4@16 a4@13 ~@4 a3@61 ~@3 [g#3,d4,g4]@60 ~@25, ~@74 [a3,c4]@29 ~@3 [d#4,g4]@61 ~@89]/8", // G Am D#
  R: "~@26 a4@5 c5",
  S: "[~@4 e5@5 ~ [c5,f5]@32 ~ [d5,f5]@20 g5@5 d5@5 ~ e5@53 a4@6 c5@5 d5@31 ~ d5@32 c5@17 d5@15 e5@16 a4@5 c5]/8", // F5 Dm
  T: "[~@4 e5@5 ~ f5@53 g5@6 d5@5 e5@64 ~ d5@31 b4@32 a4@16 b4@10 ~ d5@5 c5@16 a4@5 c5]/8", U: "[~@5 e5@5 f5@53 g5]/2",
  V: "[~@2 d5@3 e5@32 d5@16 g#4@27, ~@106 b4@19 ~@35]/5", W: "[~@12 [e4,a4,c5]@143 ~@5]/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@2 F G ~@15 H@2 I J@2 ~@2 K L M N O P@2 Q R@2 B@2 C D S T ~ H@2 I J@2 ~@3 U V W@5 ~@2 X@2 M N O P@2 Q R@2
  B@2 C D S Y@2 Z@2 I J@2 ~@3 H@2 I AA AB ~ AC@2 AD M N O P@2 Q R@2 B@2 C D E@2 AE@2 M N O P@2 Q R@2 B@2 C D E@2 AE@2 M
  N O P@2 Q R@2 B@2 C D E@2 AE@2 M N O P@2 Q R@2 B@2 C AF@2 ~@8
>`.pickRestart({
  A: "~@11 a3@5 c4@5 d4@6 f4@5", B: "[d4@5 c4@5 a3@6 c4@5 d4@5 f4@5 d4@5 ~ c4@5 g3@5 b3@5 ~ c4@5 e4@6]/2",
  C: "c4@5 b3@4 ~ f3@5 ~ a3@5 c4@5 ~ e4@5", D: "c4@5 a3@4 ~ f3@5 a3@5 ~ d4@5 f4@5 ~",
  E: "[d4@5 a3@5 e3@5 ~ g#3@5 b3@5 e4@5 b3@5 ~ g#3@5 a3@8 ~@3 a3@6 c4@5]/2", F: "a3@5 c4@5 ~ a3@7 ~@9 a2@5",
  G: "c3@5 e3@5 ~@22",
  H: "[~@11 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@4 [c4,e4,a4]@2 ~@3 [b3,e4,g4]@2 ~@4 [b3,e4,g4]@2 ~@3 [b3,e4,g4]@2 ~@4 [b3,e4]@2 ~@3, ~@29 g4 ~@2]/2", // Am Em E5
  I: "[b3,e4,g4]@2 ~@3 [b3,e4,g4]@2 ~@4 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@4 c4@2 ~@3 [c4,e4,a4]@2 ~@3, ~@21 [e4,a4]@2 ~@9", // Em Am A5
  J: "[[c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@4 [e4,f4,a4]@2 ~@3 [e4,f4,a4]@2 ~@3 [e4,f4,a4]@2 ~@3 [e4,f4,a4]@2 ~@3 [e4,f4,a4]@2 ~@4 [e4,f4,a4]@2 ~@4 [c4,g4]@18 ~@3, ~@21 d#4@9 ~@2]/2", // Am Fmaj7 C5
  K: "~@27 a2@5", L: "c3@5 e3@4 ~@2 a3@5 c4@5 d4@5 f4@6, ~@5 d3@4 ~@7", M: "d4@5 c4@5 ~ a3@5 c4@5 d4@6 f4@5",
  N: "d4@5 ~ c4@5 g3@5 b3@5 c4@6 e4@5", O: "c4@5 b3@5 ~ f3@5 a3@5 c4@5 e4@6",
  P: "[c4@5 a3@5 f3@5 ~ a3@5 d4@5 f4@5 d4@5 ~ a3@5 e3@5 ~ g#3@5 b3@6 e4@5]/2", Q: "b3@5 g#3@5 a3@5 ~ e4@5 a3@5 b3@5 ~",
  R: "[d4@5 a3@4 ~ a3@6 c4@5 a3@4 ~ a3@5 c4@6 e4@4 ~@2 a3@5 c4@5 d4@6 f4@5]/2",
  S: "d4@5 a3@5 ~ f3@4 a3@5 ~ d4@5 f4@5 ~", T: "d4@5 a3@5 e3@5 ~@17",
  U: "~@11 [a4,d5,f#5] ~@4 [a4,d5,f#5] ~@4 [a4,d5,f#5]@2 ~@3 [a4,d5,f#5]@2 ~@3 [a4,d5,f#5]", // D
  V: "~@5 [a4,d5,f#5] ~@4 [b4,d5,f#5]@2 ~@4 [b4,d5] ~@4 [b4,d5,f#5]@2 ~@3 [b4,d5,f#5] ~@4 [b4,d5,f#5], ~@15 f#5@2 ~@15", // D Bm
  W: "[~@5 [b4,d5,f#5] ~@4 [a4,c5,e5]@2 ~@4 [a4,c5,e5]@2 ~@3 [a4,c5,e5] ~@4 [b4,e5,g5]@2 ~@3 [b4,e5,g5]@2 ~@4 [b4,e5,g5]@2 ~@3 [c5,e5,a5]@2 ~@4 [c5,e5,a5]@2 ~@3 [c5,e5,a5]@2 ~@3 [c5,e5,a5]@2 ~@4 c5@2 ~@3 [c5,e5,a5]@2 ~@3 [a4,d5,f#5]@2 ~@3 [a4,d5,f#5]@2 ~@4 [a4,d5,f#5]@2 ~@3 [a4,d5,f#5]@2 ~@3 [a4,d5,f#5]@2 ~@4 [a4,d5,f#5]@2 ~@3 [b4,d5,f#5]@2 ~@4 [b4,d5,f#5]@2 ~@3 [b4,d5,f#5]@2 ~@3 [b4,d5,f#5]@2 ~@4 [b4,d5] ~@4 [b4,d5,f#5] ~@5 [c5,e5,a5]@16 ~@5, ~@63 [e5,a5]@2 ~@62 f#5@2 ~@31]/5", // Bm Am Em Am D Bm Am A5
  X: "[~@26 a2@5 c3@5 ~ e3@5 ~ a3@5 c4@5 d4@5 f4@6]/2",
  Y: "[d4@5 a3@5 e3@5 ~ a3@5 c4@5 e4@5 c4@5 a3@5 ~ e3@5 g#3@5 ~ b3@5 e4@6]/2",
  Z: "[b3@5 g#3@5 ~ [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@4 [c4,e4,a4]@2 ~@3 [b3,e4,g4]@2 ~@4 [b3,e4,g4]@2 ~@3 [b3,e4,g4]@2 ~@4 [b3,e4]@2 ~@3, ~@29 g4 ~@2]/2", // Am Em E5
  AA: "[c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~@4 [c4,d4,a4]@2 ~@3 [c4,d4,a4]@2 ~@4 [d4,a4]@2 ~@3 [c4,d4,a4]@2 ~@3, ~@21 c4@2 ~@9", // Am D7 D5 D7
  AB: "[c4,d4,a4]@2 ~@4 [d4,a4]@2 ~@3 [c4,g4]@18 ~@3, ~@5 c4@2 ~@3 d#4@18 ~@4", // D7 D5 C5
  AC: "[~@31 g5@7 d5@6 ~@2 g#4@18, ~@11 [g#3,d4,g4]@43 ~@10]/2", AD: "~@11 a3@5 c4@5 d4@5 f4@6",
  AE: "[a3@5 c4@5 ~ a3@7 ~@3 a3@5 ~ e4@4 c4@5 ~ a3@2 ~@4 a3@5 c4@5 d4@5 f4@6]/2",
  AF: "[c4@5 a3@4 ~ f3@5 ~ a3@5 d4@5 f4@5 d4@5 ~ a3@4 ~@3 b3@19 ~, ~@21 e3@10 ~, ~@43 g#3@19 ~@2]/2",
})).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: "~@11 x ~@20", B: "~@5 x ~@5 x ~@20", C: "~@5 x ~@5 x ~@9 x ~@10", D: "~@5 x ~@5 x ~@15 x ~@4",
  E: "~@11 x ~@4 x ~@4 x ~@5 x ~@4", F: "x ~@4 x ~@5 x ~@20", G: "x ~@4 x ~@5 x ~@9 x ~@10",
  H: "x ~@4 x ~@10 x ~@4 x ~@5 x ~@4", I: "~@27 x ~@4",
})).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: "~@27 x ~@4", B: "~@11 x ~@20", C: "~@11 x ~@4 x ~@4 x ~@5 x ~@4", D: "x ~@4 x ~@5 x ~@4 x ~@4 x ~@5 x ~@4",
  E: "x ~@4 x ~@21 x ~@4", F: "~@16 x ~@4 x ~@5 x ~@4", G: "~@16 x ~@10 x ~@4",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@98 [x ~@4 x ~@26] ~@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: "~@11 x ~@4 x ~@4 x ~@5 x ~@4", B: "x ~@4 x ~@5 x ~@4 x ~@4 x ~@5 x ~@4", C: "x ~@4 x ~@26", D: "~@11 x ~@20",
  E: "~@27 x ~@4", F: "~@16 x ~@4 x ~@5 x ~@4",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@97 [~@27 x ~@4] ~@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: "~@11 x ~@20", B: "x", C: "x ~@4 x ~@5 x ~@20",
})).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: "~@11 x ~@4 x ~@4 x ~@5 x ~@4", B: "x ~@4 x ~@5 x ~@4 x ~@4 x ~@5 x ~@4", C: "x ~@4 x ~@5 x ~@20",
  D: "x ~@4 x ~@26", E: "x ~@4 x ~@10 x ~@4 x ~@5 x ~@4", F: "~@21 x ~@5 x ~@4",
})).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