Strudelify
Red Barchetta cover art

Moving Pictures

Red Barchetta

Rush

KeyD majorTempo37 bpm
0:00/0:00
// Red Barchetta — Rush
// 37 bpm, 4/16, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/16 at bar 1, 3/16 at bar 71, 4/16 at bar 71, 7/16 at bar 121, ...) are rendered on a constant 4/16 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 2 "Bass" named as a bass, played on electric bass finger (its drawbar organ patch is not one)
// note: Full arrangement: all 217 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(37/1)

// 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 · slap bass 1 · "Bass Keybd"
const bass = note(`<
  ~@16 A B C B C B D E@2 B C B C B F G H B C B C I J@3 K@2 L M K@2 L N O@2 P N@2 O P O N O Q R@4 S@3 ~ T U V W V W V X Y
  W V W V W V X Y Z@2 AA AB AC AD AE AD AF AG AB AH AD AE AD AI AG AB AJ@2 AK@2 AL@2 AK@2 AL@2 AM@2 AN AO ~@14 AP AQ AR
  AS AT AU AV W V W V W V AW Y W V W V W AX AY AZ BA@3 BB BA@3 BB BC BD BC BE BD@2 BC BE BC BD BC BF BG@3 BB BG BH BI@2
  BJ@2 BK ~@32
>`.pickRestart({
  A: "~@3 e2 a2 d3@2 a2", B: "e2 a2 c#3 a2 e2 d3@2 c#3", C: "e2 a2 ~ e2 a2 d3@2 a2", D: "e2 a2 ~ a3 d4 e4@2 d4",
  E: "[a3 d4 c#4@2 a3 c#4 d4 e4@3 ~ e2 a2 d3@2 a2]/2", F: "e2 a2 ~ a2 d3 e3@2 d3", G: "a2 d2 c#3@2 a2 c#3 d3 e3",
  H: "a2 e2 ~ e2 a2 d3@2 a2", I: "e2 a2 c#3 a2 e2 d3@2 a2",
  J: "[e2 a2 ~@2 d4 e4@2 d4@3 c#4@2 a3 c#4 d4 e4@3 ~@2 f4 ~@3]/3", K: "f4 ~@3 f4 ~@3", L: "f4 ~ f4 g4@3 g4@2",
  M: "~@4 f4 ~@3", N: "~@2 c#4@3 d4@2 d4", O: "~ c#4 ~ d4", P: "~@2 b4 c#5@2 d5 c#5@2", Q: "~@2 b3 c#4@2 d4 c#4@2",
  R: "[~@2 c4@3 c4@5 c4@3 c4@5 c4@3 c4@5 f4 g4@3 g4@2]/4", S: "[~@2 c4@3 c4@5 c4@3 c4@5 c4@3 c4@3]/3",
  T: "~@2 e3 a3@3 a2@2", U: "e2 ~ a2 d3@2 a2 e2 a2", V: "c#3 a2 e2 d3@2 c#3 e2 a2", W: "~ e2 a2 d3@2 a2 e2 a2",
  X: "~ a2 d3 e3@2 d3 a2 e2", Y: "c#3@2 a2 c#3 d3 e3 a2 e2", Z: "b2/2", AA: "b3 ~@4 b3 ~ c#4", AB: "~@5 c#4 ~ b3",
  AC: "~@4 b3 c#4 ~ d4", AD: "~ c#4 ~ b3 ~@4", AE: "~ b3 ~ c#4 ~@4", AF: "b3 c#4 ~ d4 ~ c#4 ~ b3", AG: "~@5 b3 ~ c#4",
  AH: "~@4 b3!2 c#4 d4", AI: "b3!2 c#4 d4 ~ c#4 ~ b3", AJ: "[~@4 b3!2 c#4 d4@4 c#4@5]/2", AK: "f3@3 f3@5",
  AL: "g#3@3 g#3@5", AM: "e4@3 d#4@5", AN: "g4@3 f#4@5", AO: "d3 ~@3", AP: "~ c#3 ~ d3", AQ: "~@2 c#3@3 d3@2 d3",
  AR: "c#3 ~ d3 ~", AS: "c#3@3 d3@2 d3 c#3@2", AT: "~ d3 ~ c#3", AU: "~ d3@2 d3 c#3@2 ~@2", AV: "d3@2 ~@2 b3 c#4@2 c#4",
  AW: "~ a2 d3 e3@2 d3 a2 d2", AX: "c#3 a2 e2 d3@2 a2 e2 a2", AY: "~@2 d4 e4@2 d4@3", AZ: "c#4@2 a3 c#4 d4 e4@3",
  BA: "~@2 f4 ~@3 f4 ~", BB: "f4 g4@3 g4@2 ~@2", BC: "c#4 ~ d4 ~", BD: "c#4@3 d4@2 d4 ~@2", BE: "b4 c#5@2 d5 c#5@2 ~@2",
  BF: "b3 c#4@2 d4 c#4@2 ~@2", BG: "c4@3 c4@5", BH: "c4@3 c4@3 e3@2", BI: "[c4@3 c4@3 c4@8 c4@2]/2", BJ: "~ c4@5 c4@2",
  BK: "~ c4@3 g4@2 ~@2",
})).s("gm_slap_bass_1").gain(0.36)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  ~@8 A B@2 ~ C@3 D E@8 F@8 G@7 H I J@2 K L J@2 K M N O P Q@2 O P O Q O R S@4 T@3 U@2 V@2 W@2 X@2 Y@2 V@2 W@2 X@2 Y@2
  Z@2 AA AB AC AD AE AD AF AG AB AH AD AE AD AI AG AB AJ@2 AK@2 AL@2 AK@2 AL@2 AM@2 AN AO AP AQ AR AS AT AU AV AW AX AY
  AZ BA BB BC BD BE BF BG BH BI BJ BK@8 BL@7 BM BN@3 BO BN@3 BO BP BQ BP BR BQ@2 BP BR BS BQ BP BT BU@3 BV BU BW BX@2
  BY@2 BZ@6 CA@8 CB ~ CC@5 ~ CB ~ CD ~ CE ~ CF ~ CG@3
>`.pickRestart({
  A: "~ e3@3", B: "[~@9 e3 c#3@6, ~@7 f#3@4 ~@5]/2",
  C: "[~ c#3 c#3@2 ~ d3@8 ~@2 c#3@4 ~ b2@8 ~@3 b2@4 ~ a2@4 a2@4 d2@2 d2@2, ~@2 c#3 ~@4 b2 ~@7 a2 ~@8]/3",
  D: "d2!2 f#2!2 e2!2 g2!2", E: "[f#2!2 [a0,a2]@16 [f#0,f#2]@16 [g0,g2]@16 [d1,d3]@14]/8",
  F: "[~ [a0,a2]@8 [f#0,f#2]@8 [g0,g2]@8 [d1,d3]@7]/8", // A F# G D
  G: "[~@2 [a0,a2]@16 [f#0,f#2]@16 [g0,g2]@16 [d0,d2] [d0,d2]@5]/7", H: "[d0,d2] [d0,d2]@7",
  I: "[c1,c3] [b0,b2] [f0,f2]@2 c5 [e0,e2]@3", J: "c5 [e0,e2] [f0,f2]@2 c5 [e0,e2]@3",
  K: "c5 [e0,e2] [f0,f2,c5] [g0,g2,d5]@2 g0 [g1,d5]@2", L: "g0 g#0 [f0,f2]@2 c5 [e0,e2]@3",
  M: "g0 g#0 [a0,a2,a4]@2 [g0,g2]@2 [d1,d3,a4]@2", N: "[g0,g2]@2 [a0,a2,a4]@2 [g0,g2] [d1,d3,a4]@2 [d1,d3,a4]",
  O: "[g0,g2] [g#0,g#2] [a0,a2,a4]@2 [g0,g2]@2 [d1,d3,a4]@2", // G G# A G D5
  P: "[g0,g2]@2 [g0,g2,g5] [a0,a2,a5]@2 [g0,g2,a5] [a0,a2,a5]@2", // G A Gsus2 A
  Q: "[g0,g2] [g#0,g#2] [a0,a2,a4]@2 [g0,g2] [d1,d3,a4]@2 [d1,d3,a4]", // G G# A G D5
  R: "[g0,g2]@2 [g0,g2,g4] [a0,a2,a4]@2 [g0,g2,a4] [a0,a2,a4]@2", // G A Gsus2 A
  S: "[~@2 [a0,a2,f4]@3 f4@3 e4@2 [a0,a2,f4]@3 f4@3 e4@2 [a0,a2,f4]@3 f4@3 e4@2 [f0,f2,c5] [g0,g2] [a0,a2]@2 [g0,g2,d5]@2, ~@5 [g0,g2]@5 ~@3 [g0,g2]@5 ~@3 [g0,g2]@5 ~ d5@3 ~@2]/4", // Dm F5 G A G5 G
  T: "[~@2 [a0,a2,f4]@3 f4@3 e4@2 [a0,a2,f4]@3 f4@3 e4@2 [a0,a2,f4]@3 [g0,g2,f4]@3, ~@5 [g0,g2]@5 ~@3 [g0,g2]@5 ~@6]/3", // Dm G7 G
  U: "[c1,g2,e3]/2", V: "[a0,a2]/2", W: "[f#0,f#2]/2", X: "[g0,g2]/2", Y: "[d0,d2]/2", Z: "[e1,b1,e3]/2",
  AA: "[d1,d3,g4] [d1,d3]!4 [d1,d3,g4] [d1,d3] [d1,d3,a4]", AB: "[d1,d3]!5 [d1,d3,a4] [d1,d3] [d1,d3,g4]",
  AC: "[d1,d3]!4 [d1,d3,g4] [d1,d3,a4] [d1,d3] [d1,d3,a4]", AD: "[d1,d3] [d1,d3,a4] [d1,d3] [d1,d3,g4] [d1,d3]!4",
  AE: "[d1,d3] [d1,d3,g4] [d1,d3] [d1,d3,a4] [d1,d3]!4", // D G5 D D5 D
  AF: "[d1,d3,g4] [d1,d3,a4] [d1,d3] [d1,d3,a4] [d1,d3] [d1,d3,a4] [d1,d3] [d1,d3,g4]", // G5 D5 D D5 D D5 D G5
  AG: "[d1,d3]!5 [d1,d3,g4] [d1,d3] [d1,d3,a4]", AH: "[d1,d3]!4 [d1,d3,g4]!2 [d1,d3,a4]!2",
  AI: "[d1,d3,g4]!2 [d1,d3,a4]!2 [d1,d3] [d1,d3,a4] [d1,d3] [d1,d3,g4]", // G5 D5 D D5 D G5
  AJ: "[[d1,d3]!4 [d1,d3,g4]!2 [d1,d3,a4] [d1,d3,a4]@4 [c#1,c#3,a4]@5]/2", AK: "[a#0,a#2,d4]@3 [a0,a2,c4]@5",
  AL: "[c#1,c#3,f4]@3 [c1,c3,d#4]@5", AM: "[e1,e3,b4]@3 [d#1,d#3,b4]@5", AN: "[g1,g3,d5]@3 [f#1,f#3]@5, ~@3 d5@2 ~@3",
  AO: "[g0,g2]!2 [g0,a2]!2 [g0,b2] [g0,a2] [g0,g2] [g0,d2], b3 ~@3", AP: "g2@2 e2 a2@2 a2@2 a1",
  AQ: "g2 e2 a2 e2 a2 e2 f#2@2", AR: "~ f#2 ~ f#2 ~ f#2!2 d2", AS: "f#2 d2 f#2 d2 g2@2 ~ g2",
  AT: "~ g2 ~ a1 g2 f#2 e2 f#2", AU: "e2 d2!2 d3 d2 d3 ~ d3", AV: "~ d2 d3 c#3 d3 e3 d3 c#3",
  AW: "a1 a2 a1 a2 ~ a2 ~ a1", AX: "a2!5 g#2 f#2@2", AY: "~ f#2 ~ f#2 ~ a1 f#2 c#2", AZ: "f#2 c#2 f#2 d2 g2@2 ~ g2",
  BA: "~ g2 ~ f#2 a2 a1 a2 a1", BB: "a2 a1 d3 c#3 d3 e3 d3 c#3", BC: "b2 a2 b2 a2 g2 f#2 g2 f#2",
  BD: "e2 d2 [a0,a2,a3]@2 [g0,g2]@2 [d1,d3,a3]@2", BE: "[g0,g2]@2 [a0,a2,a3]@2 [g0,g2] [d1,d3,a3]@2 [d1,d3,a3]",
  BF: "[a0,a2,a3] [g0,g2] [d1,d3,a3] [g0,g2]", // A G D5 G
  BG: "[a0,a2,a3]@2 [g0,g2] ~ a3 [d1,d3,a3] [a0,a2,a3]@2, ~@3 [d1,d3]@2 ~@3", // A G D5 A D
  BH: "[g0,g2] [d1,d3,a3] [g0,g2] [a0,a2,a3]", BI: "[g0,g2] [e1,d3,a3]@2 [e1,d3,a3] [a0,a2,a3]@2 [g0,g2]@2",
  BJ: "[d1,d3,a3]@2 [g0,g2]@2 [g2,g4] [e1,a2] ~ [e1,b2,a4], ~@2 g0 ~, ~@5 a4@2 ~", // D5 G A5 Esus4
  BK: "[[g0,a2] [a0,a2]@16 [f#0,f#2]@16 [g0,g2]@16 [d1,d3]@15]/8", // Gsus2 A F# G D
  BL: "[~ [a0,a2]@16 [f#0,f#2]@16 [g0,g2]@16 [d0,d2] [d0,d2]@5 [d0,d2]]/7", BM: "[d0,d2]@6 [c1,c3] [b0,b2]",
  BN: "[f0,f2]@2 c5 [e0,e2]@3 c5 [e0,e2]", BO: "[f0,f2,c5] [g0,g2,d5]@2 g0 [g1,d5]@2 g0 g#0",
  BP: "[a0,a2,a4] [g0,g2] [d1,d3,a4] [g0,g2]", BQ: "[a0,a2,a4]@2 [g0,g2] [d1,d3,a4]@2 [d1,d3,a4] [g0,g2] [g#0,g#2]",
  BR: "[g0,g2,g5] [a0,a2,a5]@2 [g0,g2,a5] [a0,a2,a5]@2 [g0,g2] [g#0,g#2]", // G A Gsus2 A G G#
  BS: "[a0,a2,a4]@2 [g0,g2]@2 [d1,d3,a4]@2 [g0,g2] [g#0,g#2]", // A G D5 G G#
  BT: "[g0,g2,g4] [a0,a2,a4]@2 [g0,g2,a4] [a0,a2,a4]@2 ~@2", BU: "[a0,a2,f4]@3 f4@3 e4@2, ~@3 [g0,g2]@5",
  BV: "[f0,f2,c5] [g0,g2] [a0,a2]@2 [g0,g2,d5]@2 ~@2, ~ d5@3 ~@4", BW: "[a0,a2,f4]@3 [g0,g2]@5, ~@3 f4@3 ~@2",
  BX: "[[a0,a2,f4]@3 [g0,g2,f4]@3 [c1,c3,g4]@8 [a0,a2,f4]@2]/2", BY: "~ f4@3 e4@2 [a0,a2,f4]@2, ~ [g0,g2]@5 ~@2",
  BZ: "[~@2 [g0,g2,f4]@6 [a0,a2]@28 ~@2 g#2@2 a2@10 ~ f#3 ~ f#3 e3@12 ~@4 b2@2 a2@4 a1@20, ~@9 g2 a0@8 f#0@6, ~@25 e3!2 ~@6 b2!2 ~@13, ~@67 c#3@2 c#3@2 ~@25]/6", // G7 A
  CA: "[~@2 [a2,a3]@2 ~@2 [a2,a3]@2 [g2,g3]@2 [g2,g3]@2 [g2,g3] a3@23 a3@4 b2 c#3@25 c#3!3 ~ c#3!2 d3@26 d3@2 c#3@2 b2@2 a2@24, ~@8 g0@32 d0@32 c#3 ~@25 c#3 ~@29, ~@3 a2@6 ~@9 a1@8 ~@6]/8", // A G
  CB: "~@4 a1!2 ~@2", CC: "[~@4 f#3@16 g3@16 d3!2 ~@2]/5", CD: "~@4 f#1!2 ~@2", CE: "~@4 g1!2 ~@2", CF: "~@4 d1!2 ~@2",
  CG: "[~ a1@4 ~]/3",
})).s("gm_electric_bass_finger").gain(0.22)

// other · fretless bass · "SlapBass1"
const fretless_bass = note("<~@105 A B C ~ D E@2 ~ F G H ~@101>".pickRestart({
  A: "a#3!3 a3@2 f3@2 a#3", B: "a#3!3 a3@3 ~ c4", C: "c#4@2 c#4 c4@2 g#3 g#3@2", D: "a#4!2 ~ a4@2 f4@2 f4",
  E: "[a#4!2 ~ a4@2 ~@3 c#5@2 c#5 c5@2 g#4 g#4@2, ~@7 g#4@2 ~@7]/2", F: "e5!3 d#5@2 ~@2 b4", G: "e5!3 d#5 ~ b4 ~@2",
  H: "g5@2 g5 f#5 d5 d5@2 ~",
})).s("gm_lead_8_bass_lead").gain(0.36)

// other · overdriven guitar · "Keyboard"
const overdriven_guitar = note("<~@206 A B@8 C@2>".pickRestart({
  A: "~@2 g4 e4", B: "[a4@2 a3@2 c#4@2 d4 g4@3 f#4@2 g4@2 e4@2]/2", C: "[a4@2 a3@2 c#4@2 d4 g4@3 f#4@2 ~@4]/2",
})).s("gm_overdriven_guitar").gain(0.06)

// other · synth strings 1 · "Intro Synth"
const synth_strings_1 = note("<A@16 B@3 ~@198>".pickRestart({
  A: "[~ a3@8 f#3@8 g3@8 d3@7]/8", B: "[~ a2@8 ~@3]/3",
})).s("gm_synth_strings_1").gain(0.36)

// other · overdriven guitar · "Guitar Solo"
const overdriven_guitar_2 = note("<~@118 A B C D E F G@2 H I J K L M@2 ~@84>".pickRestart({
  A: "c#5 b4 ~ a4 f#4 e4 ~ c#4 b3 a3 ~ f#3 a3@4", B: "a3@2 a3@3 b2 c#3 d3 e3 f#3 ~ g#3 a3 b3 ~ c#4",
  C: "b3 c#4 ~ d4 c#4 ~ d4 ~ e4 ~ d4 ~ e4!2 [e4,f4]@2", D: "~@2 d4 ~ e4 ~@2 f4 ~ e4 ~@2 c6@4",
  E: "~@4 f#4@3 e4 ~@2 d4 ~ c#4@4", F: "~ e4@6 ~@3 [c#4,d4] ~ c#4 ~ f#3 ~",
  G: "[a3@4 c#4 ~ e4@6 ~@2 a3@6 c#4 ~ e4@4 c#4 ~ f#4@2 f#4@2]/2", H: "~@2 f#4@2 ~@2 f#4@2 ~@2 f#4@2 f#4 ~ c#4@2",
  I: "~@2 a3@2 c#4@2 e4@2 a3 b3@3 d4@2 a4@2", J: "~@2 a3 b3@3 d4@2 a4@2 a3 ~@2 d4@2 ~, ~@11 b3@4 ~",
  K: "a4@2 ~@2 f4 f#4@3 a4 ~ d5@4 a4 ~", L: "d5 ~ e5 ~@3 a4 ~ d5 ~ a4 ~@3 e5 ~, ~ f#4 ~ d5", M: "[f#5 a5@7]/2",
})).s("gm_overdriven_guitar").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A ~ A ~ A@2 B C D E@5 F G ~@8 H I H I H J K L M E@2 N D E@2 O P Q R S P Q T@2 P Q T U V W M X Y M Y Z ~ AA@13 AB
  AC AD Z ~ AE G AF AG@3 AH G@2 AF AG@3 AH G@2 AI AJ AA@7 AK AA@2 AL@2 AA AM AN AO AP AF AQ AR AS AT AU AV AW AX AY AZ
  AB BA AB BB AB BC@7 BD BC@4 AH BE BF BG AA@3 BH AA@3 BI BJ BK BL BM BJ BK BN BO BP BK BL BQ BR@2 BH BS BT@3 I BU BV BW
  ~ BX L BY ~@2 BZ ~@2 BX ~ BX ~ CA ~ BX ~ BX ~ CA ~ CA CB CA CB CA I CA I CA CB ~
>`.pickRestart({
  A: "~ x ~@2", B: "~ x!3", C: "x ~ x!6", D: "x!3 ~@2 x ~ x", E: "~ x!2 ~@2 x ~ x", F: "~ x ~@6", G: "~@5 x ~ x",
  H: "~@2 x!2 ~@2 x ~", I: "~@3 x", J: "~@12 x!2 ~@2", K: "~@2 x!2 ~@4", L: "~@4 x ~@2 x", M: "~@2 x ~@2 x ~ x",
  N: "~ x!3 ~ x!2 ~", O: "~ x!3 ~@2 x!2", P: "~@2 x ~@4 x", Q: "~@2 x!3 ~@2 x", R: "~@2 x!2 ~@3 x",
  S: "~@4 x ~@2 x ~ x ~@2 x ~ x ~", T: "~@2 x!2 ~@2 x!2", U: "~@4 x ~ x ~@3 x ~@2 x ~@2", V: "x ~@2 x!2 ~@5 x ~@3 x!2",
  W: "~@4 x ~@5 x ~@3 x!2", X: "~@2 x!3 ~ x ~", Y: "~@2 x ~@2 x ~@2", Z: "x", AA: "x ~@2 x ~ x ~ x",
  AB: "~ x ~ x ~ x ~ x", AC: "~@2 x ~@3 x ~@3 x!2 ~@2 x!2", AD: "~@2 x!2 ~@2 x!3 ~ x ~ x ~ x ~", AE: "x ~@4 x ~ x",
  AF: "~@4 x!2 ~ x", AG: "~ x ~ x ~@4", AH: "x!2 ~ x ~ x ~ x", AI: "~@4 x!4", AJ: "~@3 x ~@4", AK: "x ~@2 x ~@4",
  AL: "x!8", AM: "x ~@2 x ~ x!2 ~", AN: "~@2 x ~@3 x ~@5 x ~ x!2", AO: "~ x ~ x!2 ~@2 x", AP: "~ x ~@3 x ~ x",
  AQ: "~@2 x!2 ~ x ~@2", AR: "x ~@2 x ~ x ~@2", AS: "x!2 ~ x ~@2 x!2", AT: "~@2 x ~@3 x ~@5 x ~@2 x",
  AU: "~ x ~@2 x ~ x ~ x ~@5 x ~", AV: "~@2 x ~@5 x ~@2 x ~@2 x ~", AW: "~ x!7", AX: "x!3 ~@5", AY: "~@3 x ~ x ~ x",
  AZ: "~@2 x ~@3 x ~@3 x ~@4 x", BA: "~@2 x ~@3 x ~@4 x ~@2 x ~", BB: "~@2 x ~@4 x ~@2 x ~@3 x ~",
  BC: "x ~@2 x ~@2 x ~@3 x!2 ~@4", BD: "x ~@2 x ~@2 x ~@5 x ~@3", BE: "~@2 x!2 ~@2 x!3 ~ x!2 ~@2 x!2",
  BF: "x ~ x!2 ~@2 x!3 ~ x!2 ~@2 x!2", BG: "~@2 x!2 ~@2 x!2 ~@2 x!3 ~ x ~", BH: "x!2 ~ x!2 ~@3",
  BI: "x ~ x ~@4 x ~ x ~ x ~ x ~ x", BJ: "x ~@4 x ~@2", BK: "x!3 ~@2 x ~@2", BL: "x!2 ~@3 x ~@2",
  BM: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", BN: "x!2 ~@2 x!2 ~@2", BO: "x ~ x ~@3 x ~@2 x ~ x ~ x ~ x", BP: "~@5 x ~@2",
  BQ: "x ~ x ~@3 x ~@2 x ~@2 x ~@2 x", BR: "x ~@5 x ~@3 x!2 ~@4", BS: "x!3 ~ x ~@3", BT: "x ~@2 x ~@2 x ~",
  BU: "~ x ~@2 x ~ x ~", BV: "~ x!3 ~@2 x ~", BW: "~ x ~@2 x ~@3", BX: "~ x", BY: "~ x!2 ~", BZ: "~@8 x!2 ~ x!2 ~@2 x",
  CA: "~@4 x!2 ~@2", CB: "~@3 x ~@2 x ~",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A B@5 C ~ D ~@7 E ~ E ~ E ~ E F B@3 G A B@2 H I J B@2 A J B H B J B K L B@2 M N O P ~@2 Q@7 R Q@5 S T U ~@20 V
  Q@2 W Q@3 X V Q Y@2 Q X B Z AA AB AC Q AD B Z Q AE D AE AF@6 Q@7 AG Q@5 AH AI AJ Q@2 AK AL Q@3 AM Q AN Q@3 AN Q AA Q
  AN AO AP Q@2 AQ A X AR ~ AS AT D ~@7 AU AV ~@14 D@4 ~ D@5
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x!2 ~@2", D: "x", E: "~@11 x!2 ~@3", F: "~@5 x!2 ~@5 x ~@3", G: "x ~@7 x!2 ~@4 x!2",
  H: "x ~@3 x!2 ~@2", I: "x!2 ~@2 x ~@3", J: "x ~@4 x ~@2", K: "x ~@7 x ~@3 x ~@2 x", L: "~ x ~@6 x ~@7", M: "x!3 ~@13",
  N: "~ x ~@2 x ~@3", O: "x!3 ~@5 x ~@7", P: "x ~ x!2 ~@12", Q: "~ x ~ x", R: "~@4 x ~@3 x!2 ~@2 x!2 ~@2",
  S: "~@4 x ~@3 x!2 ~@2 x ~@3", T: "x!2 ~@2 x ~@3 x!2 ~@2 x!2 ~@2", U: "x!2 ~@2 x!2 ~@10", V: "~ x!5 ~@6 x ~@3",
  W: "~@4 x ~@7 x ~ x!2", X: "~ x ~@2", Y: "x!8", Z: "x ~@2 x", AA: "~ x!2 ~", AB: "x ~ x!2 ~@2 x ~",
  AC: "x!2 ~@2 x ~ x ~", AD: "~@2 x ~ x!2 ~@2", AE: "~ x!3", AF: "x!4", AG: "~@4 x ~@3 x!2 ~@6",
  AH: "~ x ~@2 x ~@4 x ~@2 x ~@3", AI: "~ x ~@2 x ~@4 x ~@2 x!2 ~@2", AJ: "x!2 ~@2 x!2 ~@2 x!2 ~@6",
  AK: "~@4 x ~@7 x ~@2 x", AL: "~@4 x!2 ~@4 x!2 ~@4", AM: "~@5 x!2 ~ x ~ x ~ x ~ x ~", AN: "~@3 x ~@2 x ~",
  AO: "~@2 x!2 ~@2 x!2", AP: "~@4 x ~@3 x ~@2 x ~ x ~@2", AQ: "~@4 x ~@5 x!6", AR: "~@3 x!2 ~@11",
  AS: "~@4 x!5 ~ x ~@4 x", AT: "x ~@14 x", AU: "~@10 x!3 ~ x!2", AV: "x!5 ~@11",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@23 A ~@8 B C B D B E B ~@25 F ~@39 G ~@7 H ~@18 I ~@13 D ~@11 H ~@19 J ~@3 K L M ~@27 N ~@5
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "~@2 x!2 ~@4", C: "~@2 x!2", D: "~@3 x", E: "~@11 x!2 ~@3", F: "~ x ~@2", G: "~@14 x!2",
  H: "~@12 x!4", I: "x!4 ~@12", J: "~@7 x", K: "~@9 x ~ x ~@4", L: "~@7 x ~ x ~@6", M: "~@4 x ~ x ~@3 x!2 ~@4",
  N: "~@3 x ~@12",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A@7 B ~@16 A ~@37 C D C D C D C ~ C D C D E F@2 G ~@2 H I J K@3 L I@2 M N K@2 O I@2 P ~ Q R@6 S Q R T ~ C D U V C
  W ~ C X C Y Z T ~@39 AA ~@13 AB AC AD@7 AE AD@13 W ~@10
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2", B: "~@4 x ~ x ~@6 x ~ x", C: "x!8", D: "x!3 ~ x ~ x!2", E: "x!3 ~ x ~ x ~", F: "x!4",
  G: "x!2 ~@2", H: "~ x!9 ~ x!3 ~ x", I: "x!10 ~ x!3 ~ x", J: "x!8 ~ x ~ x!5", K: "x!2 ~ x!3 ~ x!9",
  L: "~ x ~ x!3 ~ x!3 ~ x!3 ~ x", M: "x!8 ~ x ~ x!3 ~ x", N: "x!2 ~ x!13", O: "~ x ~ x!3 ~ x!3 ~ x!4 ~", P: "x!14 ~@2",
  Q: "~@8 x!2 ~@3 x!3", R: "x!2 ~@2 x!2 ~@2 x!2 ~@3 x!3", S: "x!2 ~@2 x!2 ~@10", T: "x", U: "~ x!7", V: "~ x!3 ~ x!3",
  W: "x!2 ~@6", X: "x!2 ~ x ~@2 x!2", Y: "~ x ~ x ~ x!3", Z: "x!7 ~", AA: "~@11 x ~ x ~ x", AB: "~@13 x!3",
  AC: "x!2 ~ x!6 ~ x ~@5", AD: "x!2 ~@2 x!2 ~@2", AE: "~@4 x!2 ~@2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@22 A B ~@9 C ~ D ~ E ~@26 F ~@39 G ~@7 H ~@17 I ~@14 J ~@31 K L M ~ N O P ~@27 Q ~@5
>`.pickRestart({
  A: "~@5 x ~ x", B: "~@2 x!2 ~@4", C: "~@6 x ~@4 x ~@4", D: "~@7 x!2 ~ x!2 ~@4", E: "~@8 x!2 ~@6", F: "~@3 x ~@12",
  G: "~@6 x ~@2 x!5 ~@2", H: "~@8 x!4 ~@4", I: "~@4 x!12", J: "~@10 x!2 ~@4", K: "~@11 x ~@4", L: "~@12 x!4",
  M: "~@6 x ~ x!2 ~ x ~ x!2 ~", N: "~@3 x", O: "~ x!2 ~@5", P: "~ x ~@6", Q: "x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A B@7 C D ~@14 A E F ~ F ~ F ~ G H ~@3 I ~@2 J K L@2 E L@8 E ~@2 M N@3 E ~ E O ~ O ~ O ~ P E O ~ O Q R@2 S E ~ T U
  V W@3 X U@2 V W@3 X U@2 Y Z AA AB@6 AC AA AB AD@2 E AE E AF ~ AG AH ~ AI ~ AJ Y AK AL K ~ AJ AM AN AO T E ~@6 AP E
  ~@15 L@4 K L@2 AJ L@3 AQ ~@2 A ~ AR AS ~ AT AU AV AM AW@7 AX AW@13 AY Z ~ Z ~ Z ~ Z ~@3
// … 45 more lines

More by Rush