Strudelify

Empty Rooms

Gary Moore

KeyD minorTempo97 bpm
0:00/0:00
// Empty Rooms — Gary Moore
// 97 bpm, 4/4, key D minor. 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 6 "Syn.strng" synth strings 2 (copy of ch 7 "Guitar" electric guitar jazz)
// note: Full arrangement: all 154 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · string ensemble 2 · "Sl.string"
const string_ensemble_2 = note(`<
  A@6 B@8 C@6 D@4 E@4 F@8 G@6 H@8 I@8 J@5 K@8 L@4 M@6 N@3 O@7 P@8 Q@8 R@4 S@8 T@8 U@16 V@6 W@3 X@2
>`.pickRestart({
  A: "[~@22 [d3,a3,d4,f4]@48 [c3,g3,c4,e4]@48 [bb2,f3]@23 ~ [g2,g3]@18 ~@12 f3@9 ~@9 [c3,g3,c4,e4]@22 ~@2 [d3,d4]@74, ~@118 d4@73 ~@23 f4@14 ~@60, ~@118 bb3@48 bb2@25 ~@97, ~@169 bb3@22 ~@23 a3@28 ~@46]/6", // Dm C Bb5 G C D
  B: "[~@11 a2@143 ~ bb2@37, ~@11 f3@181]/8", C: "[~@11 a2@96 bb2@37]/6",
  D: "[~@22 [f2,f3,a3,c4]@48 [c3,g3,c4,e4]@47 ~ [bb2,bb3,d4,f4]@48 [bb2,bb3,d4,f4]@24 [bb2,bb3,d4,f4]@2, ~@59 a3@22 ~@15]/4", // F C Bb
  E: "[~@10 [c3,c4,e4,g4]@12 [d3,d4,f4,a4]@47 ~ [c3,c4,e4,g4]@46 ~@2 [bb2,a3,bb3,d4,f4]@24 [bb2,bb3,c4,e4]@24 [bb2,bb3,d4,f4]@24 bb3@2]/4", // C Dm C Bbmaj7 C7 Bb
  F: "[~@22 f3 ~@5 d3@18 [a2,c4,e4]@24 [d3,a3,d4,f4]@24 [a2,a3,c4,e4]@18 ~@8 g5@3 f5@2 ~@11 [a2,a3,c4,e4]@30 [d3,a3,d4,f4]@18 [a2,a3,c4,e4]@30 [d3,a3,d4,f4]@18 [a2,a3,c4,e4]@30 [d3,a3,d4,f4]@18 [a2,a3,c4,e4]@26 ~@4 [bb2,f3,bb3,d4]@74, ~@22 a3@46 ~@50 [d3,a3,d4,f4]@19 ~@247, ~@22 [d4,f4]@23 ~@339, ~@24 g5@95 ~@6 d5@83 ~@176]/8", // Am Dm Am Dm Am Dm Am Dm …
  G: "[~@5 [bb2,f3,bb3,d4]@3 [c3,c4,e4]@3 [d3,a3,d4,f4]@9 [a2,a3,c4,e4]@15 [d3,a3,d4,f4]@9 [a2,a3,c4,e4]@15 [d3,a3,d4,f4]@9 [a2,a3,c4,e4]@15 [d3,a3,d4,f4]@9 [a2,a3,c4,e4]@14 ~ [bb2,f3]@37, ~@22 g4 ~@265]/6", // Bb C Dm Am Dm Am Dm Am …
  H: "[~@22 [f2,f3,a3,c4]@48 [c3,g3,c4,e4]@47 ~ [bb2,bb3,d4,f4]@48 [bb2,bb3,d4,f4]@24 [bb2,bb3,d4,f4]@12 [c3,c4,e4,g4]@12 [d3,d4,f4,a4]@47 ~ [c3,c4,e4,g4]@46 ~@2 [bb2,a3,bb3,d4,f4]@48 [bb2,bb3,d4,f4]@22 ~@2 [bb1,bb2,bb3,d4,f4]@2, ~@59 a3@22 ~@111]/8", // F C Bb C Dm C Bbmaj7 Bb
  I: "[~@10 [c2,c3,c4,e4,g4]@8 ~@4 [d3,a3,d4,a4]@48 [c3,g3,c4,e4]@47 ~ [g2,g3,bb3,d4,f4]@48 [bb2,bb3,d4,f4]@23 ~ [bb2,bb3,d4,f4]@12 [c3,c4,e4,g4]@12 [d3,d4,f4,a4]@48 [c3,c4,e4,g4]@47 ~ [g2,g3,bb3,d4,f4]@48 [bb2,bb3,d4,f4]@23 ~ [bb2,bb3,d4,f4]@2]/8", // C D5 C Gm7 Bb C Dm C …
  J: "[~@10 [c3,c4,e4,g4]@12 [d3,d4,f4,a4]@48 [c3,c4,e4,g4]@47 ~@37 [a2,a3]@5 ~@31 a4@50, ~@118 [g2,g3,bb3,d4,f4]@41 ~ [bb2,bb3,d4,f4]@80]/5", // C Dm C A Gm7 Bb
  K: "[~@25 a4@43 ~@2 [f4,a4]@43 ~@5 d5@47 ~ [e4,e5]@47 ~@49 f4@47 ~@64 e4@11, ~@25 [c5,e5]@93 [g4,b4]@95 ~ [a4,c5,e5]@95 ~ [g4,b4,d5]@74]/8", // F E C G Am G
  L: "[~@22 [g4,c5,e5]@93 ~@3 [g4,b4,d5]@74]/4", // C G
  M: "[~@70 d4@47 ~ d5@19 ~@5 e5@71 ~@64 f4@11, ~@22 [f4,a4,c5]@95 ~ [e4,ab4,b4]@95 ~ [a4,c5,e5]@74]/6", // F E Am
  N: "[~@35 e4@24 [a4,c5,e5]@13, ~@11 [g4,b4,d5]@48 ~@13]/3", // Am G
  O: "[~@22 [f4,a4,c5,e5]@47 ~ [g4,b4,d5]@47 ~ [e4,g4,b4,d5]@47 ~ [g4,c5,e5]@95 ~ [g4,b4,d5]@74]/7", // Fmaj7 G Em7 C G
  P: "[~@22 [a4,c5,f5]@47 ~ [b4,d5]@47 ~ [a3,a4,c5,e5]@47 ~ [a3,a4,c5,e5,a5]@41 ~@10 d4@167, ~@70 g4@43 ~@101 [d3,a3,f4]@170, ~@214 d2@97 ~@73, ~@217 e4 ~@166]/8", // F Bm Am Dm
  Q: "[~@22 bb2@48 ~@24 g4@23 ~@76 c3 ~@190, ~@11 d4@181, ~@11 f4@36 ~@145, ~@22 a3@43 ~@5 [g2,g3,bb3]@46 ~@2 [d3,a3,f4]@266]/8", // Gm Dm
  R: "[~@11 [bb2,a3]@47 ~ [d3,a3]@37]/4", // Bbmaj7 D5
  S: "[~@22 [f2,f3,a3,c4,f4]@48 [c3,e4]@47 ~ [g2,g3]@24 bb2@24 g2@48 ~@15 d2@33 [c3,g3,c4]@44 ~@4 [f4,a4]@24 [e4,g4]@23 ~ [d4,f4,a4]@19 ~@7, ~@70 c4@43 ~@5 [d4,f4]@143 ~@49 d4@20 ~@4 c4@19 ~@31, ~@70 g3@39 ~@9 bb3@94 ~@172, ~@118 f3@3 ~@93 [d3,a3]@47 ~@49 [bb2,bb3]@67 ~@7, ~@118 eb4 ~@143 e4@35 ~@87]/8", // F C G C5 F Em Dm D5 …
  T: "[~@22 [d2,d3,a3,d4,f4]@47 ~ [c2,c3,g3,c4,e4]@48 [g2,g3,bb3,d4,f4]@46 ~@2 [bb2,f3,bb3,d4,f4]@23 ~ [bb2,f3,bb3,d4,f4]@12 [c3,g3,c4,e4,g4]@12 [d2,d3,d4,f4,a4]@47 ~ [c3,c4,e4,g4]@47 ~ [g2,g3,bb3,d4,f4]@47 ~ [bb2,f3,bb3,d4,f4]@23 ~ [bb2,f3,bb3,d4,f4]@2]/8", // Dm C Gm7 Bb C Dm C Gm7 …
  U: "[~@10 [c3,g3,c4,e4,g4]@11 ~ [f2,f3,c4,f4,a4]@47 ~ [c2,c3,c4,e4,g4]@47 ~ [g2,g3,bb3,d4,f4]@46 ~@2 [bb2,f3,bb3,d4,f4]@23 ~ [bb2,f3,bb3,d4,f4]@12 [c3,g3,c4,e4,g4]@12 [d2,d3,d4,f4,a4]@47 ~ [c3,c4,e4,g4]@47 ~ [g2,g3,bb3,d4,f4]@47 ~ [bb2,f3,bb3,d4,f4]@23 ~ [bb2,f3,bb3,d4,f4]@2, ~@10 f3 ~@373]/8", // C F C Gm7 Bb C Dm C …
  V: "[~@10 [c3,g3,c4,e4,g4]@11 ~ [d3,d4,f4,a4]@47 ~ [c2,c3,c4,e4,g4]@47 ~ [bb3,d4,f4]@36 [c3,d4,e4,g4]@2 ~@4 db3 ~@53 d5@74, ~@80 [d4,f4,a4]@51 ~@13, ~@80 bb3@49 ~@15]/6", // C Dm C Bb C Dm
  W: "[~@11 [d2,d3,a3,d4,f4]@48 ~@13]/3", X: "[~@22 d5@49 ~@25]/2",
})).s("gm_string_ensemble_2").gain(0.24)

// chords · pad halo · "Halo pad"
const pad_halo = note("<~@50 A@4 B@4 C@6 ~@15 D@2 E@2 F@2 G@2 H@4 I J K@2 ~@24 A@4 L@8 M@8 N@4 O@3 P@8>".pickRestart({
  A: "[~@23 [a4,d5,f5]@48 [g4,c5,e5]@48 [g4,bb4,d5,f5]@48 [bb4,d5,f5]@25]/4", // Dm C Gm7 Bb
  B: "[~@11 [c5,e5,g5]@11 ~ [a4,d5,f5]@48 [g4,c5,e5]@48 [g4,bb4,d5,f5]@48 [bb4,d5,f5]@25]/4", // C Dm C Gm7 Bb
  C: "[~@11 [g4,c5,d5,e5]@12 [a4,d5,f5]@48 e5@39 d5@9 [g4,bb4,d5,f5]@36 [g4,bb4,d5,f5]@6 bb4@30 a4@52 ~@45, ~@71 [g4,c5]@45 ~@45 [d5,f5]@84 ~@43]/6", // C Dm Gm7 C5 Dm
  D: "[~@17 a2@3 b2@4 c3@32 ~@3 b2@12 a2@25]/2", E: "[~@11 d3@42 c3@10 b2@3 ~ a2@3 g2@26]/2",
  F: "[~@17 e2@2 ~ g2@4 a2@29 ~@12 a2@3 b2@3 ~ c3@24]/2", G: "[~@11 d3@47 ~@38]/2",
  H: "[~@17 g2@6 e3@44 ~@22 e3@3 f3@21 e3@5 ~@2 e3@22 d3@29 ~@21]/4", I: "~@17 c3@31", J: "~@3 d3@20 ~",
  K: "[~@18 c3@3 b2@2 ~ a2@41 ~@31]/2",
  L: "[~@11 [c5,e5,g5]@11 ~ [a4,d5,f5]@48 [g4,c5,e5]@48 [g4,bb4,d5,f5]@48 [bb4,d5,f5]@36 [g4,c5,d5,e5]@12 [c5,f5,a5]@48 [c5,e5,g5]@48 [bb4,d5,f5]@48 [bb4,d5,f5]@25]/8", // C Dm C Gm7 Bb C F C …
  M: "[~@11 [c5,e5,g5]@15 [d5,f5,a5]@45 [c5,e5,g5]@48 [bb4,d5,f5]@48 [bb4,d5,f5]@36 [c5,e5,g5]@12 [c5,f5,a5]@48 [c5,e5,g5]@42 ~@6 [bb4,d5,f5]@48 [bb4,d5,f5]@24 [bb4,d5,f5]]/8", // C Dm C Bb C F C Bb
  N: "[~@11 [c5,e5,g5]@12 [d5,f5,a5]@48 [c5,e5,g5]@48 [bb4,d5,f5]@48 [bb4,d5,f5]@25]/4", // C Dm C Bb
  O: "[~@11 [c5,e5,g5]@12 [d5,f5,a5]@48 [c5,e5,g5]@48 [bb4,d5,f5]@25]/3", // C Dm C Bb
  P: "[~@47 a5@119 ~ [a3,f4]@192 ~@25, ~@17 [bb4,d5,f5]@149 ~@218]/8", // Dm Bb
})).s("gm_pad_halo").gain(0.12)

// other · distortion guitar · "Pianostrn"
const distortion_guitar = note("<~@95 A@8 B@7 C@4 D E@3 F@3 ~@33>".pickRestart({
  A: "[~@23 d5@35 ~ c5@10 d5@2 a4@36 g4@9 f4@2 ~ d4@17 c4@5 ~@2 c4@6 d4@6 g3@9 f3@2 ~ d3@17 ~ a2@6 d3@6 e3@5 ~ f3@6 g3@6 a3@50 g3@40 f3@3 e3@3 ~ f3@17 e3@3 f3@3 g3@17 ~ f3@3 g3@4 a3@5 d4@6 e4@6 f4@5 ~ e4]/8",
  B: "[~ f4 ~ e4@2 d4@7 e4@5 f4@6 ~ a4@70 ~ f4@16 ~@2 c5@2 ~@4 a4 ~ bb4 a4 ~ g4@7 f4@6 e4@6 d4@5 ~ c4@6 d4@6 e5@4 ~@2 d5 ~ e5 d5@2 c5@7 d5@6 e5@6 f5@3 d5@3 e5@3 f5@2 ~ f5@3 d5@3 e5@2 f5@2 ~@2 a5@50 g5@38 ~@3 f5 ~ e5@2 ~@2 f5@4 ~@2 e5 ~ f5 e5 ~ d5@6 e5@6 ~]/7",
  C: "[f5@5 g5@7 a5@6 c6@6 d6@29 d5@7 d6@11 c6@30 bb5@13 a5 ~@2 a5 ~ g5@32 ~@8 d5@3 ~@3 a5@3 bb5@3 ~@4 bb5@2 a5@2 ~ g5@5 f5@4 ~@3, ~@116 bb5@2 ~@44 g5@5 ~@7 a5@2 ~@16]/4",
  D: "a5@5 ~ g5 ~@2 g5@2 f5@6 e5@5 ~@2 g5@5 ~ f5 ~ g5 f5@3 e5@5 d5@4 ~@3, ~@4 a5 ~@19",
  E: "[f5@2 ~ d5@2 ~ e5 ~@2 f5 ~@2 f5@2 ~ d5@2 ~ e5@2 ~ f5 ~ a5@49 g5@38 ~@4 f5 ~ e5@2 ~@2 d5@21 ~@3]/3",
  F: "[c5@21 ~@3 d5@17 c5@4 ~@2 c5@6 d5@5 ~ g4@9 f4@2 ~@2 d4@34 ~@38]/3",
})).s("gm_distortion_guitar").gain(0.25)

// other · string ensemble 2 · "Syn.strng"
const string_ensemble_2_2 = note("<~@63 A@6 B@5 C@7 D@5 E@8 F@2 ~@58>".pickRestart({
  A: "[~@29 a3@6 e4@6 a3@6 d4@6 a3@6 c4@6 a3@3 ~@9 a3@6 e4@6 a3@6 d4@6 a3@6 c4@6 a3@3 ~@9 g3@6 d4@6 g3@6 c4@6 g3@6 b3@6 g3@2 ~@10 e3@6 b3@6 e3@6 a3@6 e3@6 g3@6 e3@2 ~@10 a3@6 e4@6 a3@6 d4@6 a3@6 c4@6 a3@3 ~@9 a3@6 e4@5 ~ a3@6 d4]/6",
  B: "[~@5 a3@6 c4@6 a3@3 ~@9 g3@6 d4@6 g3@6 c4@6 g3@6 b3@6 g3@3 ~@9 g3@6 b3@6 g3@6 c4@6 g3@6 d4@6 g3@3 ~@9 g3@6 e4@6 g3@6 d4@6 g3@6 c4@6 g3@3 ~@9 g3@6 e4@6 g3@6 d4@6 g3@6 c4@6 g3@2 ~@10 g3@6 d4@5 ~ g3@6 c4]/5",
  C: "[~@5 g3@6 b3@6 g3@3 ~@9 g3@6 d4@6 g3@6 c4@6 g3@6 b3@6 g3@2 ~@10 f3@6 c4@6 f3@6 b3@6 f3@6 a3@5 ~ f3@3 ~@9 f3@6 c4@6 f3@6 b3@6 f3@6 a3@6 f3@2 ~@10 e3@3 ~@3 b3@5 ~ e3@6 a3@6 e3@6 ab3@6 e3@3 ~@9 e3@5 ~ b3@6 e3@6 a3@6 e3@6 ab3@6 e3 ~@11 a3@6 e4@6 a3@6 d4@6 a3@6 c4@6 a3@3 ~@9 a3@6 e4@6 a3@6 d4]/7",
  D: "[~@5 a3@6 c4@6 a3@2 ~@10 g3@6 d4@6 g3@6 c4@6 g3@6 b3@6 g3@3 ~@9 g3@6 d4@5 ~ g3@6 c4@6 g3@6 b3@6 g3@2 ~@10 a3@5 ~ e4@6 a3@6 d4@6 a3@6 c4@6 a3@3 ~@9 a3@6 e4@6 a3@6 d4@6 a3@6 c4@6 a3@2 ~@10 g3@6 d4@5 ~ g3@6 c4]/5",
  E: "[~@5 g3@6 b3@6 g3@3 ~@9 g3@6 b3@6 g3@6 c4@6 g3@6 d4@6 g3@3 ~@9 g3@6 e4@6 g3@6 d4@6 g3@6 c4@6 g3@3 ~@9 g3@6 e4@6 g3@6 d4@6 g3@6 c4@6 g3@3 ~@9 g3@6 d4@6 g3@6 c4@6 g3@6 b3@6 g3@3 ~@9 g3@6 d4@6 g3@6 c4@6 g3@6 b3@6 g3@2 ~@10 f3@6 c4@6 f3@6 b3@6 f3@6 a3@6 f3@2 ~@10 g3@6 b3@6 g3@6 c4@6 g3@6 d4@6 g3@2 ~@10 a3@5 ~ e4@6 d4@6 c4]/8",
  F: "[~@5 a3@6 c4@6 e4@6 a4@44 ~@29]/2",
})).s("gm_string_ensemble_2").gain(0.29)

// bass · fretless bass · "Bass"
const bass = note("<~@6 A@8 B@6 C@4 D@4 E@8 B@6 C@4 F@7 G@4 H@6 ~@32 I@2 J@8 K@6 L@8 M@7 N@16 H@6 ~ O@5>".pickRestart({
  A: "[~@23 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 ~@24 bb1@18 bb1@6 bb1@24 bb1@18 bb1@6 bb1, ~@287 d2@96 ~]/8",
  B: "[~@11 bb1@6 c2@6 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@22 ~@2 bb1@18 bb1@6 bb1@24 bb1@18 bb1@6 bb1]/6",
  C: "[~@11 bb1@6 c2@6 f1@18 f1@6 f1@23 ~ c2@18 c2@6 c2@24 bb1@18 bb1@6 bb1@24 bb1@23 ~ bb1]/4",
  D: "[~@11 c2@12 d2@18 d2@6 d2@18 ~@3 e2@2 ~ e2@18 e2@6 e2@24 d2@24 c2@24 d2@25, ~@65 d2@5 ~@122]/4",
  E: "[~@23 d2@18 d2@6 d2@24 d2@18 d2@6 d2@22 ~@2 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 ~@24 bb1@18 bb1@6 bb1@24 bb1@18 bb1@6 bb1, ~@287 d2@96 ~]/8",
  F: "[~@11 c2@12 d2@18 d2@6 d2@18 ~@3 e2@2 ~ e2@18 e2@6 ~@24 bb1@18 bb1@6 bb1@24 bb2@21 ~@3 bb1@12 c2@11 ~ d2@10 ~@8 d2@6 d2@24 c2@18 c2@6 c2@23 ~ g1@18 g1@6 g1, ~@65 d2@5 ~@25 e2@72 ~@169]/7",
  G: "[~@11 a1@12 bb1@18 ~@6 bb2@12 c2@11 ~ d2@18 d2@6 d2@23 ~ c2@18 c2@6 c2@24 g1@18 g1@6 g1, ~@41 bb1@21 ~@130]/4",
  H: "[~@11 a1@12 bb1@18 ~@6 bb2@12 c2@11 ~ d2@18 d2@6 d2@23 ~ c2@18 c2@6 c2@24 g1@18 g1@6 ~@12 a1@4 ~@2 bb1@44 ~@35, ~@41 bb1@21 ~@129 g1@16 ~@81]/6",
  I: "[~@23 d2@14 ~@4 d2@2 ~@4 d2@19 ~@5 d2@15 ~@3 d2@2 ~@4 d2]/2",
  J: "[~@23 d2@18 d2@6 d2@24 d2@18 d2@5 ~ d2@24 bb1@18 bb1@6 bb1@24 bb1@18 bb1@6 bb2@23 ~ d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 d2@18 d2@6 d2@23 ~ d2@18 d2@5 ~ d2]/8",
  K: "[~@11 d3@11 ~ d2@18 d2@6 d2@24 d2@18 d2@6 d2@24 bb1@10 ~@8 bb1@2 ~@4 bb1@24 g1@18 g1@6 ~@12 c2@10 ~@2 d2@18 d2@6 d2@24 d2@18 d2@6 d2, ~@191 g1@21 ~@76]/6",
  L: "[~@11 e2@12 f2@18 f2@6 f2@22 ~@2 c2@18 c2@6 c2@21 ~@3 g1@18 g1@5 ~ g1@22 ~@2 bb1@18 bb1@5 ~ bb1@23 ~ d2@18 d2@6 d2@23 ~ c2@18 c2@6 c2@23 ~ bb1@23 ~ bb1@24 bb1@20 ~@4 bb1]/8",
  M: "[~@11 c2@8 ~@4 d2@10 ~@8 d2@6 d2@24 c2@18 c2@6 c2@23 ~ g1@18 g1@6 g1@9 ~@3 a1@12 bb1@18 ~@6 bb2@12 c2@12 d2@18 d2@6 d2@23 ~ c2@18 c2@6 c2@24 g1@18 g1@6 g1, ~@185 bb1@21 ~@130]/7",
  N: "[~@11 a1@12 bb1@18 ~@6 bb2@12 c2@12 f1@18 f1@6 f1@23 ~ c2@18 c2@6 c2@24 g1@18 g1@6 g1@9 ~@3 a1@12 bb1@18 ~@6 bb2@12 c2@12 d2@18 d2@6 d2@23 ~ c2@18 c2@6 c2@24 g1@18 g1@6 g1, ~@41 bb1@21 ~@171 bb1@21 ~@130]/8",
  O: "[~@23 d2@39 ~@3 d2@2 ~@4 d2 ~@95 d2@48 ~@25, ~@77 d2@90 ~@73, ~@119 d3@96 ~@25, ~@161 a2@54 ~@25]/5",
})).s("gm_fretless_bass").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A@14 B A C A D@2 C E A@14 B A C A D@2 C E A@10 C F ~@33 A@15 G H A@5 ~@2 A@26 C F ~@7
>`.pickRestart({
  A: "~@23 x ~@17 x ~@5 x", B: "~@8 x ~@14 x ~@17 x ~@5 x", C: "~@23 x ~@23 x", D: "~@17 x ~@5 x ~@23 x",
  E: "~@23 x ~@24", F: "~@11 x ~@5 x ~@30", G: "~@24 x ~@5 x ~@4 x ~@5 x ~@5 x", H: "~@5 x ~@17 x ~@17 x ~@5 x",
})).gain(0.26)

// drums · rim
const rim = s("rim").struct("<~@6 A B@13 ~@8 A B A B@11 ~@19 C ~@33 A B@14 C ~@35 C ~@7>".pickRestart({
  A: "~@35 x ~@12", B: "~@11 x ~@23 x ~@12", C: "~@11 x ~@36",
})).gain(0.29)

// drums · snare
const snare = s("sd").struct("<~@20 A B@5 C ~@15 A B@5 C ~ D B@10 ~@49 E F B@5 C ~ D B@26 ~@8>".pickRestart({
  A: "~@11 x!2 ~@22 x ~@12", B: "~@11 x ~@23 x ~@12", C: "~@11 x ~@36", D: "~@35 x ~@12",
  E: "~@23 x ~@5 x ~@5 x ~@5 x ~@5 x", F: "~@11 x!2 ~@4 x ~@2 x ~@14 x ~@12",
})).gain(0.29)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~@13 B ~@9 A ~@11 B ~@52 C ~@23 C ~@34>".pickRestart({
  A: "~@11 x ~@36", B: "~@23 x ~@24", C: "~@11 x ~@5 x ~@30",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<~@20 A B@5 C D ~@14 A B@5 E ~ A B@10 F ~@48 A ~@8 A B@26 F ~@7>".pickRestart({
  A: "~@23 x ~@5 x ~@5 x ~@5 x ~@5 x", B: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x",
  C: "~@5 x ~@5 x ~@5 x ~@5 x ~@23 x", D: "~@23 x ~@23 x", E: "~@5 x ~@5 x ~@5 x ~@30", F: "~@5 x ~@42",
})).gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@24 [~@17 x ~@30] ~@21 [~@17 x ~@30] ~@107>").gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 A B C ~@43 A D ~@23 D ~@34>".pickRestart({
  A: "~@47 x", B: "~@23 x ~@24", C: "~@11 x ~@36", D: "~ x ~@4",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@36 A ~@11 B ~ B ~@10 C ~@39 A ~@9 B ~ A ~@5 B ~@26 C ~@2 B ~@4>".pickRestart({
  A: "~@11 x ~@36", B: "~@23 x ~@24", C: "~@11 x ~@5 x ~@30",
})).gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<~@49 [~@47 x] ~@44 [~@35 x ~@12] ~@23 [~@47 x] ~@35>").gain(0.33)

// drums · ride
const ride = s("rd").struct(`<
  ~@6 A B C B C D@2 B C D@2 B C D ~@8 E B A B C D@2 B C D@2 B C D ~@53 A B C D@2 B C D@2 B C D C B C F G H I H@3 J K
  ~@31 L M ~@2
>`.pickRestart({
  A: "~@23 x ~@11 x ~@11 x", B: "~@11 x ~@11 x ~@11 x ~@5 x ~@5 x", C: "~@11 x ~@11 x ~@11 x ~@11 x",
  D: "~@11 x ~@5 x ~@5 x ~@11 x ~@11 x", E: "~@23 x ~@11 x ~@5 x ~@5 x", F: "~@11 x ~@5 x ~@30",
  G: "~@29 x ~@5 x ~@5 x ~@5 x", H: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x",
  I: "~@5 x ~@11 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x", J: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@17 x", K: "~@23 x ~@24",
  L: "~@17 x ~@5 x ~@17 x ~@5 x", M: "~@17 x ~@30",
})).gain(0.26)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@150
  [~@23 x ~@5 x ~@18]
  [~@11 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x]
  [~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@11 x]
  [~@11 x ~@36]
>`).gain(0.07)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@150 [~@35 x ~@5 x ~@5 x] [~@5 x ~@42] [~@41 x ~@6] [~@5 x ~@11 x ~@30]>")
  .gain(0.04)

stack(
  string_ensemble_2, pad_halo, distortion_guitar, string_ensemble_2_2, bass, kick, rim, snare, low_tom, hihat, open_hat,
  mid_tom, crash, high_tom, ride, shaker, shaker_soft
)

More by Gary Moore