Strudelify

Strange Magic

Electric Light Orchestra

KeyG majorTempo96 bpm
0:00/0:00
// Strange Magic — Electric Light Orchestra
// 96 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: ch 6 "Guitar 2" named as a guitar, played on electric guitar clean (its pad sweep patch is not one)
// note: duplicate parts dropped: ch 5 "Piano" piano (copy of ch 2 "Guitar" electric guitar jazz); ch 9 "El. Piano" epiano1 (copy of ch 2 "Guitar" electric guitar jazz)
// note: Full arrangement: all 110 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 2.
setcpm(96/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 · electric guitar jazz · "Guitar"
const electric_guitar_jazz = note(`<
  ~@8 A@6 B@2 C@3 ~@5 D@2 E@6 F@3 G@8 H@2 I@2 J@2 K@2 L@4 M N@8 O@6 P Q P R S T U V@6 P Q V@6 P Q V@6 P Q P W P W P W P
  W P
>`.pickRestart({
  A: "[~@24 d5@4 ~ c5@4 c5@4 b4@4 b4@17 b4@9 a#4@8 a4@8 ~ a#4@8 d5@4 c5@4 c5@4 ~ b4@4 b4@17 b4@8 a#4@8 ~ a4@8 a#4@8 [d4,g4,b4]@17 [g4,b4]@6 ~ [a4,c5]@5 [a#4,d5]@4, ~@12 [d4,g4]@17 [d#4,g4]@17 d4@17 [d#4,g4]@17 ~@16, ~@92 g4@17 ~@83]/6", // G Am A# G5 D#
  B: "[~ [d5,f5]@4 [c5,d#5]@8 ~ [b4,d5]@8 [a4,c5]@13 [g4,b4]@4 [a4,c5]@4 [b4,d5]@8 ~ [b4,d5]@6 [a4,c5]@6]/2", // Dm Cm Bm Am G Am Bm Am
  C: "[[g#4,b4]@4 ~ [f#4,a#4]@4 [f4,a4]@4 [e4,g#4]@4 [d#4,g4]@4 ~ [d4,f#4]@4 [c#4,f4]@4 [c4,d#4]@4 a4@4 d4@34 ~@24, ~@19 b4@4 ~@25]/3", // G#m F# F E D# D C# Cm
  D: "[~@17 [c4,f4]@8 [c4,f4]@8 [c4,f4]@8 f4@4 ~@8 g4@4 [b3,d4]@7, ~@25 a4@20 a4@8 ~@11, ~@41 c4@8 [b3,d4]@8 ~@7]/2", // F5 Bm
  E: "[~@2 a4@4 g4@4 e4@4 ~@4 [f3,c4]@8 [c4,f4]@8 [c4,f4]@8 ~@13 g4@4 [b3,d4]@8 a4@4 g4@4 e4@4 ~@4 [f3,c4]@8 [c4,f4]@8 ~ [c4,f4]@8 ~@12 g4@4 [b3,d4]@8 [b3,d4]@8 [g4,e5]@4 ~ [b4,g5]@4 ~@20 b5@4 a5@4 g5@4 [b4,d5,g5]@8 ~@3, ~@2 [b3,d4]@8 ~@4 d4@12 a4@20 ~ a4@8 ~@36 a4@20 ~ a4@8 ~@29 [g4,c5,e5]@16 [c5,f#5]@16 ~@11, ~@42 [c4,f4]@8 ~ [b3,d4]@8 ~@8 [b3,d4]@8 ~@4 d4@12 ~@17 [c4,f4]@8 [b3,d4]@8 ~@33 a5@12 ~@23]/6", // F5 Bm F5 Bm C Em G Bm …
  F: "[~@14 [b4,e5]@4 [b4,g5]@4 ~@20 b5@4 ~ a5@4 g5@4 [g4,d5]@4 c5@4 c5@4 b4@4 ~ b4@16 [d#4,g4,b4]@8, ~@11 [g4,c5,e5]@8 [c5,f#5]@8 ~@21, ~@30 a5@12 ~@13 g5@8 ~@33]/3", // E5 Em G5 D#aug C Cdim
  G: "[~ [d#4,g4,a#4]@8 [d#4,g4,a4]@8 ~ [d#4,g4,a#4]@8 b4@8 ~@18 g4@4 a4@4 b4@8 a4@4 ~ g4@4 g4@8 a4@4 ~@30 g4@4 a4@4 b4@8 ~ a4@8 g4@4 ~ b4@8 ~@30 b4@4 ~@29 b4@4 ~ a4@2 g4@2 e4@8 ~@13 e4@4 g4@2, ~@26 d4@34 [b3,d#4]@34 d4@34 ~@29 b4@13 ~@21 a4@13 ~@52, ~@90 b4@13 ~@24 [b3,d#4]@34 d4@34 d#4@34 ~@27]/8", // D# Am7b5 D# B
  H: "[~@2 e4@4 ~ [c4,f4]@8 [c4,f4]@8 [c4,f4]@8 f4@4 ~@8 g4@4 [b3,d4]@8 ~ a4@4 g4@4, ~@15 a4@20 a4@8 ~@21, ~@31 c4@8 [b3,d4]@8 ~@9 [b3,d4]@8]/2", // F5 Bm
  I: "[e4@4 ~@4 [f3,c4]@8 [c4,f4]@8 [c4,f4]@8 ~@13 g4@4 [b3,d4]@8 a4@4 g4@3, ~ d4@3 a4@5 a4@2 ~@5, ~@32 [c4,f4]@8 ~ [b3,d4]@8 ~@8 [b3,d4]@7]/2", // F5 Bm F5 Bm
  J: "[~ e4@4 ~@4 [f3,c4]@8 [c4,f4]@8 ~ [c4,f4]@8 ~@12 g4@4 [b3,d4]@8 [b3,d4]@6, ~@5 d4@12 a4@20 ~ a4@8 ~@18, ~@17 [c4,f4]@4 [b3,d4]@4 ~@7]/2", // F5 Bm F5 Bm
  K: "[~@2 [g4,e5]@4 ~ [b4,g5]@4 ~@20 b5@4 a5@4 g5@4 [b4,d5,g5]@8 ~@13, ~@11 [g4,c5,e5]@16 [c5,f#5]@16 ~@21, ~@19 a5@12 ~@33]/2", // C Em G C Cdim
  L: "[~@4 [b4,e5]@4 [b4,g5]@4 ~@20 b5@4 a5@4 ~ g5@4 [g4,d5]@4 c5@4 c5@4 b4@4 ~ b4@16 [d#4,g4,b4]@8 ~ [d#4,g4,a#4]@8 [d#4,g4,a4]@8 ~ [d#4,g4,a#4]@8 [g4,d5]@4 c5@4 ~ c5@4 b4@3, ~@3 [g4,c5,e5]@4 [c5,f#5]@4 ~@21, ~@20 a5@12 ~@13 g5@8 ~@59 g5@8 ~@8]/4", // E5 Em G5 D#aug D# Am7b5 D# G5 …
  M: "~ b4@17 [d#4,g4,b4]@8 [d#4,g4,a#4]@6", // D#aug D#
  N: "[~@3 [d#4,g4,a4]@8 [d#4,g4,a#4]@8 ~ b4@8 ~@17 g4@4 a4@4 b4@8 ~ a4@4 g4@4 g4@8 ~ a4@4 ~@30 g4@4 a4@4 b4@8 a4@8 ~ g4@4 b4@8 ~@30 b4@4 ~@30 b4@4 a4@2 g4@2 e4@8 ~@13 e4@4 ~ g4@4 e4@4, ~@20 d4@33 [b3,d#4]@34 d4@34 [b3,d#4]@34 d4@33 d#4@34 ~@34, ~@83 b4@13 ~@55 b4@13 ~@20 a4@13 ~@59]/8", // Am7b5 D# B
  O: "[[c4,f4]@2 [c4,f4]@2 [c4,f4]@2 f4 ~@2 g4 [b3,d4]@2 a4 g4 e4 ~ [f3,c4]@2 [c4,f4]@2 [c4,f4]@2 ~@3 g4 [b3,d4]@2 a4 g4 e4 ~ [f3,c4]@2 [c4,f4]@2 [c4,f4]@2 ~@3 g4 [b3,d4]@2 [b3,d4]@2 [g4,e5] [b4,g5], ~@2 a4@5 a4@2 ~@9 a4@5 a4@2 ~@9 a4@5 a4@2 ~@7, ~@6 c4@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~ d4@3 ~@4 [c4,f4]@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~ d4@3 ~@4 [c4,f4]@2 [b3,d4]@2 ~@6]/6", // F5 Bm F5 Bm F5 Bm C Em …
  P: "~@5 b5 a5 g5, [g4,c5,e5] [c5,f#5], ~@2 a5@3 ~@3", Q: "[b4,d5,g5]@2 ~@4 [b4,e5] [b4,g5]",
  R: "[g4,b4,d5] [a4,c5] [b4,c5] b4 [b4,d5]@2 [b4,d5]@2, g5 d5 ~@2", // G Am Cmaj7 Bm
  S: "[d5,f5]@2 [c5,d#5]@2 [c5,d#5]@2 [b4,d5] [c5,d#5] [a4,b4,d5]@2 [a4,c5]@2 [b4,d5]@2 [a4,c5]@2, [d#4,g4,b4] [d#4,g4,a#4] [d#4,g4] [d#4,g4,a#4]", // Dm Cm Bm Cm Bm7 Am Bm Am …
  T: "[g4,b4] [a4,c5] [b4,d5]@2 [b4,d5]@2 [a4,c5]@2", // G Am Bm Am
  U: "[f#4,a#4] [f4,a4] [e4,g#4] [d#4,g4] [d4,f#4] [c#4,f4] [c4,d#4] a4", // F# F E D# D C# Cm
  V: "[[c4,f4]@2 [c4,f4]@2 [c4,f4]@2 ~@3 g4 [b3,d4]@2 a4 g4 e4 ~ [f3,c4]@2 [c4,f4]@2 [c4,f4]@2 ~@3 g4 [b3,d4]@2 a4 g4 e4 ~ [f3,c4]@2 [c4,f4]@2 [c4,f4]@2 ~@3 g4 [b3,d4]@2 [b3,d4]@2 [g4,e5] [b4,g5], ~@2 a4@5 a4@2 ~@9 a4@5 a4@2 ~@9 a4@5 a4@2 ~@7, ~@6 [c4,f4]@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~ d4@3 ~@4 [c4,f4]@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~ d4@3 ~@4 [c4,f4]@2 [b3,d4]@2 ~@6]/6", // F5 Bm F5 Bm F5 Bm C Em …
  W: "[b4,d5,g5]@2 ~ [b4,g5] [g4,e5] [b4,g5]!2 [g4,e5]", // G Em C Em C
})).s("gm_electric_guitar_jazz").gain(0.47)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@8 A@6 B@4 C@5 D E F@4 G H I@2 J@7 K@2 L@2 M@7 N@6 O@7 P Q P Q P Q R S T U V W X P Q P Q P Q R S P Q P Q P Q R S P Q
  P Q P Q R S T Y Z Y Z Y Z Y Z
>`.pickRestart({
  A: "[~@24 b3@4 ~ a3@4 a3@4 g3@4 ~@9 d3@8 b3@9 a#3@8 a3@8 ~@9 b3@4 a3@4 a3@4 ~ g3@4 ~@8 d3@8 ~ b3@8 a#3@8 ~ a3@8 ~@17 d3@8 b3@8 ~@8, ~@24 g2@25 ~@9 [c3,g3]@34 g2@25 ~@9 [c3,g3]@34 ~@32, ~@41 g3@17 ~@51 g3@17 ~@33 g2@33]/6", // C5
  B: "[~ b3@8 ~ a3@8 g3@8 a3@8 ~ [e3,b3]@17 e3@8 b3@8 ~ b3@8 a3@8 ~ g3@8 a3@8 ~@5 d3@4 b3@4 d3@4 ~@5 d3@4, ~ [g2,d#3]@34 g2@34 [g2,d#3]@33 g2@17 g2@9]/4", // E5 Cm
  C: "[b3@4 d3@4 ~@4 g2@4 ~ d#3@4 g2@4 ~@4 g2@4 d#3@4 ~ g2@4 ~@4 d3@4 b3@4 ~ d3@4 ~@4 d3@4 b3@4 d3@4 ~@5 g2@4 d#3@4 g2@4 ~@5 g2@4 d#3@4 g2@4 ~@5 d3@4 b3@4 d3@4 ~@5 d3@4 b3@4 d3@4 ~@4 d#3@4 b3@4 d#3@4 ~, ~@8 c2@17 c2@17 g2@17 g2@17 c2@17 c2@16 g2@17 g2@17 g2@16 ~]/5",
  D: "~ d#3 b3 d#3 ~ e3 b3 e3, g2!2", E: "~@4 e3@4 b3@4 e3@4 ~ d2@12 d2@3, g2 ~",
  F: "[~ d2@16 e2@12 ~ e2@4 e2@16 d2@12 d2@4 d2@16 ~ e2@12 e2@4 e2@16 d2@12 ~]/4", G: "d2 d2@4 e2@3",
  H: "e2@4 e2@16 ~ a2@11",
  I: "[~ a2@4 d2@16 g2@8 ~ [g2,g3]@4 [g2,g3]@4 [b2,b3]@4 [b2,b3]@4 [d3,d4]@4 [d3,d4]@4 [a2,a3]@10]/2", // G B D A
  J: "[~@2 a2@4 d2@16 ~ b3@4 a3@4 a3@4 g3@4 ~@9 d3@8 b3@9 a#3@8 a3@8 ~@13 d3@4 ~ b3@4 d3@4 ~@4 d3@4 ~ b3@4 d3@4 ~@4 g2@4 d#3@4 ~ g2@4 ~@4 g2@4 d#3@4 ~ g2@4 ~@4 d3@4 b3@4 d3@4 ~@5 d3@4 b3@4 d3@4 ~@5 g2@4 d#3@4 g2@4 ~@5 g2@4 d#3@4 g2@3, ~@23 g2@25 ~@8 [c3,g3]@34 g2@17 g2@17 c2@17 c2@17 g2@17 g2@17 ~@32, ~@40 g3@16 ~@135 c2@17 c2@16]/7", // C5
  K: "[~@5 d3@4 ~ b3@4 d3@4 ~@4 d3@4 ~ b3@4 d3@4 ~@4 d#3@4 b3@4 ~ d#3@4 ~@4 d#3@4 b3@4, ~ g2@17 g2@17 g2@17 g2@12]/2",
  L: "[~ d#3@4 ~@4 e3@4 b3@4 e3@4 ~@5 e3@4 b3@4 e3@4 ~ d2@12 d2@4 d2@9, ~@5 g2@17 g2@17 ~@25]/2",
  M: "[~@7 e2@12 e2@4 ~ e2@16 d2@12 d2@4 d2@16 ~ e2@12 e2@4 e2@16 d2@12 ~ d2@4 d2@16 e2@12 e2@4 e2@16 ~ a2@12 a2@4 d2@16 g2@8 [g2,g3]@4 ~ [g2,g3]@4 [b2,b3]@4]/7", // G B
  N: "[[b2,b3]@4 [d3,d4]@4 [d3,d4]@4 [a2,a3]@12 a2@4 d2@16 ~ b3@4 a3@4 a3@4 g3@4 ~@9 d3@8 b3@9 a#3@8 a3@8 ~@9 b3@4 a3@4 ~ a3@4 g3@4 ~@8 d3@8 ~ b3@8 a#3@8 ~ a3@8 ~@13 d3@4 b3@4, ~@45 g2@25 ~@8 [c3,g3]@34 g2@25 ~@9 [c3,g3]@34 g2@12, ~@62 g3@16 ~@51 g3@17 ~@46]/6", // B D A C5
  O: "[d3@4 ~@5 d3@4 b3@4 d3@4 ~@5 g2@4 d#3@4 g2@4 ~@5 g2@4 d#3@4 g2@4 ~@4 d3@4 ~ b3@4 d3@4 ~@4 d3@4 ~ b3@4 d3@4 ~@4 g2@4 d#3@4 ~ g2@4 ~@4 g2@4 d#3@4 ~ g2@4 ~@4 d3@4 b3@4 d3@4 ~@5 d3@4 b3@4 d3@4 ~@5 d#3@4 b3@4 d#3@4 ~@5 d#3@4 b3@4 d#3@4 ~@4 e3@4 ~ b3@4 e3@4 ~@4 e3@4 ~ b3@4 e3@4, ~@5 g2@16 c2@17 c2@17 g2@17 g2@17 c2@17 c2@17 g2@17 g2@16 g2@17 g2@17 g2@17 g2@17]/7",
  P: "d2@3 d2 d2@4", Q: "e2@3 e2 e2@4", R: "a2@3 a2 d2@4", S: "g2@2 [g2,g3]!2 [b2,b3]!2 [d3,d4]!2",
  T: "[a2,a3]@3 a2 d2@4", U: "b3 a3!2 [g2,g3] ~@3 g2, d3@3 d3, g2@3 ~ g3@4, ~@4 g2@3 ~",
  V: "b3@2 ~ g2 g2@3 g2, [c3,d#3,g3], g2@3 ~@5, ~ a#3 a3 ~", W: "g2@3 g2 g2@3 g2, e3", X: "g2@3 g2 g2@3 g2, d#3",
  Y: "[g2,g3]@2 [g2,g3]!2 [b2,b3]!2 [d3,d4]!2", Z: "[a2,a3]@3 a2 d2@3 d3",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · tremolo strings · "Strings"
const tremolo_strings = note(`<
  A@2 B@7 ~@26 C@5 D@4 ~@12 E F@2 G H@4 ~@7 I ~ J K L M ~ N O N O N O ~@23 P Q R
>`.pickRestart({
  A: "[~@24 g5@2 ~ g5@2 ~@2 g5@2 a#5@2 g5@2 ~ g5@2 ~@2 g5@2 d#5@2 g5@2 ~ g5@2 d#5@2 g5@2 ~ g5@2 ~@2 g5@2 a#5@2, ~@26 a#5@2 ~ g4@2 g4@25 ~@2 f4@6, ~@30 d#5@2 ~@5 d#5@2 ~@2 a#5@2 ~@5 a#5@2 ~@5 a#5@2 ~@2 d#5@2 ~@3]/2",
  B: "[~ d#5@2 g5@2 ~@2 g5@2 d#5@2 g5@2 ~ g5@2 d#5@2 g5@2 ~ g5@2 d#5@2 g5@2 a#5@2 ~ d#5@2 g5@2 ~@2 g5@2 d#5@2 g5@2 ~ g5@2 d#5@2 g5@2 ~ g5@2 d#5@2 f#5@2 a5@2 ~ d#5@2 f#5@2 ~@2 f#5@2 ~ f#5@2 ~@2 f#5@2 d#5@2 f#5@2 ~ f#5@2 d#5@2 f#5@2 g#5@2 ~ d#5@2 f#5@2 ~@2 f#5@2 ~ f#5@2 ~@2 f#5@2 d#5@2 f#5@2 ~ f#5@2 d#5@2 f5@2 g#5@2 ~ d#5@2 f5@2 ~@2 f5@2 ~ f5@2 ~@2 f5@2 d#5@2 f5@2 ~ f5@2 d#5@2 f5@2 g#5@2 ~ d#5@2 f5@2 ~@2 f5@2 ~ f5@2 ~@2 f5@2 d#5@2 f5@2 ~ f5@2 d#5@2 f5@2 ~@4 g#5@23 ~@25, g5@2 ~@4 a#5@2 ~ d#4@16 ~@2 d4@27 ~@2 c#4@27 ~@2 c4@31 ~ b3@99 ~@8, ~@13 a#5@2 ~@5 a#5@2 ~@7 g5@2 ~@4 a#5@2 ~@5 a#5@2 ~@5 a#5@2 ~@7 f#5@2 ~@4 a5@2 ~ d#5@2 ~@2 a5@2 ~@5 a5@2 ~@7 f#5@2 ~@4 g#5@2 ~ d#5@2 ~@2 g#5@2 ~@5 g#5@2 ~@7 f5@2 ~@4 g#5@2 ~ d#5@2 ~@2 g#5@2 ~@5 g#5@2 ~@7 f5@2 ~@4 g#5@2 ~ d#5@2 ~@2 g#5@2 ~@5 g#5@2 ~@57]/7",
  C: "[~@30 [g3,b4]@4 ~ [b3,b4]@4 [g3,b4]@4 [c4,b4]@4 b4@4 ~ b4@4 b4@4 b3@8 a3@25 ~@5 g3@4 b3@4 g3@4 ~ c4@4 ~@4 b4@8 [b3,b4]@8 ~ a3@24, ~@47 b3@13 b4@4 ~@30 b4@8 b4@8 ~ b4@8 ~@41, ~@115 b3@12 ~@33]/5", // G B G Cmaj7 B
  D: "[~@5 g3@4 ~ b3@4 g3@4 c4@4 b3@13 e3@3 ~ g3@4 b3@4 ~ g3@4 c4@4 b3@13 e3@3 ~ g3@4 b3@4 g3@4 ~ c4@4 b3@13 ~@25, ~ b4@101 ~@26]/4",
  E: "~@6 [g3,b4] [b3,b4]", // G B
  F: "[[g3,b4]@4 ~ [c4,b4]@4 b4@4 b4@4 b4@4 b3@8 ~ a3@25 ~@4 g3@4 ~, ~@9 b3@12 b4@4 ~@30 b4@8 ~]/2", // G Cmaj7
  G: "b3@4 g3@4 c4@4 ~@5 b4@8 [b3,b4]@7, b4!2 ~@2, ~@12 b3@13 ~@7", // B
  H: "[~ a3@25 ~@5 g3@4 b3@4 g3@4 ~ c4@4 b3@13 e3@3 ~ g3@4 b3@4 g3@4 c4@4 ~ b3@13 e3@3 g3@4 ~ b3@4 g3@4 c4@4 b3@13, ~@27 b4@101]/4",
  I: "g2@4 [g2,g3] ~ [g2,g3] ~ [b2,b3] ~ [b2,b3] ~ d4 ~ d4 ~, ~@24 d3 ~@3 d3 ~@3", // G B
  J: "~@2 d4 ~ d4 ~ d4!3 ~ d4 ~ d4 ~ d4 ~", K: "d#4!3 ~ d#4 ~ d#4 ~ d#4 ~ d#4!4 ~@2",
  L: "e4!3 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~", M: "d#4!3 ~ d#4 ~ d#4 ~ d#4 ~ d#4 ~ d#4 ~ d#4 ~",
  N: "~@4 e4 ~ b4 ~ e5 ~ b4 ~ g4 ~ e4 ~", O: "d4@3 ~@13", P: "a5 ~@3 a5 ~@3 d6 ~@3 d6 ~@3",
  Q: "g5 ~@3 g5 ~ g5 ~ b5 ~ b5 ~ d6 ~ d6 ~", R: "a6 ~@3 a6 ~@3 a5 ~@3 a5 ~@3",
})).s("gm_tremolo_strings").gain(0.35)

// chords · tremolo strings · "Strings" · soft notes
const tremolo_strings_soft = note("<A B C D E F ~ G H ~@28 I ~ J ~@17 K@2 ~ L ~@49>".pickRestart({
  A: "~@2 g5@2 a#5@2 g5@2 ~ g5@2 ~@2 g5@2 d#5@2 g5@2 ~ g5@2 ~ d#5@2 ~@7, ~ d#5@2 ~@5 d#5@2 ~@2 a#5@2 ~@5 a#5@2 ~@11",
  B: "~@12 f4 ~@3", C: "~@7 d#4@2 ~@16 d4@2 ~@5", D: "~@11 c#4 ~@4", E: "~@19 c4@2 ~@11", F: "~@20 b3 ~@11",
  G: "~@13 g#5@2 ~@17", H: "~@7 g#5@4 ~ g#5@4 g#5@4 g#5@4 ~@8", I: "b4@4 a4@8 ~ g4@4 g4@4 ~@11", J: "~ a4 g4@2",
  K: "[~@26 b4@4 a4@8 g4@4 ~ g4@4 ~@17]/2", L: "~ a4@8 ~ g4@17 ~@5",
})).s("gm_tremolo_strings").gain(0.18)

// drums · kick
const kick = s("bd").struct(`<
  ~@43 A B C D E F G H I J K L M N O P Q R S T U V@7 W V@12 W V@7 W V@7 W V W V W V W V W V
>`.pickRestart({
  A: "~@7 x ~@15 x ~@8", B: "~@7 x ~@16 x ~@7", C: "~ x!2 ~@2 x!2 ~", D: "~@4 x ~@4 x ~@11 x ~@3 x ~@6",
  E: "~@5 x ~@3 x ~@12 x ~@3 x ~@5", F: "~@3 x ~ x ~@5 x ~ x ~@2", G: "~@11 x ~@15 x ~@4",
  H: "~@11 x ~@7 x ~@4 x ~@3 x ~@3", I: "x!4 ~@3 x", J: "~@9 x ~@3 x ~@11 x ~@4 x ~", K: "~@10 x ~@3 x ~@12 x ~@3 x",
  L: "~@12 x ~@3 x ~@12 x ~@2", M: "~ x ~@12 x ~@3 x ~@12 x", N: "~@3 x ~@11 x ~@4 x ~@11",
  O: "x ~@4 x ~@11 x ~@3 x ~@10", P: "~@2 x ~@3 x ~@12 x ~@3 x ~@8", Q: "~@4 x ~@3 x ~@12 x ~@3 x ~@6",
  R: "~@6 x ~@3 x ~@12 x ~@3 x ~@4", S: "~@7 x ~@4 x ~@11 x ~@3 x ~@3", T: "~@9 x ~@3 x ~@12 x ~@3 x ~",
  U: "~@11 x ~@3 x ~@12 x ~@3", V: "x ~@2 x!2 ~@2 x", W: "x ~ x!6",
})).gain(0.4)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@50 A ~@20 B ~@12 B ~@7 B ~@7 B ~ B ~ B ~ B ~ B ~>".pickRestart({
  A: "~@19 x ~@12", B: "~ x ~@2",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@49 A@2 B C ~@11 D@14 ~@5 D@3 ~@5 D@3 ~@5 D@11>".pickRestart({
  A: "~@11 x ~@20", B: "~@3 x ~@4", C: "~@13 x ~@18", D: "x",
})).gain(0.3)

stack(electric_guitar_jazz, bass, tremolo_strings, tremolo_strings_soft, kick, snare, snare_soft, crash)

More by Electric Light Orchestra