Strudelify
Time and Motion cover art

1996 · Test for Echo

Time and Motion

Rush

KeyD minorTempo140 bpm
0:00/0:00
// Time and Motion — Rush
// 140 bpm, 3/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/4 at bar 1, 11/4 at bar 5, 3/4 at bar 16, 11/4 at bar 96, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 226 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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.

// chords · overdriven guitar · "Guitar1"
const overdriven_guitar = note(`<
  A B C D E F G F H@3 I@5 J K J K J K J K L M L M J K J K J K J K J K J K L M L M L M L M N O P O J K J K Q R S R J K J
  K J K J K J K J K L M L M L M L M N O P O J K J K Q R S R J K J K F G F H@3 I@5 ~@16 T R S U J K J K A B C V ~@2 W C D
  E ~@3 X E A Y ~@3 A B C V ~@2 W C D E ~@3 X E A B C Z@4 F G AA@5 AB@8 AC@8 AD@6 AE@2 AF@6 AG@2 AH@6 AG@2 AI@6
>`.pickRestart({
  A: "[e2,b2,e3]@3 ~@2 [e2,b2,e3]@3 [e2,b2,e3]@3 ~@2 [e2,b2,e3]@3", // E5
  B: "[e2,b2,e3]@3 ~@2 [e2,b2,e3]@3 ~@3 [e2,b2,e3]@3 ~@2", // E5
  C: "[e2,b2,e3]@3 [e2,b2,e3]@3 ~@2 [e2,b2,e3]@3 [e2,b2,e3]@3 ~@2", // E5
  D: "[e2,b2,e3]@3 ~@2 [e2,b2,e3]@3 ~@3 [e2,b2,e3]@2 [e2,b2,e3]@3", // E5
  E: "~@3 [e2,b2,e3]@2 [e2,b2,e3]@3 ~@3 [e2,b2,e3]@3 ~@2", F: "eb3 gb3", G: "bb2 db3",
  H: "[bb2@5 db3@5 ~ eb3@8 gb3@8 bb2@8 db3@8 eb3@5]/3",
  I: "[gb3@5 bb2@8 db3@8 eb3@8 gb3@8 bb2@8 db3@8 eb3@8 gb3@8 bb2@5 ~ db3@5]/5",
  J: "~@13 g3@3, d3 db3, ~@3 f3@7 ~ f3@5, ~@5 g3@7 ~@4",
  K: "~@8 d3@3 ~@2 g3@3, d3@8 ~@3 [db3,f3]@5, ~@3 f3@7 ~@6, ~@5 g3@7 ~@4", // Db
  L: "~@13 g3@3, f3 e3, ~@3 ab3@7 ~ ab3@5, ~@5 g3@7 ~@4",
  M: "~@8 f3@3 ~@2 g3@3, f3@8 ~@3 [e3,ab3]@5, ~@3 ab3@7 ~@6, ~@5 g3@7 ~@4", N: "[g2,d3,g3]!2",
  O: "[g2,d3,g3]@5 [f2,c3,f3]@5 ~ [g2,d3,g3]@5", P: "[f2,c3,f3]!2", Q: "[g3,d4,g4]@8 [g3,d4,g4]@5 [f3,c4,f4]@3",
  R: "[g3,d4,g4]@5 [f3,c4,f4]@5 ~ [g3,d4,g4]@5", S: "[f3,c4,f4]!2", T: "[g3,d4,g4]!2", U: "[f3,c4,f4]",
  V: "[e2,b2,e3]@3 ~@13", W: "~@11 [e2,b2,e3]@3 ~@2", X: "~@5 [e2,b2,e3]@3 ~@3 [e2,b2,e3]@2 [e2,b2,e3]@3",
  Y: "[e2,b2,e3]@3 ~@2 [e2,b2,e3]@3 ~@8", Z: "[[e2,b2,e3]@3 ~@2 eb3@8 gb3@8 bb2@8 db3@8 eb3@8 gb3@8 bb2@5 ~ db3@5]/4",
  AA: "[eb3@5 gb3@5 ~ bb2@8 db3@8 eb3@8 gb3@8 bb2@8 db3@8 eb3@8 gb3@8 bb2@5]/5",
  AB: "[db3@5 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 d3@3, ~@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 d3@8 db3@8 d3@8 ~@3, ~@8 f3@7 ~ f3@5 ~@3 f3@7 ~@9 f3@7 ~ f3@5 ~@3 f3@7 ~@9 f3@7 ~ f3@5 ~@3 f3@7 ~@9 f3@7 ~ f3@5 ~@3 f3@7 ~, ~@11 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@5]/8", // Db
  AC: "[~@3 g3@2 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 f3@3 ~@3 g3@2 ~@14 g3@2 ~@8 f3@3, [db3,f3]@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 ~@6 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@5, ~@8 f3@7 ~ f3@5 ~@3 f3@7 ~@9 f3@7 ~ f3@5 ~@3 f3@7 ~@6 f3@8 e3@8 f3@8 ~@3 [e3,ab3]@5 f3@8 e3@8 f3@8 ~@3, ~@11 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@6 ab3@7 ~ ab3@5 ~@3 ab3@7 ~@9 ab3@7 ~ ab3@5 ~@3 ab3@7 ~]/8", // Db E
  AD: "[~@3 g3@2 ~@14 g3@2 ~@8 f3@3 ~@3 g3@2 ~@14 g3@2 ~@8 f3@3 ~@3 g3@2 [g2,d3,g3]@8 [g2,d3,g3]@8 [g2,d3,g3]@5 ~ [f2,c3,f3]@5, [e3,ab3]@5 f3@8 e3@8 f3@8 ~@3 [e3,ab3]@5 f3@8 e3@8 f3@8 ~@3 [e3,ab3]@5 ~@27, ~@8 ab3@7 ~ ab3@5 ~@3 ab3@7 ~@9 ab3@7 ~ ab3@5 ~@3 ab3@7 ~@33, ~@11 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@30]/6", // G5 F5 E
  AE: "[[g2,d3,g3]@5 [f2,c3,f3]@8 [f2,c3,f3]@8 [g2,d3,g3]@5 ~ [f2,c3,f3]@5]/2", // G5 F5 G5 F5
  AF: "[[g2,d3,g3]@5 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 [g3,d4,g4]@8 [g3,d4,g4]@5 ~ [f3,c4,f4]@2 [g3,d4,g4]@5 ~ [f3,c4,f4]@5, ~@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 ~@27, ~@8 f3@7 ~ f3@5 ~@3 f3@7 ~@9 f3@7 ~ f3@5 ~@3 f3@7 ~@33, ~@11 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@30]/6", // G5 F5 G5 F5 Db
  AG: "[[g3,d4,g4]@5 [f3,c4,f4]@8 [f3,c4,f4]@8 [g3,d4,g4]@5 ~ [f3,c4,f4]@5]/2", // G5 F5 G5 F5
  AH: "[[g3,d4,g4]@5 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 ~@14 g3@2 ~@8 d3@3 ~@3 g3@2 [g3,d4,g4]@8 [g3,d4,g4]@5 ~ [f3,c4,f4]@2 [g3,d4,g4]@5 ~ [f3,c4,f4]@5, ~@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 ~@27, ~@8 f3@7 ~ f3@5 ~@3 f3@7 ~@9 f3@7 ~ f3@5 ~@3 f3@7 ~@33, ~@11 g3@7 ~@9 g3@7 ~@9 g3@7 ~@9 g3@7 ~@30]/6", // G5 F5 G5 F5 Db
  AI: "[[g3,d4,g4]@5 ~@14 g3@2 ~@9 d3@2 ~@3 g3@3 ~@14 g3@3 [d3,f3,g3]@26 ~@15, ~@5 d3@8 db3@8 d3@8 ~@3 [db3,f3]@5 ~ d3@8 db3@8 ~@42, ~@8 f3@8 f3@5 ~@3 f3@8 ~@9 f3@8 f3@5 ~@42, ~@11 g3@8 ~@8 g3@8 ~@8 g3@8 ~@45]/6", // G5 G7 Db
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C D E F G F H@3 I@5 J K J L J K J K M N M O J L J P J L J P J L J Q M N M R M N M O S T U T J K J P V W X W J K Y
  Z J P J L J P J K M N M AA M N M O S T AB AC J L J P V W X W J L J AD F G F H@3 I@5 J AE J AF J AG J AD AH AI M AJ J
  AK J AL S T U AM J K J P A B C AN AO AP AQ C D E AP AR AS AT E A AU AV ~@2 A B C AN AO AP AW C D E ~@2 AX AY E A B C
  AZ BA BB BC BD BE BF BG BH BG BI BJ@2 BK@2 BL@2 BM@2 BN@2 BO@2 BP@2 BQ@2 BR@2 BS@2 BT@2 BU@2 BV@2 BW@2 BX@2 BY@4 BZ@2
  CA@2 CB@2 CC@2 CD@2 ~@2
>`.pickRestart({
  A: "e1@3 ~@2 e1@3 e1@3 ~@2 e1@3", B: "e1@3 ~@2 e1@3 ~@3 e1@3 ~@2", C: "e1@3 e1@3 ~@2 e1@3 e1@3 ~@2",
  D: "e1@3 ~@2 e1@3 ~@3 e1@2 e1@3", E: "~@3 e1@2 e1@3 ~@3 e1@3 ~@2", F: "eb2 gb2", G: "bb1 db2",
  H: "[bb1@5 db2@5 ~ eb2@8 gb2@8 bb1@8 db2@8 eb2@5]/3",
  I: "[gb2@5 bb1@8 db2@8 eb2@8 gb2@8 bb1@8 db2@8 eb2@8 gb2@8 bb1@5 ~ db2@5]/5", J: "d2@3 a1@2 d2@3 db2@8",
  K: "d2@3 a1@2 d2@3 a1@3 db2@2 a1@3", L: "d2@3 a1@2 d2@3 a1@3 f2@5, ~@11 e2 ~@4", M: "f2@3 c2@2 f2@3 e2@8",
  N: "f2@3 c2@2 f2@3 c2@3 ab2@5, ~@11 g2 ~@4", O: "f2@3 c2@2 f2@3 c2@3 e2@2 c2@3", P: "d2@3 e1@2 f1@3 g1@3 a1@2 c2@3",
  Q: "d2@3 e2@2 f2@3 e2@3 d2@2 e2@3", R: "f2@3 ~@2 bb2@3 ab2@3 f2@2 ab2@3", S: "g2@8 g2@5 f2@3", T: "g2@5 f2@5 ~ g2@5",
  U: "f2!2", V: "g1@8 g1@5 f1@3", W: "g1@5 f1@5 ~ g1@5", X: "f1!2", Y: "d2@3 a1@2 d2@3 db2@5 d2@3",
  Z: "f2 g2@2 f2@2 e2@3 f2@3 d2@2 e2@3", AA: "f2@3 ~@2 bb2@3 ab2@3 c3@5", AB: "f2!2 ~ f2@5 f2@8",
  AC: "g2!2 ~ g2@2 f2@5 ~ g2@5", AD: "a2@3 a2!2 a2@3 a2!2 ~ a2@5", AE: "d2@3 a1@2 d2@4 a2!2 a2@5",
  AF: "d2@3 e2@2 f2@5 ~ f2@5", AG: "d2@3 e1@2 f1@3 e1@3 f1@2 g1@3", AH: "f2@3 f2@2 f2@3 e2@8",
  AI: "f2@3 a2@2 b2@3 c3@3 b2@2 a2@3", AJ: "ab2@3 ab2!2 ab2@3 ab2!2 ~ ab2@5", AK: "d2@3 e1@2 f1@3 e1@3 f1@2 e1@3",
  AL: "f2!2 ~ f2@2 f2 ~@2 f2!2 ~ f2@5", AM: "g2@8 f2@2 ~ g2@5", AN: "e1@3 ~@2 d2@3 a2@3 d2@3 ~@2",
  AO: "~@5 d2@3 a2@3 ~@5", AP: "d2@3 a2@2 d2@3 ~@8", AQ: "d2@3 a2@3 ~@5 e1@3 ~@2", AR: "d2@3 a2@3 ~@5 d2@2 a2@3",
  AS: "d2@3 ~@8 d2@2 a2@3", AT: "~@5 e1@3 ~@3 e1@2 e1@3", AU: "e1@3 ~@2 e1@3 ~@3 d2@2 e2@3", AV: "d2@3 ~@8 d2@2 e2@3",
  AW: "d2@3 c2@3 ~@5 e1@3 ~@2", AX: "~@11 b2@5", AY: "a2@5 e1@3 ~@3 e1@2 e1@3",
  AZ: "e1@3 ~@2 eb2@3 eb2!2 ~ eb2@2 gb2@3", BA: "gb2!2 ~ gb2@2 bb1@3 bb1!2 ~ bb1@2 db2@3",
  BB: "db2!2 ~ db2@2 eb2@3 eb2!2 ~ eb2@2 gb2@3", BC: "gb2!2 ~ gb2@2 bb1 ~ bb1 bb1@3 db2!2 db2@3",
  BD: "eb2@3 eb2!2 eb2@3 gb2@3 gb2!2 gb2@3", BE: "bb1@3 bb1!2 bb1@3 db2@3 db2!2 db2@3",
  BF: "eb2!2 ~ eb2@2 gb2 ~ gb2 gb2@3 bb1@2 bb1 ~ bb1", BG: "bb1@3 db2@2 db2 ~ db2 db2@3 eb2@2 eb2 ~ eb2",
  BH: "eb2@3 gb2@2 gb2 ~ gb2 gb2@3 bb1@2 bb1 ~ bb1", BI: "eb2@3 gb2@2 gb2 ~ gb2 gb2@3 bb1!2 bb1@3",
  BJ: "[db2!2 ~ db2@2 d2@3 a1@3 d2@2 db2@8 d2@3 a1@3 d2@2 a1@3]/2",
  BK: "[db2@3 a1@2 d2@3 a1@3 d2@2 db2@8 f3 ~ f3!3 ~ f3!3 ~ f3]/2",
  BL: "[[f3,a3]@5 d2@3 a1@3 d2@2 db2@8 d2@3 a1@3 d2@2 a1@3]/2", // F
  BM: "[db2@2 ~ a1@2 d2@3 a1@3 d2@2 db2@8 d2@3 e1@3 f1@2 e1@3]/2",
  BN: "[a1@3 c2@2 d2@3 a1@3 d2@2 db2@8 d2@3 a1@3 d2@2 a1@3]/2",
  BO: "[db2@2 ~ a1@2 d2@3 a1@3 d2@2 db2@8 f2@3 f2!2 ~ f2@2 f2 ~ f2]/2",
  BP: "[a2@5 f2@3 c2@3 f2@2 e2@8 f2@3 c2@3 f2@2 c2@3]/2",
  BQ: "[~@3 ab2@2 f2@3 c2@3 f2@2 e2@8 f2@3 e2@3 ab2@2 ab2 ~ ab2]/2",
  BR: "[ab2@3 c3@2 f2@3 c2@3 f2@2 e2@8 f2@3 c2@3 f2@2 g2@3]/2",
  BS: "[f2@2 ~ ab2@2 f2@3 c2@3 f2@2 e2@8 ab2@3 c2@3 g2@2 c2@3]/2", BT: "[f2@3 e2@2 g2@8 g2@5 ~ f2@2 g2@5 ~ f2@5]/2",
  BU: "[g2@5 f2@3 f2!2 ~ f2@2 e2@8 f2@3 e2@3 f2@2 e2@3]/2",
  BV: "[f2@3 g2@2 d2@3 a1@3 d2@2 db2@8 d2@3 e1@3 f1@2 e1@3]/2",
  BW: "[f1@3 a1@2 d2@3 a1@3 d2@2 db2@8 d2@3 f3@3 f2@2 f2@3]/2", BX: "[f3@3 f2@2 g2@8 g2@5 ~ f2@2 g2@5 ~ f2@5]/2",
  BY: "[g2@5 f2@8 f2@8 f2@8 f2@8 d2@3 a1@3 d2@2 db2@8 f2@3 f2!2 ~ f2@2 f2 ~ f2]/4",
  BZ: "[f2@5 d2@3 a1@3 d2@2 db2@8 d2@3 a2!2 ~ a2@2 a2 ~ a2]/2", CA: "[a2@5 g1@8 g1@5 ~ f1@2 g1@5 ~ f1@5]/2",
  CB: "[g1@5 f1@8 f1@8 g1@5 ~ f1@5]/2", CC: "[g1@5 d2@3 a1@3 d2@2 db2@8 d2@3 a1@3 d2@3 a1@2]/2",
  CD: "[db2@3 f2@3 d2@3 d2@2 d2@3 db2@5 ~ d2@3 ~@9]/2",
})).s("gm_electric_bass_pick").gain(0.8)

// bass · electric bass pick · "Bass" · soft notes
const bass_soft = note(`<
  ~@43 A ~@31 A ~@58 B C D E ~@3 D E F G ~@3 F H I ~@3 B C D E ~@3 J K L ~@30 M ~@28 N@3
>`.pickRestart({
  A: "~@3 ab2@3 ~@10", B: "~@13 c2@3", C: "e2@3 c2@3 ~@5 d2@5", D: "~@8 c2@3 e2@2 c2@3", E: "~@5 d2@5 ~@6",
  F: "~@3 c2@2 e2@3 c2@3 ~@5", G: "d2@5 ~@11", H: "d2@5 d2@3 a2@3 g2@2 a2@3", I: "b2@3 a2@2 b2@3 g2@3 d2@5",
  J: "d2@3 a2@2 c3@3 f3@3 c3@2 f3@3", K: "d3@3 c3@2 d3@5 ~ c3@2 b2@3", L: "a2@3 g2@5 a2@3 ~@5", M: "g2@3 ~@13",
  N: "[~@7 d2@26 ~@15]/3",
})).s("gm_electric_bass_pick").gain(0.48)

// other · pizzicato strings · "Accents2"
const pizzicato_strings = note(`<
  ~@7 A B C A B D A B E ~@82 A B C A B D A B E ~@64 F G H I G J K G L M ~@45
>`.pickRestart({
  A: "eb5@3 f5@2 gb5@3 f5@3 eb5@2 ab5@3", B: "gb5@3 f5@2 eb5@3 f5@3 gb5@2 f5@3",
  C: "eb5@3 gb5@2 eb5@3 bb5@3 eb5@2 f5@3", D: "eb5@3 ab5@2 eb5@3 bb5@3 eb5@2 db6@3",
  E: "eb5@3 ab5@2 eb5@3 bb5@3 eb5@2 gb5@3", F: "~@5 eb5@3 f5@3 gb5@2 f5@3", G: "eb5@3 ab5@2 gb5@3 f5@3 eb5@2 f5@3",
  H: "gb5@3 f5@2 eb5@3 gb5@3 eb5@2 bb5@3", I: "eb5@3 f5@2 eb5@3 f5@3 gb5@2 f5@3",
  J: "gb5@2 f5@3 eb5@3 ab5@3 eb5@2 bb5@3", K: "eb5@3 db6@2 eb5@3 f5@3 gb5@2 f5@3",
  L: "gb5@3 f5@2 eb5@3 ab5@3 eb5@2 bb5@3", M: "eb5@3 gb5@3 ~@10",
})).s("gm_pizzicato_strings").gain(0.3)

// chords · acoustic guitar steel · "Clean Guitar"
const acoustic_guitar_steel = note("<~@134 A@2 B@2 ~@3 C@4 ~@2 D@4 ~@3 A@2 E@2 ~@3 C@4 ~@61>".pickRestart({
  A: "[~@13 [b3,b4]@18 ~, ~@5 [d3,d4]@26 ~, ~@8 [f3,f4]@23 ~, ~@11 [c4,c5]@21]/2", // B D F C
  B: "[~@16 [f3,f4]@11 ~@5, [d3,ab3,d4]@21 ~@11, ~@3 [f3,f4]@13 ~@16, ~@5 [c4,c5]@7 ~ [c4,c5]@13 ~@6, ~@8 [b3,b4]@19 ~@5]/2", // F Ddim F C B
  C: "[~@8 [b3,b4]@18 ~@17 [f3,f4]@11 ~@10, [d3,d4]@26 ~ [d3,d4]@21 ~@16, ~@3 [f3,f4]@23 ~@3 [f3,f4]@13 ~@22, ~@5 [c4,c5]@21 ~@6 [c4,c5]@7 ~ [c4,c5]@13 ~@11, ~@35 [b3,b4]@19 ~@10]/4", // B F D F C B
  D: "[~@19 [b3,b4]@18 ~@16 [f3,f4]@11, ~@11 [d3,d4]@26 [d3,d4]@21 ~@6, ~@13 [f3,f4]@23 ~@4 [f3,f4]@13 ~@11, ~@16 [c4,c5]@21 ~@6 [c4,c5]@7 ~ [c4,c5]@13, ~@45 [b3,b4]@19]/4", // B F D F C B
  E: "[~@16 [f3,f4]@11 ~@5, [d3,d4]@21 ~@11, ~@3 [f3,f4]@13 ~@16, ~@5 [c4,c5]@7 ~ [c4,c5]@13 ~@6, ~@8 [b3,b4]@19 ~@5]/2", // F D F C B
})).s("gm_acoustic_guitar_steel").gain(0.64)

// other · pad warm · "Synth"
const pad_warm = note("<~@15 A@8 ~ B@8 ~@130 C@6 ~@58>".pickRestart({
  A: "[~@3 d5@29]/8", B: "[~@5 f5@62 d5@61]/8", C: "[~@47 eb5@45 ~@4, ~ ab5@16 ~@15]/6",
})).s("gm_pad_warm").gain(0.64)

// other · distortion guitar · "Lead Guitar"
const distortion_guitar = note("<~@106 A@2 B C D E F G H I@2 J ~ K L M N ~@103>".pickRestart({
  A: "[~@7 [c4,f4]@9, ~@7 a4@8 ~]/2", B: "c4@3 d4@2 a4@3 d4@3 g4@2 d4@3", C: "f4@5 d4 ~ c4 bb3@3 g3@2 a3@3",
  D: "[c3,c4]@11 g4@3 g4@2", E: "d5@3 g3@11 ~@2", F: "b5@3 ~@10 f4@3, ~@3 d3@11 ~@2, ~@3 c4",
  G: "d4@4 d4 d4@4 d4!3 g4 d4@3", H: "d4@4 d4 [d3,d4]@4 [d3,d4]!2 [d3,d4]@2 [d3,d4]@3",
  I: "[~@5 a3@5 ~@5 f4@14 ~@3, f4@15 ~@17]/2", J: "ab4@4 f4 ~@11", K: "[a4,d5]",
  L: "[d4,eb4] [f4,gb4] [g4,ab4,a4] [bb4,b4,c5] db5 [d5,f5] [bb4,b4,c5] [g4,a4] [bb4,b4,c5] d5 f5 [d4,eb4] [f4,gb4,g4] [ab4,a4,bb4] [b4,c5,db5] d5", // Ebmaj7 Gbmaj7 Dm Gsus2 Ebmaj7
  M: "[bb3,b3,f5] [c4,db4] ~@3 bb3 [b3,c4,db4] d4@4 ~@4 c3, ~ d4@4 ~@11", N: "d3@3 ~@2 d3 ~@2 d3 ~@2 d3@5",
})).s("gm_distortion_guitar").gain(0.48)

// other · distortion guitar · "Lead Guitar" · soft notes · Dbsus2 Emaj7
const distortion_guitar_soft = note(`<
  ~@115
  [~@11 a3@4 ~]
  ~@4
  [~ e4 ~@2 eb5 e5 ~ ab4 ~ [db5,eb5] e5 e4 ~@3 [eb5,e5]]
  ~@105
>`).s("gm_distortion_guitar").gain(0.24)

// chords · guitar harmonics · "Lead Guitar" · Emaj7 Gbmaj7
const guitar_harmonics = note(`<
  ~@117
  [~@5 ab4@3 bb4@3 ab4@2 g4@3]
  [g4@4 [eb4,e4] [f4,gb4] ~@3 eb4 [e4,f4,gb4] g4@5, ~@5 g4@4 ~@7]
  ~@2
  [~@11 a4@3 ~@2]
  [~@3 bb4@3 ~ d4 ~ d4 ~@6]
  ~@103
>`).s("gm_guitar_harmonics").gain(0.48)

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

// drums · snare
const snare = s("sd").struct(`<
  A B C D E ~@11 E@7 F ~ G ~ H ~ G ~ G ~ G ~ H ~ G ~ G ~ G ~ G ~ G ~ I ~ G ~ J E@2 ~ K B G B L ~ G M N ~ G ~ G ~ G ~ J ~
  G ~ H ~ G ~ O ~ G ~ J ~ G ~ P ~ G ~ J ~ G ~ J ~@11 E@7 Q ~ G ~ P ~ G ~ R ~ G ~ J ~ G ~ G A B C J ~@2 B C D E ~@3 D E A
  B ~@2 E A B C J ~@2 B C D E ~@3 D E A S T N ~@10 E B G B G B G B G B G U V B G B G B G W G B G B G B G B G B J ~ E B G
  W V B G X E B Y Z ~@2
>`.pickRestart({
  A: "~ x", B: "~@5 x ~@10", C: "~@3 x ~@12", D: "x ~@12 x ~@2", E: "~@11 x ~@4", F: "~@11 x ~ x ~ x",
  G: "x ~@10 x ~@4", H: "x ~@10 x ~ x ~ x", I: "x ~@10 x!2 ~@3", J: "x", K: "x ~@2 x!3 ~@2 x!2 ~ x ~ x ~ x",
  L: "x ~@2 x!2 ~@6 x ~@4", M: "~@13 x ~@2", N: "x!2 ~@14", O: "x ~@4 x ~ x ~@8", P: "x ~@4 x ~@5 x ~@4",
  Q: "~@11 x!3 ~ x", R: "x!2", S: "x ~@4 x ~@10", T: "~@3 x ~@7 x!2 ~@3", U: "~@5 x ~@2 x!2 ~ x!3 ~ x",
  V: "x!2 ~ x!2 ~@6 x ~@4", W: "~@5 x ~@5 x ~@4", X: "~@5 x ~@5 x!3 ~ x", Y: "x ~@5 x!2 ~@8", Z: "~@7 x ~@8",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~ B ~@130 C D@2 E ~@3 D@3 ~@3 F D@2 G ~@3 C D@2 E ~@3 D@3 ~ H ~@49 I ~@10
>`.pickRestart({
  A: "~@8 x!3 ~@5", B: "~@3 x!3 ~@10", C: "~@5 x ~@5 x ~@4", D: "x ~@4 x ~@5 x ~@4", E: "x", F: "~@11 x ~@4",
  G: "x ~@4 x ~@10", H: "~@13 x!3", I: "~@6 x!5 ~ x!4",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@39 A ~@23 B ~@7 C ~@7 D ~@7 E ~@7 F ~@26 G ~@76 H I ~@21 J K ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@8 x ~@2 x ~ x ~@2", C: "~@5 x ~@2 x!2 ~ x ~ x ~@2", D: "~@11 x!3 ~ x", E: "~@9 x ~@3 x ~ x",
  F: "~@11 x ~ x ~@2", G: "~@4 x!2 ~ x ~@3 x!3 ~ x", H: "~@7 x!3 ~@2 x!2 ~ x", I: "~ x ~ x!2 ~@11", J: "~@7 x",
  K: "~ x ~@2 x ~@11",
// … 50 more lines

More by Rush