Strudelify
KeyD majorTempo126 bpm
0:00/0:00
// Do Ya — Electric Light Orchestra
// 126 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 25, 4/4 at bar 25) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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 · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  A B C@6 D ~@2 E F G H I J@2 K@6 ~@2 L@7 M N@2 O P@2 Q R@6 ~ S T@8 ~@3 U@6 ~@2 V@6 W X Y@2 Z ~@2 AA@8 AB ~ AC AD AE
  AF@6 AG@2 AH@2 AI@3 ~@11
>`.pickRestart({
  A: "~@25 [a3,d4,f#4]@7", B: "~@9 [e3,a3,c#4]@4 [e3,a3,c#4]@4 ~@5 [d3,g3,b3]@10",
  C: "[~@14 [c4,e4,g4]@12 ~ [a3,d4,f#4]@8 ~@8 [e3,a3,c#4]@4 [e3,a3,c#4]@4 ~@5 [d3,g3,b3]@12 ~@25 [a3,d4,f#4]@8 ~@8 [e3,a3,c#4]@4 ~ [e3,a3,c#4]@4 ~@4 [d3,g3,b3]@12 ~@13 [c4,e4,g4]@12 [a3,d4,f#4]@8 ~@8 [e3,a3,c#4]@4 ~ [e3,a3,c#4]@4 ~@8]/6", // C D A G D A G C …
  D: "[d3,g3,b3] ~@3", E: "f4", F: "~@4 a3@4 [a3,d4]@4 f#4@4 [a3,c#4,e4]@6 [a3,c#4,f#4]@5 [a3,c#4,f#4]@5",
  G: "e4@2 d4@2 d4@2 d4@2 [g3,b3,d4]@8 ~ d4@4 e4@4 [a3,c#4,e4]@7, [g3,b3]@8 ~@9 [g3,b3]@8 ~@7", // G A G
  H: "~@6 [a3,d4]@5 ~ [a3,d4,f#4]@5 f#4@4 e4@4 e4@4 e4@3, ~@17 [a3,c#4]@8 [a3,c#4]@7", // D5 D A
  I: "~ e4@4 d4@4 [g3,b3,d4]@8 d4@4 b3@4 [c#3,e3,a3]@7, ~ [g3,b3]@8 ~@8 g3@8 ~@7", // G A G
  J: "[~@3 a3@2 [a3,d4,f#4]@4 f#4@2 e4@2 e4@2 d4@2 d4!4 [g3,b3,d4]@4 ~@2 b3@2 [c#3,e3,a3]@3, ~@9 [a3,c#4]@4 a3@4 [g3,b3]@4 ~@4 d3@4 ~@3]/2", // D G A G
  K: "[~@10 [a3,d4,f#4]@4 [a3,d4,f#4]@4 ~ [a3,c#4,e4]@8 [a3,e4]@4 d4@4 e4@4 d4@4 d4@4 d4@4 d4@4 [g3,b3,d4]@8 [a3,e4]@4 ~@8 [a3,d4,f#4]@4 [a3,d4,f#4]@4 f#4@4 e4@4 e4@4 e4@4 e4@4 ~ d4@4 [g3,b3,d4]@8 ~@4 d4@4 d4@4 e4@4 ~@8 [a3,d4,f#4]@4 [a3,d4,f#4]@4 f#4@4 e4@4 e4@4 d4@4 ~@4 [g3,b3,e4]@8 [g3,b3,d4]@4 [g3,b3,d4]@8 ~@4, ~@35 [g3,b3]@8 ~@4 [g3,b3]@8 ~@28 [a3,c#4]@8 [a3,c#4]@8 [g3,b3]@8 ~@9 [g3,b3]@8 a3@8 ~@16 [a3,c#4]@8 a3@8 ~@28]/6", // D A A5 G A5 D G D …
  L: "[~@22 [b3,d4,g4]@4 f#4@4 d4@4 [b3,d4,g4]@4 f#4@4 d4@4 [b3,d4,g4]@4 f#4@4 [f#3,a3,d4]@8 [f#3,a3,d4]@8 [e3,a3,c#4]@8 [e3,a3,c#4]@8 [d3,g3,b3]@8 [d3,g3,b3]@8 [d3,g3,b3]@8 [c#3,e3,a3]@8 [a3,f#4,a4]@4 ~ [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 a4@4 a4@8 [b3,g4,b4]@12 [b3,g4]@8 [g3,b3,d4]@4 [a3,c#4,e4]@12 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [d4,a4]@4 [c#4,a4]@8 [b3,a4]@13]/7", // G D A G A D Em G …
  M: "~@3 [g3,b3,d4]@4 [g3,b3,d4]@4 [a3,c#4,e4]@12 ~ [a3,f#4,a4]@4 [a3,f#4,a4]@4", // G A D
  N: "[[a3,f#4,a4]!2 [d4,a4] [c#4,a4]@2 [b3,g4,b4]@4 [g3,b3,d4]!2 [a3,c#4,e4]@3 [a3,f#4,a4]!2]/2", // D D5 F#m Em G A D
  O: "[a3,f#4,a4]!2 [d4,a4] [c#4,a4]@2 [b3,g4,b4]@3", // D D5 F#m Em
  P: "[[b3,g4,b4]@14 ~@2 d4@2 e4@10 ~ [a3,d4,f#4]@8 [a3,d4,f#4]@4 [a3,c#4,e4]@8 [a3,c#4,e4]@4 [a3,c#4,e4]@4 [g3,b3,e4]@4 [g3,b3,d4]@3]/2", // Em D A Em G
  Q: "~ [g3,b3,d4]@8 [g3,b3,d4]@8 c#4@4 a3@4 ~@4 [a3,d4,f#4]@3", // G D
  R: "[~ [a3,d4,f#4]@4 [a3,c#4,e4]@12 [a3,c#4,e4]@4 [a3,c#4,e4]@4 e4@4 d4@2 d4@2 d4@4 d4@4 d4@4 [g3,b3,d4]@8 ~ [a3,c#4]@8 [a3,d4,f#4]@4 [a3,d4,f#4]@4 [a3,d4,f#4]@4 [a3,c#4,f#4]@4 [a3,c#4,e4]@4 ~@4 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [g3,b3,e4]@4 [g3,b3,d4]@4 [g3,b3,d4]@16 d4@2 [a3,c#4,e4]@10 [a3,d4,f#4]@8 [a3,d4,f#4]@4 f#4@4 e4@4 e4@4 d4@4 [g3,b3,e4]@4 [g3,b3,d4]@8 [g3,b3,d4]@16 ~@10, ~@25 [g3,b3]@8 [g3,b3]@8 ~@97 [a3,c#4]@8 a3@8 ~@38]/6", // D A G A D F#m A Em …
  S: "~@27 [b3,d4,g4]@4 f#4", // G
  T: "[~@3 d4@4 b3@4 f#4@4 d4@4 [b3,d4,g4]@4 f#4@4 [f#3,a3,d4]@8 [f#3,a3,d4]@8 [e3,a3,c#4]@8 ~ [e3,a3,c#4]@8 [d3,g3,b3]@32 f4@32 [a4,d5,f#5]@32 [a4,c5,f5]@32 ~ [b4,d5,g5]@32 [a4,d5,f#5]@31 ~@4, ~@7 [d4,g4]@8 ~@241]/8", // G D A G D F G D …
  U: "[~@26 [a4,f#5]@31 ~ [a4,c5,f5]@31 [b4,d5,g5]@31 ~ [a4,d5]@31 ~@40, ~@121 f#5@63 ~@8]/6", // D F G D5
  V: "[~@22 [a4,f#5]@31 ~ [a4,c5,f5]@31 [b4,d5,g5]@31 ~ [a4,d5,f#5]@31 [c3,c4,g4]@32 [a3,d4,f#4]@8 ~@4]/6", // D F G D C5 D
  W: "~ [e3,a3,c#4]!2 ~ [d3,g3,b3]@3 ~", X: "~@5 [a3,d4,f#4]@2 ~",
  Y: "[~@5 [e3,a3,c#4]@4 [e3,a3,c#4]@4 ~@4 [d3,g3,b3]@12 [e4,g4,c5]@24 [a3,d4,f#4]@8 ~@3]/2", // A G C D
  Z: "~@5 [e3,a3,c#4]@4 [e3,a3,c#4]@4 ~@4 [d3,g3,b3]@12 ~@3", // A G
  AA: "[~@22 [b3,d4,g4]@4 f#4@4 d4@4 [b3,d4,g4]@4 f#4@4 d4@4 [b3,d4,g4]@4 f#4@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [d4,a4]@4 [c#4,a4]@8 [b3,g4,b4]@12 ~ [b3,g4,b4]@8 [g3,b3,d4]@4 [a3,c#4,e4]@12 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [d4,a4]@4 [c#4,a4]@8 a4@4 a4@10 ~@2 [g3,b3,d4]@4 [g3,b3,d4]@4 [a3,c#4,e4]@12 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [d4,a4]@4 [c#4,a4]@8 [b3,g4,b4]@16 ~ [g3,b3,d4]@4 [g3,b3,d4]@4 [a3,c#4,e4]@12 [a3,f#4,a4]@4 [a3,f#4,a4]@4, ~@147 b3@16 ~@93]/8", // G D D5 F#m Em G A D …
  AB: "[a3,f#4,a4]!2 [d4,a4] [c#4,a4]@2 ~@3", AC: "~@24 f#4@4 ~ f#4@3, ~@3 [a3,d4]",
  AD: "~ f#4@4 f#4@4 e4@5 e4@5 e4@5 ~ e4@2 d4@2 d4@3, ~ [a3,d4]@8 [a3,c#4]@16 [g3,b3]@7", // D5 A G
  AE: "~ d4@4 d4@4 [g3,b3,d4]@8 [a3,c#4]@8 [a3,d4]@7, ~ [g3,b3]@8 ~@23", // G A D5 G
  AF: "[~ f#4@2 f#4@2 f#4@4 f#4@4 ~ e4@4 e4@2 e4@2 e4@2 e4@2 e4@4 d4@4 [g3,b3,d4]@8 [g3,b3]@8 [a3,c#4]@12 [a3,d4,f#4]@4 [a3,d4,f#4]@4 [a3,d4,f#4]@4 [a3,c#4,e4]@4 [a3,c#4,e4]@8 [a3,c#4,e4]@4 e4@2 d4@2 d4@4 ~ d4@2 e4@6 [g3,b3]@8 [a3,c#4]@8 ~@4 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2 e4@6 ~@4 e4@2 e4@2 [g3,b3,d4]@6 d4@2 [g3,b3,d4]@8 [g3,b3]@8 [a3,c#4]@8 ~ [a3,f#4,a4]@4, ~ [a3,d4]@8 [a3,c#4]@8 ~ [a3,c#4]@8 [g3,b3]@8 ~@56 [g3,b3]@8 ~ [g3,b3]@8 ~@16 [a3,d4]@8 [a3,d4]@8 [a3,c#4]@8 [a3,c#4]@8 ~@37]/6", // G A D A G A G A …
  AG: "[[a3,f#4,a4]@2 [a3,f#4,a4]@2 [a3,f#4,a4]@2 [e4,a4]@2 [e4,a4]@4 [d4,g4]@2 [d4,g4]@5 d4 [b3,d4]@2 [b3,d4,g4]@4 [a3,c#4,f#4]@4 [a3,f#4,a4]@2, ~@12 b4@7 ~@13]/2", // D A5 G5 Bm G F#m D
  AH: "[[a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 ~ [e4,a4]@4 [e4,a4]@8 [d4,g4,b4]@16 [g3,b3,d4]@4 [g3,b3,d4]@4 [a3,c#4,e4]@12 [a3,f#4,a4]@3]/2", // D A5 G A D
  AI: "[~ [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [e4,a4]@4 [e4,a4]@8 [d4,g4,b4]@16 ~ [b3,d4]@4 [b3,d4,g4]@8 [a3,c#4,f#4]@8 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [a3,f#4,a4]@4 [e4,a4]@4 [e4,a4]@8 d4@4 ~@2]/3", // D A5 G Bm G F#m D A5
})).s("gm_distortion_guitar").gain(0.4)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A@5 B@3 C D E F G H I@6 J@2 K L@7 M N M O P Q P R S T S U@5 B V W X Y Z AA AB@5 Y AC AD AE@5 Y AF AG AH@2 AI@2 AJ
  J AK@2 AL@6 N AM ~ AN P Q AO T S AP@2 AQ@8 AR@3 AS AT AU AV AW@4
>`.pickRestart({
  A: "[~@29 d2@8 ~@8 a2@4 ~ a2@4 ~@4 g2@12 ~@25 d2@8 ~@8 a2@4 ~ a2@4 ~@4 g2@8 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4]/5",
  B: "g2!8", C: "d3!2 a2!2", D: "g2@8 g2@8 ~ g2@8 a2@7", E: "~ d3@8 d3@8 a2@8 a2@7", F: "~ g2@8 g2@8 g2@8 a2@7",
  G: "~ d3@4 d3@4 a2@4 a2@3", H: "~ g2@4 g2@4 g2@4 a2@3",
  I: "[~@2 d3@8 d3@8 ~ a2@8 a2@8 g2@8 g2@8 g2@8 a2@8 d3@8 d3@8 a2@8 a2@8 g2@8 ~ g2@8 g2@8 a2@8 d3@8 d3@8 a2@8 a2@8 g2@8 g2@4 g2@4 g2@4 g2@4 ~ g2@3]/6",
  J: "~ g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@3", K: "~ g2@4 g2@4 g2@4 g2@4 ~ g2@4 g2@10",
  L: "[~@2 g2@12 g2@8 d3@8 d3@8 a2@4 a2@4 ~@4 a2@4 g2@8 g2@8 g2@4 g2@4 a2@8 d3@8 ~ d3@8 a2@4 a2@4 ~@4 g2@4 g2@8 g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 g2@8 g2@8 g2@4 g2@4 a2@4 a2@4 ~ d3@8]/7",
  M: "d3@2 a2!2 ~ g2 g2@2", N: "g2@2 g2!2 a2!2 d3@2", O: "g2@8 g2@4 g2@4 a2@4 ~ a2@4 d3@7", P: "~ d3@8 a2@8 a2@8 g2@7",
  Q: "~ g2@8 g2@4 g2@4 a2@4 a2@4 d3@7", R: "~ g2@8 g2@4 g2@4 a2@4 ~ a2@4 d3@6", S: "~ d3@4 a2@4 a2@4 g2@3",
  T: "~ g2@4 g2@2 g2@2 a2@2 a2@2 d3@3",
  U: "[~@2 g2@8 g2@4 g2@4 ~ g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@12 g2@12 g2@8 d3@8 d3@8 a2@4 ~ a2@4 ~@4 a2@4 g2@4]/5",
  V: "g2!7 d3", W: "d3!8", X: "d3@4 d3@4 d3@4 ~ d3@4 d3@4 d3@4 d3@4 d3@3",
  Y: "~ d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@3", Z: "~ d3@4 d3@4 d3@4 d3@4 d3@4 d3@3 d3@4 d3@4", AA: "d3!7 a2",
  AB: "[a2@4 a2@4 a2@4 a2@4 a2@4 a2@3 a2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@3 g2@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@3 d3@4 d3@4 d3@3]/5",
  AC: "~ d3@4 d3@4 d3@4 d3@4 d3@3 d3@4 d3@4 d3@4", AD: "d3!6 a2!2",
  AE: "[a2@4 a2@4 a2@4 a2@4 a2@3 a2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@3 g2@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@4 d3@3 d3@4 d3@4 d3@4 d3@3]/5",
  AF: "~ d3@4 d3@4 d3@4 d3@3 d3@4 d3@4 d3@4 d3@4", AG: "d3!5 d2@2 ~", AH: "[~ a2!2 ~ g2@3 g2@2 g2!4 d2@2 ~]/2",
  AI: "[~@5 a2@4 a2@4 ~@4 g2@12 g2@8 g2@4 g2@4 g2@4 g2@4 d2@8 ~@3]/2", AJ: "~@5 a2@4 a2@4 ~@4 g2@8 g2@4 g2@3",
  AK: "[~ g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@5]/2",
  AL: "[~@2 g2@12 g2@8 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 g2@8 ~ g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 g2@8 g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 g2@8 ~]/6",
  AM: "d3@2 a2!2 ~ g2 ~@2", AN: "~@3 d3", AO: "~ d3@8 a2@8 ~ a2@8 g2@6",
  AP: "[~@3 g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 a2@8 a2@8 a2@5]/2",
  AQ: "[~@3 g2@8 g2@4 g2@4 a2@4 ~ a2@4 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 g2@8 g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 ~ a2@4 a2@4 ~@4 g2@4 g2@8 g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 ~ g2@8 g2@8 g2@4 g2@4 a2@4 a2@4 d3@8 d3@8 a2@4 a2@4 ~@4 g2@4 g2@2]/8",
  AR: "[~@2 g2@4 g2@4 g2@4 g2@4 ~ g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@4 g2@33]/3", AS: "d2", AT: "f2",
  AU: "~ g2@31", AV: "~ d#2@31", AW: "[~@2 f2@32 g2@65 ~@29]/4",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@7 A B C@3 ~@12 D E F@2 ~@9 G@2 H I J@5 ~ K@2 L@8 M@8 N@8 O P Q@2 R S@5 T@2 U@2 V W ~ X Y Z AA@6 AB@2 AC@2 AD@6 AE AF
  AG AH AI@4
>`.pickRestart({
  A: "~@7 g4", B: "~@2 f#4 ~ g4 ~ f#4 ~ g4 ~ f#4 ~ g4 ~ f#4 ~", C: "g4 ~ f#4 ~ g4 ~ f#4 ~ g4 ~ f#4 ~ g4 ~ f#4 ~",
  D: "~@21 [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3", // Bm
  E: "~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3", // Bm
  F: "[~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@3 ~@2 [b4,d5]@3 ~ [b4,d5,g5]@4 f#5@4 d5@4 [b4,d5,g5]@4 f#5@4 d5@4 [b4,d5,g5]@4 f#5@4 ~@10]/2", // Bm G
  G: "[~@29 a4@8 a4@4 a4@8 a4@4 a4@4 g4@4 g4@3]/2", H: "~ g4@8 ~@20 [a4,d5]@3",
  I: "~ [a4,d5]@4 [a4,c#5]@12 [a4,c#5]@4 [a4,c#5]@4 [g4,b4]@7", // D5 A G
  J: "[~ [g4,b4]@12 [g4,b4]@8 ~ a4@4 ~@4 [a4,d5,f#5]@4 [a4,d5,f#5]@4 [a4,d5,f#5]@4 [a4,c#5,f#5]@4 [a4,c#5,e5]@8 [a4,c#5,e5]@2 [a4,c#5,e5]@2 [g4,b4,e5]@4 [g4,b4,d5]@4 [g4,b4,d5]@16 d5@2 [a4,c#5,e5]@10 [f#5,a5,d6]@8 [f#5,a5,d6]@4 f#5@4 e6@4 e6@4 d6@4 [e5,g5,b5]@4 [d5,g5,b5]@8 [d5,g5,b5]@12 ~@14, ~@53 [a5,c#6]@4 a5@4 ~@19]/5", // G D F#m A Em G A D …
  K: "[~@27 [b4,g5]@4 f#5@4 d5@4 [b4,g5]@4 f#5@4 d5@4 [b4,d5,g5]@4 f#5@4 ~@5, ~@39 d5@8 ~@17]/2", // Em G
  L: "[~@28 b4@32 c5@16 b4@8 a4@4 g4@4 [d4,f#4,a4]@32 [f4,a4,c5]@32 ~ [g4,b4,d5]@32 [a4,d5,f#5]@31 ~@8 d5@4 d5@4 d5@4 d5@4 d5@4 b4@4 [e4,a4,d5]@4, ~@28 [d4,g4]@56 ~@136 [f#4,a4]@31 ~@5]/8", // D F G D Dsus2 G5 F#m
  M: "[~@4 d5@4 b4@4 c#5@8 b4@3 a4@4 c5@8 ~@4 c5@4 c5@4 c5@4 c5@4 c5@12 b4@4 b4@12 a4@3 g4@4 d6@2 c#6@2 d6@2 a5@2 e5@2 d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 a5@2 e5@2 d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 c6@2 e5@2 d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 c6@2 ~ d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 b5@2 e5@2 ~@2 b5@2 c#6@2 d6@2 c#6@2 d6@2 b5@2 e5@2 d5@4 c6@2 d6@2 c#6@2 d6@2 a5@2 e5@2 ~@2 a5@2 c#6@2 d6@2 c#6@2 d6@2 a5@2 ~@3 a5@2 c#6@2 d6@2 ~@2 d5@4 d5@4 d5@4 d5@4 b4@4 d5@4 b4@4 [e4,a4,d5]@8, ~@27 [d4,g4]@27 ~ [d4,g4]@27 ~@8 [f#4,a4]@31 ~ [f4,a4,c5]@31 [g4,b4]@31 ~ [a4,f#5]@31 [f#4,a4]@31 ~@9, ~@146 e5@2 ~@5 d5@10 d5@16 ~@6 d5@10 d5@14 e5@2 ~@45, ~@105 d5@3 ~@20]/8", // Dsus2 G5 F#m F G D F#m
  N: "[b4@4 c#5@8 b4@7 a4@4 c5@8 c5@4 ~@8 c5@8 c5@8 b4@8 b4@12 a4@3 g4@4 d6@2 c#6@2 d6@2 a5@2 e5@2 d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 a5@2 e5@2 d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 c6@2 e5@2 d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 c6@2 ~ d5@2 a5@2 c6@2 d6@2 c#6@2 d6@2 b5@2 e5@2 ~@2 b5@2 c#6@2 d6@2 c#6@2 d6@2 b5@2 e5@2 d5@4 c6@2 d6@2 c#6@2 d6@2 a5@2 e5@2 ~@2 a5@2 c#6@2 d6@2 c#6@2 d6@2 a5@2 ~@3 a5@2 c#6@2 d6@2 ~@30 [f#4,a4,d5]@8 ~@4, ~@23 g4@27 ~@36 [f#4,a4]@31 ~ [f4,a4,c5]@31 [g4,b4]@31 ~ [a4,f#5]@62 ~@13, ~@23 d4@16 d4@12 [d4,g4]@27 ~@16 d4@4 d4@20 ~@87 e5@2 ~@49, ~@35 c5@8 ~@99 e5@2 ~@5 d5@10 d5@16 ~@6 d5@10 d5@15 d5@36 ~@14]/8", // D F#m F G D G5
  O: "~ [c#4,e4,a4]!2 ~ [b3,d4,g4]@3 ~", P: "~@5 [f#4,a4,d5]@2 ~",
  Q: "[~@5 [c#4,e4,a4]@4 [c#4,e4,a4]@4 ~@4 [b3,d4,g4]@12 [e4,g4,c5]@24 [f#4,a4,d5]@8 ~@3]/2", // A G C D
  R: "~@5 [c#4,e4,a4]@4 [c#4,e4,a4]@4 ~@4 [b3,d4,g4]@12 ~@3", // A G
  S: "[~@17 d5@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 ~ [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5,g5]@4 f#5@4 d5@4 [b4,d5,g5]@4 f#5@4 d5@4 [b4,d5,g5]@4 f#5@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [d5,a5,d6]@4 [c#5,a5,c#6]@8 [b4,g5,b5]@12 ~@2, ~@21 g5@32 ~ g5@32 ~@74]/5", // Bm G D D5 F#m Em
  T: "[~@7 [g4,b4,d5]@4 [a4,c#5,e5]@12 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [d5,a5]@4 [c#5,a5,c#6]@8 [a5,c#6]@4 ~@9, ~@39 d6@8 ~@4 b4@12 ~]/2", // G A D D5 F#m A
  U: "[~@3 [g4,b4,d5]@4 [g4,b4,d5]@4 [a4,c#5,e5]@12 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [d5,a5,d6]@4 [c#5,a5,c#6]@8 [b4,g5,b5]@12 ~]/2", // G A D D5 F#m Em
  V: "~ [g4,b4,d5]!2 [a4,c#5,e5]@3 [a4,f#5,a5]!2", W: "[a4,f#5,a5]!2 [d5,a5,d6] [c#5,a5,c#6]@2 ~@3",
  X: "~@24 f#5@4 ~ f#5@3, ~@3 [a4,d5]", // D5
  Y: "~ f#5@4 f#5@4 e5@5 e5@5 e5@5 ~ e5@2 d5@2 d5@3, ~ [a4,d5]@8 [a4,c#5]@16 [g4,b4]@7", // D5 A G
  Z: "~ d5@4 d5@4 [g4,b4,d5]@8 [a4,c#5]@8 [a4,d5]@7, ~ [g4,b4]@8 ~@23", // G A D5 G
  AA: "[~ f#5@2 f#5@2 f#5@4 f#5@4 ~ e5@4 e5@2 e5@2 e5@2 e5@2 e5@4 d5@4 [g4,b4,d5]@8 [g4,b4]@8 [a4,c#5]@8 ~@4 [a4,d5,f#5]@4 [a4,d5,f#5]@4 [a4,d5,f#5]@4 [a4,c#5,e5]@4 [a4,c#5,e5]@8 [a4,c#5,e5]@4 e5@2 d5@2 d5@4 ~ d5@2 e5@6 [g4,b4]@8 [a4,c#5]@8 ~@4 f#5@2 f#5@2 f#5@2 f#5@2 f#5@2 f#5@2 f#5@2 e5@6 ~@4 e5@2 e5@2 [g4,b4,d5]@6 d5@2 [g4,b4,d5]@8 [g4,b4]@8 [a4,c#5]@8 ~ [a4,f#5,a5]@4, ~ [a4,d5]@8 [a4,c#5]@8 ~ [a4,c#5]@8 [g4,b4]@8 ~@56 [g4,b4]@8 ~ [g4,b4]@8 ~@16 [a4,d5]@8 [a4,d5]@8 [a4,c#5]@8 [a4,c#5]@8 ~@37]/6", // G A D A G A G A …
  AB: "[[a4,f#5,a5]!3 [e5,a5,d6] [e5,a5,c#6]@2 [d5,g5] [d5,g5]@2 ~ [b4,d5] [b4,d5,g5]@2 [a4,c#5,f#5]@2 [a4,f#5,a5], ~@6 b5@3 ~@7]/2", // D Dsus2 A G5 Bm G F#m D
  AC: "[[a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 ~ [e5,a5,d6]@4 [e5,a5,c#6]@8 [d5,g5,b5]@12 ~@4 [g4,b4,d5]@4 [g4,b4,d5]@4 [a4,c#5,e5]@12 [a4,f#5,a5]@3]/2", // D Dsus2 A G A D
  AD: "[~ [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [e5,a5,d6]@4 [e5,a5,c#6]@8 [d5,g5,b5]@12 ~@5 [b4,d5]@4 [b4,d5,g5]@8 [a4,c#5,f#5]@8 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [a4,f#5,a5]@4 [e5,a5,d6]@4 [e5,a5,c#6]@8 d5@4 d5@8 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 ~ [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [d3,g3,c4]@33, ~@15 [g5,b5]@2 ~@15]/6", // D Dsus2 A G Bm G F#m D …
  AE: "[d3,g3,b3]", AF: "[d3,f3,a#3]", AG: "~ [d3,g3,a#3]@31", AH: "~ [d#2,d#3,a#3]@31",
  AI: "[~@2 [d#2,f3,c4]@32 g2@33 g2@33 ~@28, ~@34 [d2,d3,g3]@65 ~@29]/4", // F7 G5
})).s("gm_string_ensemble_1").gain(0.35)

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

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@51 A B C D E B F D G B H D I B J D K B L D M N ~@44>".pickRestart({
  A: "~@14 x!2", B: "x!16", C: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  D: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  E: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~",
  F: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x",
  G: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~",
  H: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x",
  I: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~",
  J: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  K: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~",
  L: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  M: "~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", N: "x!10 ~@6",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@109 x ~ [~ x ~@30] ~@5>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@54 A B C D@2 E F G H I ~@45 J K H L ~@4>".pickRestart({
  A: "~@29 x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~@3", C: "~@13 x!2 ~",
  D: "~@25 x ~ x ~@4", E: "~@12 x!2 ~@2", F: "~@13 x ~@2", G: "~@18 x ~@6 x ~@6", H: "~@25 x ~@6",
  I: "~@9 x ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~@7", J: "~@3 x", K: "x!4", L: "~ x ~@30",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@53 A ~@11 B C D ~@45 E F ~@2>".pickRestart({
  A: "~@29 x ~@2", B: "~@16 x ~@6 x ~@7 x", C: "~@27 x ~@4", D: "~@11 x ~@4", E: "~ x ~@3 x ~@3 x ~@6", F: "~ x ~@14",
})).gain(0.4)

// … 27 more lines

More by Electric Light Orchestra