Strudelify

Love Changes Everything

Michael Ball

KeyA majorTempo90 bpm
0:00/0:00
// Love Changes Everything — Michael Ball
// 90 bpm, 4/4, key A 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: Full arrangement: all 77 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · piano
const piano = note(`<
  ~@4 A@8 B@2 C@7 D@2 E@8 F@5 G@5 H@7 I J K L M N O L P Q R S T U V@2 W X Y Z AA AB@5 ~@3
>`.pickRestart({
  A: "[~@45 a3@6 ~@6 c#4@6 ~@13 a3@18 a3@6 a3@6 a3@3 c#4@3 [e4,g#4]@6 b4@6 e4@12 ~@6 c#4@12 ~@13 [a3,d4,e4,f#4]@6 a3@18 ~@18 e3@6 d3@6 ~@18 a3@12 [a3,c#4]@6 ~@7 b3@6 ~@30 d4@6 [e4,g#4]@6 [e4,b4]@6 ~@12 a3@18 ~ a3@6 a4@6 [a3,d4,f#4]@6 [a2,a3,c#4]@17, ~@27 [a2,e4,a4]@36 [e2,e4,g#4]@12 ~ [a2,e4,a4]@36 ~@12 a2@48 ~ a2@42 ~@6 [a2,e4,a4]@36 ~@13 [a2,e4,a4]@36 ~@12 [a2,a4]@36 ~@30, ~@27 c#4@30 ~@12 c#4@36 ~@19 a4@36 d3@12 ~@86 [e3,e4,g#4]@12 ~@36 e3@12 ~@37 d3@12 ~@17, ~@51 a3@12 ~@49 e3@12 c#4@18 ~@12 a3@12 ~@25 a3@30 ~@67 a3@18 ~@78, ~@136 e4@30 ~@7 [c#4,e4]@48 c#4@30 ~@19 c#4@30 ~@61 e4@23]/8", // E D A E E5 D A A5 …
  B: "[~ a2@12 a2@6 g#2@6 f#2@6 ~@43 e3@6 [a3,e4,a4]@16, ~@31 e2@48 ~@17, ~@31 [e4,g#4,b4]@24 ~ [e4,g#4,b4]@24 ~@16, ~@49 e3@21 ~@26]/2", // A5 E
  C: "[~@14 a3@6 c#4@6 d4@6 a3@18 ~ a3@6 [d3,d4,f#4]@24 [e4,a4]@12 [e4,g#4]@24 b4@3 g#4@3 e4@6 a3@18 ~ a3@6 ~@6 c#4@6 b3@6 b3@6 a3@18 a3@6 ~@6 c#4@6 b3@6 b3@6 ~ a3@18 a3@6 a3@6 ~@6 g#4@6 b4@6 a3@18 a3@6 ~@6 a4@6 g4@6 ~ e4@6 [d3,d4,f#4,a4]@12, ~@2 a3@12 ~@18 [a2,c#4,e4]@24 ~@25 [e2,e3]@48 [a2,e4,a4]@36 ~@13 [a2,e4,a4]@36 ~@13 [a2,c#4,e4,a4]@36 ~@12 a2@48 ~@13, ~@8 [e4,a4]@24 ~@61 b3@36 c#4@30 ~@19 c#4@30 ~@49 b3@18 c#4@42 ~@19, ~@154 a3@12 [e3,e4,g#4]@12 ~@24 a3@12 [e3,e4,g#4]@12 ~@37 [e3,e4]@12 e4@36 ~@25, ~@275 a4@24 a3@24 ~@13]/7", // D A5 E D A E A5 A …
  D: "[~@6 d3@3 ~@9 d4@6 [d4,f#4]@6 d3@6 [e3,d4,f#4]@12 f#4@6 e3@6 [e3,b3,e4,g#4]@12 ~ [b3,e4,g#4]@6 e3@3 ~@3 [a2,c#4,e4,a4]@11, [f#4,a4]@7 ~ a4@4 ~@4 d4@4 ~@12, d4 d3 ~ a3@2 ~@3]/2", // D E A F#m
  E: "[~@7 a2@3 ~@3 a2@12 [d2,d4,f#4,a4]@3 ~@3 [d2,d4,f#4]@6 c#4@12 ~@6 a2@3 ~@16 c#4@6 e4@6 ~@18 a3@5 ~@6 c#4@5 ~@13 a3@17 ~ a3@5 ~ a3@5 ~@4 c#4@2 ~ g#4@5 ~ b4@5 ~ e4@11 ~@7 c#4@11 ~ a3@5 ~@7 [a3,d4,e4,f#4]@5 ~ a3@14 ~@22 e3@5 ~ d3@5 ~@19 a3@12 [a3,c#4]@6 ~@6 b3@6 ~@31 d4@6 [e4,g#4]@6 [e4,b4]@6 [a2,a4]@10, ~ [c#4,e4,a4]@24 ~@6 a4@54 ~@96 a4@41 ~@162, ~@37 e4@36 ~@36 a3@11 ~@43 a3@5 ~ [e3,e4]@11 ~@13 e4@29 ~@55 [c#4,e4]@30 ~@18 c#4@30 ~@29, ~@37 a2@18 ~@6 a2@21 ~@4 [a2,e4,a4]@35 [e2,e4,g#4]@11 ~ [a2,e4,a4]@35 ~@13 a2@35 ~ d3@11 ~ [a2,c#4,e4]@47 ~ [a2,a4]@36 ~@12 [a2,e4,a4]@36 ~@23, ~@49 c#4@24 ~@13 c#4@29 ~@12 c#4@38 ~@16 c#4@17 ~@49 a3@29 ~@37 [e3,e4,g#4]@12 ~@18 a3@18 ~ e3@12 ~@10]/8", // D A E E5 A E C#m A5 …
  F: "[~@2 a3@18 a3@6 ~ a4@6 [a3,d4,f#4]@6 a2@15 ~@3 a2@27 ~@4 b3@12 ~@6 e2@3 ~@21 e2@6 a2@15 ~@4 a2@3 ~@9 c#4@6 ~@9 c#4@3 a2@12 ~@6 a2@6 [d3,d4,f#4,a4]@12 ~@6 d3@6 ~ [e3,b3,e4,a4]@6, ~@27 d3@12 [a3,c#4]@46 ~@3 e2@18 ~@6 e2@18 ~@31 a2@12 ~@6 a2@6 ~@55, ~@33 e4@55 [e4,g#4]@33 ~@3 [e4,g#4]@12 [e4,a4]@33 ~@16 [e4,a4]@24 ~@31, ~@100 b3@15 ~@3 b3@18 c#4@27 ~@10 [c#4,e4,a4]@12 c#4@9 ~@3 c#4@12 ~@12 [d4,f#4,a4]@12 ~@7]/5", // D Esus4 A E A5 A D
  G: "[~@12 e3@3 ~@24 e3@3 a2@12 ~@6 a2@3 ~@3 a2@9 ~@4 [e2,b3,e4,g#4]@12 [a2,c#4]@12 ~@6 a2@3 ~@3 a2@12 [e2,b3,e4,g#4]@12 a2@12 ~@6 a2@3 ~@3 a2@12 ~ [e2,b3,e4,g#4]@12 [c#4,e4]@9 ~@9 a2@3 ~@3 c#4@3 ~@3 c#4@3 ~@9 a2@6 [d3,d4,f#4,a4]@4, ~@6 [b3,e4]@24 b3@12 c#4@9 ~@3 c#4@21 ~@28 c#4@21 ~@15 c#4@9 ~@3 c#4@21 ~@16 a2@12 ~@12 a2@18 ~@10, ~@18 [e3,g#4]@15 e4@9 [e4,a4]@33 ~@16 [e4,a4]@33 ~@15 [e4,a4]@33 ~@28 [c#4,e4]@12 [e4,a4]@12 [c#4,e4,g4,a4]@12 ~@4, ~@18 g#4@3 ~@73 a4@12 ~@14]/5", // E A E C#m D E5 E A5 …
  H: "[~@14 d3@3 ~@10 d4@6 [d4,f#4]@6 d3@6 [e3,d4,f#4]@12 f#4@6 e3@6 [e3,b3,e4,g#4]@12 ~@6 e3@3 ~@3 [c#4,e4,a4]@9 ~@10 a2@3 ~@9 c#4@3 ~@3 [c#4,e4,a4]@6 a2@6 [c#4,e4,a4]@9 ~@9 g2@6 [e4,a4]@6 c#4@3 ~@3 [c#4,e4,a4]@6 g2@6 [f#2,d4]@13 ~@6 f#2@3 ~@3 d4@3 ~@3 d4@6 [d4,f#4,a4]@6 ~@3 d4@3 [b2,d4,f#4,a4]@12 ~@6 b2@6 [d4,f#4,a4]@6 d4@3 ~@3 [d4,f#4,a4]@6 b2@6 [e2,c#4,e4,a4]@13 ~@6 e2@6 a4@6 c#4@6 [c#4,e4,a4]@6 e2@3 ~@3, ~@8 [f#4,a4]@21 ~@4 a4@12 ~@12 d4@12 ~@36 [e4,a4]@21 ~@28 [c#4,e4,a4]@12 c#4@3 ~@21 [f#4,a4]@9 ~@4 [d4,f#4,a4]@12 ~@36 [d4,f#4,a4]@12 ~@37 [c#4,e4,a4]@12 c#4@3 ~@21, ~@8 d4@13 d3@15 ~@9 a3@21 ~@15 [b3,e4,g#4]@12 a2@12 c#4@13 a2@15 ~@9 g2@12 ~@12 g2@15 ~@34 [f#2,f#4,a4]@15 ~@3 f#2@6 ~@24 b2@15 ~@34 [e2,e4]@15 ~@9]/7", // D E A A5 A D Bm7 D …
  I: "[e2,d4,f#4,a4]@11 ~ [d4,f#4,a4]@6 e2@2 ~@4 [e2,d4,f#4,a4]@2 ~@10 [e2,d4,f#4,a4]@2 ~@10", // D
  J: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ [f2,c4,f4,a4]@11 ~, [d4,f4,a#4]@2 ~", // F A#
  K: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ a4@6 c5@2 ~@4, [d4,f4,a#4]@8 ~ [f2,c4,f4]@3", // A# F5
  L: "a#2@12 ~@6 a#2@2 ~@4 a#2@11 ~ f4@5 ~@4 d#3@2 ~, [f4,a#4]@32 ~@10 d#4@5 ~, d4@8 ~@4 d4@20 ~@4 [d#3,g4,a#4]@11 ~", // A#5 D#
  M: "a#2@7 ~@2 a#2 ~@11 a#4 ~@2, [f4,a#4]@38 ~ f4@8 ~, d4@32 ~@4 d4@11 ~, ~@6 a#2@5 ~", // A#5
  N: "a#2@14 ~@4 a#2@2 ~@10 d4@2 ~@4 [f2,c4,f4,a4]@11 ~, [f4,a#4]@35 ~@13, d4@29 ~@19, ~@24 a#2@11 ~@13", // F A#5
  O: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~@7 c5@2 ~@4, [d4,f4,a#4]@32 ~@4 [f2,c4,f4,a4]@11 ~", // A# F
  P: "a#2@12 ~@6 a#2@2 ~@16 a2@5 ~ g2@5 ~, a#4@11 ~, f4@29 ~ d4@14 ~@4, d4@8 ~@4 d4@12 a#2@9 f4@14 ~",
  Q: "[f2,c4]@12 ~@6 f2@2 ~@16 [f4,a4]@6 f2@5 ~, [f4,a4]@15 c4@7 ~@2, ~@6 c4@6 f2@7 ~@5", // F5 F
  R: "a#2@14 ~@4 a#2@2 ~@10 d4@5 ~@10 d4@2 ~, [f4,a#4]@32 ~@4 [d4,f4,a#4]@11 ~, d4@24 a#2@14 ~@4 a#2@5 ~", // A#5 A#
  S: "a#2@12 ~@6 d3@5 ~ [d#3,a#4]@12 ~@6 d#3@5 ~, [f4,a#4]@23 ~@25, d4@8 ~@4 d4@11 ~ [d#4,g4]@8 ~@4 [d#4,g4,a#4]@11 ~", // D#5 A#5 D#
  T: "[f3,f4]@12 ~@6 f3@2 ~@25 f3@2 ~, a#4@23 ~ [f3,a4]@15 f4@8 ~, c4@8 ~@4 [c4,f4]@23 ~ c4@6 a4@5 ~", // F F5
  U: "a#2@12 ~@6 a#2@2 ~@4 a#2@8 ~@4 [f2,c4,f4,a4]@11 ~, [f4,a#4]@2 ~, d4@2 ~ d4@5 ~@4", // F A#5
  V: "a#2@12 ~@6 a#2@2 ~@4 a#2@11 ~ [f2,c4,f4,a4]@11 ~, [f4,a#4]@2 ~, d4@2 ~ d4@5 ~@4", // F A#5
  W: "[d4,f4]@4 ~@5 a#2 ~@2 d4 ~@2 d4 ~@5 a#2@3, a#4@23 ~@13 [d4,f4,g#4,a#4]@11 ~, a#2@12 [d4,f4]@11 ~ [a#2,f4,a#4]@14 ~@10", // Dm A#7 Dm A#5
  X: "[d#4,g4,a#4]@8 ~@10 d#3@2 ~@10 d#4@5 ~ [d#4,g4]@5 ~ d#3@5 ~, d#3@12 [g4,a#4]@20 ~@4 a#4@11 ~, ~@6 d#4@6 d#3@7 ~@5", // D# Gm
  Y: "[f3,d#4,g4]@12 g4@5 ~ f3@5 ~ [f3,c4,f4,a4]@12 ~@6 f3@2 ~@4, a#3@20 ~@16 [c4,f4,a4]@11 ~, ~@12 d#4@11 ~@25", // Cm F
  Z: "[d4,f4,a#4]@3 ~@3 a#2 ~ [f4,a#4]@2 d4 ~ [d4,f4,a#4]@2 a#2 ~, a#2@4 [d4,f4,a#4]@4 a#2@5 ~@3, ~@8 d4 ~@7", // A# A#5 A#
  AA: "~ [d4,f4,a#4]@9 ~@3 [d4,f4,a#4]@6 g#2@6 [f4,a#4]@6 d4@3 ~@3 [d4,f4,a#4]@6 g#2@5, ~ g#2@12 ~@12 g#2@15 ~@8, ~@25 d4@3 ~@20", // A# A#5 A#
  AB: "[~@2 [g2,d#4,g4,a#4]@12 ~@6 g2@6 d#4@6 ~ d#4@3 ~@3 [d#4,g4,a#4]@6 g2@6 [a#3,d#4,g4]@12 ~ [a#3,d#4,g4]@7 f2@6 [c4,f4,a4]@10 ~@4 [c4,f4,a4]@7 f2@6 ~ [a#2,d4,f4,a#4]@112 ~@23, ~@14 [d#4,g4,a#4]@12 [g2,g4,a#4]@12 ~@13 f2@13 ~@13 f2@14 ~@149]/5", // D# F A# D# Gm
})).s("gm_piano").gain(0.35).pan(0.7)

// bass · acoustic bass
const bass = note(`<
  A@3 B C D E F@3 G H I J K L M N O P Q R S@4 T U V@2 W X Y@2 Z AA@2 AB@2 AC@2 AD@7 AE AF AG AH AI AG AJ AH AK AL AM AN
  AL AG@2 AJ AO AP AL AQ AR AS@2 AT@6
>`.pickRestart({
  A: "[~@27 a2@41 ~@7 a2@44 ~@4 a2@17 ~ a2@2 ~]/3", B: "~@3 a2@17 ~@7 a2@14 ~@4 a2@2 ~",
  C: "~@3 a2@8 ~@4 e2@11 ~@19 a2@3", D: "~@3 a2@12 e2@12 ~ a2@15 ~@3 a2@2", E: "~@4 a2@12 e2@12 a2@15 ~@3 a2@2",
  F: "[~@4 a2@12 d2@12 ~ a2@15 ~@3 a2@3 ~@3 a2@18 e2@6 a2@15 ~@3 a2@3 ~@3 a2@12 ~ e2@12 a2@15 ~@3]/3",
  G: "a2 ~ a2@4 e2@4 a2@5 ~", H: "a2@3 ~@3 a2@12 ~ d2@12 a2@15 ~@2", I: "~ a2@3 ~@3 a2@12 g#2@6 f#2@6 e2@15 ~@2",
  J: "~ e2@3 ~@4 e2@15 ~@3 e2@6 a2@15 ~", K: "~@2 a2@3 ~@3 a2@21 ~@3 a2@15 ~", L: "~ a2@2 d2@5 ~ d2@2 e2@5",
  M: "~ e2 ~ e2@5 ~ e2@2 a2@5", N: "~@4 a2@3 ~@3 a2@12 e2@12 a2@14", O: "~@4 a2@3 ~@3 a2@12 e2@12 ~ a2@13",
  P: "~@5 a2@3 ~@3 a2@12 e2@12 a2@13", Q: "~@5 a2@3 ~@3 a2@15 ~@4 a2@6 d2@12", R: "~@2 d2 ~ d2@8 e2@4",
  S: "[~@6 e2@3 ~@3 e2@24 ~ a2@15 ~@3 a2@3 ~@3 a2@12 d2@3 ~@3 d2@6 a2@15 ~@3 a2@3 ~@3 a2@18 ~ e2@6 a2@14 ~@4 a2@2 ~@3 a2@11 ~ e2@11 ~ a2@11]/4",
  T: "~@7 a2@2 ~@4 a2@11 ~ e2@11 ~ a2@11", U: "~@7 a2@2 ~@4 a2@11 ~ d2@11 ~ a2@11",
  V: "[~@7 a2@2 ~@4 a2@17 ~ e2@5 ~ a2@15 ~@3 a2@3 ~@3 a2@12 e2@12 a2@11]/2", W: "~@7 a2@3 ~@3 a2@12 ~ e2@12 a2@10",
  X: "~@8 a2@3 ~@3 a2@12 ~ d2@12 a2@9", Y: "[~@9 a2@3 ~@3 a2@12 ~ g#2@6 f#2@6 e2@15 ~@3 e2@3 ~@3 e2@24 a2@8]/2",
  Z: "~@11 a2@3 ~@3 a2@21 ~@3 a2@7", AA: "[~@11 a2@6 d2@15 ~@3 d2@6 ~ e2@15 ~@3 e2@3 ~@3 e2@15 ~@3 e2@6 a2@6]/2",
  AB: "[~@12 a2@3 ~@3 a2@12 ~ e2@12 a2@15 ~@3 a2@3 ~@3 a2@12 e2@12 a2@5]/2",
  AC: "[~@13 a2@3 ~@3 a2@12 ~ e2@12 a2@15 ~@3 a2@3 ~@3 a2@12 e2@9 ~@3 d2@4]/2",
  AD: "[~@14 d2@3 ~@4 d2@18 d2@6 e2@15 ~@3 e2@3 ~@3 e2@15 ~@3 e2@6 a2@15 ~@4 a2@3 ~@3 a2@3 ~@3 a2@9 ~@3 a2@6 g2@15 ~@3 g2@3 ~@3 g2@12 g2@12 f#2@15 ~@4 f#2@3 ~@3 f#2@15 ~@3 f#2@6 b2@18 b2@3 ~@3 b2@15 ~@3 b2@6 e2@15 ~@4 e2@3 ~@3 e2@21 ~@3]/7",
  AE: "e2@14 ~@4 e2@2 ~@4 e2@2 ~@10 e2@5 ~@7", AF: "a#2@11 ~@7 a#2@2 ~@4 a#2@11 ~ f2@11 ~",
  AG: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ f2@11 ~", AH: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ d#2@11 ~",
  AI: "a#2@14 ~@4 a#2@2 ~@4 a#2@14 ~@4 f2@5 ~", AJ: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ f2@8 ~@4",
  AK: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ a2@5 ~ g2@5 ~", AL: "f2@14 ~@4 f2@2 ~@4 f2@14 ~@4 f2@5 ~",
  AM: "a#2@7 ~@2 a#2 ~@2 a#2@7 ~@2 a#2 ~@2", AN: "a#2@14 ~@4 a#2@2 ~@4 d#2@14 ~@4 d#2@5 ~",
  AO: "a#2@14 ~@4 a#2@2 ~@4 a#2@11 ~ a#2@11 ~", AP: "d#2@14 ~@4 d#2@2 ~@4 d#2@14 ~@4 d#2@5 ~",
  AQ: "a#2@5 ~ a#2 ~ a#2@2 a#2@3 ~ a#2@2", AR: "~ g#2@15 ~@3 g#2@3 ~@3 g#2@9 ~@3 g#2@11",
  AS: "[~@2 g2@15 ~@3 g2@3 ~@3 g2@15 ~@4 g2@6 f2@16 ~@4 f2@3 ~@3 f2@17 ~@2]/2",
  AT: "[~@2 f2@6 ~ a#2@145 ~@13 d#2@29 ~ a#2@62 ~@29]/6",
})).s("gm_acoustic_bass").gain(0.45).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@5 ~@7 B@8 C@4 D@2 E@3 F@6 G@7 H@6 I J@3 K@2 L@3 M@2 N O P Q@3 R@2 S T U@8
>`.pickRestart({
  A: "[~@27 a3@44 ~@4 a3@44 ~@4 a3@41 ~@7 a3@44 ~@25]/5", B: "[~@31 e4@97 c#4@24 ~ d4@24 e4@45 ~@3 e4@159]/8",
  C: "[~@5 a3@6 c#4@12 e4@12 ~ f#4@72 g#4@24 ~ a4@33 ~@26]/4",
  D: "[~@38 a3@23 a3@11 ~ b4@5 ~ d5@5 ~ [a2,a4,c#5]@11, ~@19 e4@29, ~@38 [a2,c#4,a4]@35 e3@11 ~@12]/2", // A
  E: "[~@31 e3@5 ~ [a2,a3,c#4]@35 ~ [d3,d4]@11 ~ [a2,a3,e4]@47 ~ [a2,c#4,e4,a4]@11, ~@5 e4@13 ~@54, ~@25 [g#4,b4]@11 ~ a4@47 ~@60]/3", // A D A5 A G#m
  F: "[~@25 b4@6 d5@6 [a2,a3,a4,c#5]@36 ~ [e3,g#4,b4]@12 [a2,a3,e4]@36 ~ [d3,d4,f#4,d5]@12 [e4,c#5]@30 ~ [a4,c#5]@6 [g#4,b4]@6 [f#4,a4]@6 e5@30 f#5@6 e5@6 d5@6 c#5@42 ~ d5@6 e5@7, ~@25 e4@60 ~ a4@73 ~@129, ~@25 [e3,g#4]@12 ~@98 [a2,a3]@49 [g#3,b3,e4]@48 [a3,c#4,e4]@56]/6", // A E A5 D C#m A G#m F#m …
  G: "[~@17 f#5@18 d5@6 ~ c#5@12 b4@27 ~@9 [a3,c#4,a4]@36 ~ b4@6 d5@6 [a3,c#4,c#5]@36 [g#3,b3,g#5]@12 a5@18 e5@3 e5@3 a5@6 ~ e5@6 d5@6 f#5@6 e5@18 a4@6 c#5@12 e5@12 f#5@6 e5@6 e5@6 d5@3 ~@4 d5@6 c#5@6 c#5@6 b4@6 [a3,f#4]@3, ~@17 [f#3,a3,d4]@24 ~ e4@242 a3@48 ~@4, ~@42 [g#3,b3]@48 ~@37 [g#3,b3]@12 ~@48 [a3,c#4]@36 ~ [g#3,b3]@12 [a3,c#4]@48 [f#3,d4]@52]/7", // A G#m D G#m A G#m A D
  H: "[~@21 [g#3,b3,e4,g#4]@24 ~@37 [a4,a5]@6 [b4,b5]@6 [c#5,c#6]@12 [b4,b5]@12 [c#5,c#6]@12 [e5,e6]@12 [f#5,f#6]@6 [e5,e6]@6 ~ [e5,e6]@6 d5@6 [d5,d6]@6 [c#5,c#6]@6 [c#5,c#6]@6 [b4,b5]@6 [f#5,f#6]@6 [e5,e6]@6 [e5,e6]@6 d5@6 [d5,d6]@6 [c#5,c#6]@6 [c#5,c#6]@6 [b4,b5]@6 [e4,e5,e6]@36 ~ [e4,e5]@6 [f4,f5] [g4,g5] [a4,a5] ~ [b4,b5] [c5,c6], ~@45 [c#4,e4]@69 ~@4 [c#4,e4]@24 ~@19 d6@3 ~@45 d6@3 ~@76, ~@45 a3@48 ~ g3@48 [f#3,a3,d4,f#4]@48 ~ [b3,d4,f#4]@48 [a3,c#4]@48 ~]/6", // E A B C# B C# E F# …
  I: "[a3,d4,f#4,e5,e6]@5 ~ [a3,d4,f#4,e5,e6] ~@2 [a3,d4,f#4,e5,e6] ~@2, [d5,d6] ~@23", // D
  J: "[[a#3,d4,f4,a#5]@35 ~ c6@5 ~ d#6@5 ~ d6@8 ~ c6@2 ~ a#5@23 ~ a5@5 ~ c6@5 ~ a#5@11 ~ f5@23 ~ d#5@5 ~ g5@5 ~, ~@36 f4@95 ~@13, ~@36 [a3,c4]@11 ~ [a#3,d4]@35 ~ [a3,c4]@11 ~ [a#3,d4]@35 ~ [g3,a#3,d#4]@11 ~]/3", // A# Am A# Am A# D#
  K: "[f5@47 ~@31 a#5@5 ~ c6@5 ~ d#6@5 ~, f4@95 ~, [a#3,d4]@83 ~ [a3,c4]@11 ~]/2", // A# Am
  L: "[d6@8 ~ c6@2 ~ a#5@23 ~ a5@5 ~ c6@5 ~ a#5@11 ~ f5@23 ~ d#5@5 ~ g5@5 ~ f5@35 ~@7 f5 ~ g5 a5 ~@2, f4@83 ~ [d#4,g4]@11 ~ [d4,f4]@47 ~, [a#3,d4]@35 ~ [a3,c4]@11 ~ [a#3,d4]@35 ~ a#3@59 ~]/3", // D# Dm A# Am A#
  M: "[c6@26 ~@4 g6@5 ~ f6@5 ~ d#6@5 ~ d6@32 ~@4 d5@5 ~ d#5@5 ~, f4@23 ~, [a3,c4]@47 ~ [a#3,d4]@47 ~, a#5 ~@47]/2", // Am A#
  N: "f5@14 ~@4 f5@5 ~ g5@17 ~ d#5@5 ~, [a#3,d4,f4]@23 ~ [a#3,d#4,g4]@23 ~", O: "d5@11 ~ c5@29 ~@7, [a3,c4,f4]@47 ~",
  P: "[a#3,d4,f4,a#4]@35 ~ [a3,c4,f4,c5]@11 ~", // A# F
  Q: "[[a#3,d4,f4,d5]@35 ~ [a3,c4,a4]@11 ~ [a#3,d4,a#4]@35 ~ [a3,c4]@11 ~ a#3@42 ~ [a#4,a#5] [c5,c6] [d5,d6] [d#5,d#6] ~, ~@36 f4@47 ~ f4@59 ~, ~@96 d4@47 ~]/3", // A# Am A# Am A# C D D#
  R: "[[g5,a#5,g6]@5 ~ [f5,a#5,f6]@5 ~ [f5,a#5,f6]@5 ~ [d#5,a#5,d#6]@5 ~ [d#5,a#5,d#6]@5 ~ [d5,a#5,d6]@5 ~ [d5,a#5,d6]@5 ~ [c5,c6]@5 ~ [g4,g5]@23 ~ [a3,c4,f4,a4,a5]@23 ~, [a#3,d#4]@71 ~@25, g4 ~, [f5,f6] ~@47]/2", // Gm A#5 D#5 Gm C G F D#5 …
  S: "[a#3,a#4,a#5]@6 [a#3,a#4] [c4,c5] [d4,d5]@2 [f4,f5]@2 [a#4,a#5]@2 [c5,c6]@2, f4@5 ~@3, d4 ~", // A# C D F A# C
  T: "~ [d5,d6]@12 [c5,c6]@12 [d5,d6]@12 [f5,f6]@11, ~ g#3@47, ~ d4@21 ~@3 [d4,f4]@23", // D C D F Dm
  U: "[~@2 [g5,g6]@6 [f5,f6]@6 [f5,f6]@6 [d#5,d#6]@6 [d#5,d#6]@6 ~ [d5,d6]@6 [d5,d6]@6 [c5,c6]@6 [a#3,d#4,g4,g5]@25 ~ [a4,a5]@17 ~@3 [a#4,a#5] [c5,c6] [d5,d6] [d#5,d#6] ~ [f5,f6] [g5,g6] [a5,a6] [a#1,a#3,d4,f4]@157 ~@8 [g3,a#3,d#4]@22 ~ [a#3,d4,a#4]@59 ~@32, ~@2 [g3,a#3,d#4,g4]@49 ~@26 [a3,c4,f4]@27 ~ a#5@250 ~@29, ~@105 a#6@164 ~@115]/8", // G F D# D C D# A A# …
})).s("gm_string_ensemble_1").gain(0.3)

// other · flute
const flute = note("<~@28 A@2 ~@47>".pickRestart({
  A: "[~@7 e5 ~@2 e5@2 ~ a5@4 ~@2 e5@4 ~@2 d5@4 ~@2 f#5@4 ~@2 e5@20 ~@39]/2",
})).s("gm_flute").gain(0.4).pan(0.3)

// other · clarinet
const clarinet = note("<~@25 A ~ B@2 ~ C@2 ~@45>".pickRestart({
  A: "~@25 b4@2 ~@4 d5@2 ~@4 c#5@8 ~@3", B: "[~@7 e5 ~@2 e5@2 ~ a5@2 ~@4 e5@2 ~@4 d5@4 ~@2 f#5@4 ~@2 e5@23 ~@36]/2",
  C: "[~@7 e5 ~@2 e5@3 a5@3 ~@4 e5@4 ~@2 d5@4 ~@2 e5@4 ~@2 c#5@24 ~@34]/2",
})).s("gm_clarinet").gain(0.4)

// chords · french horn
const french_horn = note(`<
  A@5 ~@18 B@2 ~@9 C@2 ~@4 D@7 E@2 ~@3 F G ~ H I J K L M N O P Q R S T U V W@2 X@5
>`.pickRestart({
  A: "[~@27 [c#4,a4]@29 ~ [c#4,a4]@2 ~@4 [d4,b4]@2 ~@4 [f#4,d5]@2 ~@4 [e4,c#5]@8 ~ [d4,b4]@2 ~ [c#4,a4]@24 [b3,g#4]@5 ~ [d4,b4]@2 ~@4 [c#4,a4]@11 ~ [a3,e4]@23 ~ [f#3,d4]@5 ~ [a3,f#4]@5 ~ [a3,c#4,e4]@47 ~@22]/5", // F#m G D C#m G F#m E G …
  B: "[~@25 [a3,d4]@3 ~@3 [d4,f#4]@6 [c#4,e4]@42 ~@17, ~@31 a3@51 ~@14]/2", // D5 D C#m
  C: "[~@11 e4@3 e4@3 a4@3 ~@3 e4@3 ~@3 d4@6 f#4@6 e4@24 ~@31]/2",
  D: "[~@44 a4@48 ~ d4@48 c#4@45 ~@4 c#4@12 b3@12 c#4@12 e4@12 f#4@6 e4@3 ~@4 e4@6 d4@6 d4@6 c#4@6 c#4@6 b3@6 f#4@6 e4@6 e4@6 d4@3 ~@3 d4@6 c#4@3 ~@3 c#4@6 b3@6 ~, ~@190 g3@48 a4@45 ~@4 a4@48 ~]/7",
  E: "[~@12 e4@12 a4@12 e4@18 ~@6 e4@11 ~ g#4@5 ~@19]/2",
  F: "~@18 [d4,f4]@2 ~ [d4,f4]@2 ~ [f4,a#4]@2 ~@4 [d4,f4]@2 ~@4 [a#3,d#4]@2 ~@4 [d#4,g4]@2 ~@4", G: "[d4,f4]@23 ~@25",
  H: "~@18 [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,a#4]@2 ~@4 [d4,f4]@2 ~@4 d#4@5 ~ [a#3,g4]@2 ~@4, ~@18 a#3 ~@5", // Dm Gm Dm D#
  I: "[d4,f4]@23 ~@7 [d3,d4]@2 ~@4 [c3,c4]@2 ~@4 [a#2,a#3]@2 ~@4", J: "~@12 a4@8 ~ a#4@2 ~ c5@11 ~ f4@12",
  K: "~@12 [d4,a#4]@8 ~ [f4,c5]@2 ~ [a#4,d5]@20 ~@4", // Gm F5 A#
  L: "[f4,a#4,d5,f5]@17 ~ [f4,a#4,d5,f5]@5 ~ [g4,a#4,d#5,g5]@17 ~ [g4,a#4,d#5,g5]@5 ~", // A# D#
  M: "[d4,f4,a#4,d5]@11 ~ [c4,f4,a4,c5]@35 ~", N: "~@18 [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,a#4]@2 ~@4 d4@5 ~@13, ~@15 f4 ~@8",
  O: "~@18 [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,a#4]@2 ~@4 [d4,f4]@2 ~@16", // Dm Gm Dm
  P: "~@18 [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,a#4]@2 ~@4 [d4,f4]@2 ~@4 d5@5 ~ c5@5 ~, ~@36 [f4,a4]@11 ~", // Dm Gm Dm F
  Q: "[f4,a#4,d5,f5]@47 ~", R: "[g4,a#4]@47 ~", S: "[d#4,g4]@23 ~ [f4,a4]@23 ~", T: "[d4,f4]@6 a#3 c4",
  U: "~ d4@12 c4@12 d4@12 f4@11, ~ g#3@47", V: "~ [g4,a#4]@23",
  W: "[~@3 [d#4,g4]@25 ~ [f4,a4]@24 ~@4 [d4,a#4]@31 ~@4 [d4,a#4]@4]/2", // D# F Gm
  X: "[~@3 d#4@7 [g4,d#5]@6 ~ [f4,d5]@10 ~ [d#4,c5]@3 [d4,a#4]@24 ~@4 [c4,a4]@6 ~ [d#4,c5]@6 ~ [d4,a#4]@16 ~ [a#3,f4]@22 ~@7 [g3,d#4]@13 ~ [a#3,g4]@16 [a#3,d4,f4]@62 ~@29, ~ c5@2 ~@77]/5", // Cm Dm Cm Gm F Cm Gm A#5 …
})).s("gm_french_horn").gain(0.4)

// chords · tubular bells
const tubular_bells = note("<~@50 A B C D E F ~@4 G H I ~@14>".pickRestart({
  A: "~@36 a4@5 ~ c5@5 ~", B: "a#4@7 ~@17",
  C: "~@18 [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,a#4]@2 ~@4 [d4,f4]@2 ~@4 [a#3,d#4]@2 ~@4 [a#3,g4]@2 ~@4", // Dm Gm Dm D#5 D#
  D: "[d4,f4]@2 ~@28 d4@2 ~ f4@2 ~ a#4@2 ~@4 [f4,a4,c5]@2 ~@4", // Dm F
  E: "[f4,a#4,d5]@2 ~@16 [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,a#4]@2 ~@4 [d4,f4]@2 ~@4 [a#3,d#4]@2 ~@4 [a#3,g4]@2 ~@4", // A# Dm Gm Dm D#5 D#
  F: "[d4,f4] ~@23", G: "~@36 f4@11 ~", H: "a#4@10 ~@5 a#4 ~@2 c5 ~@2 d#5 ~@2", I: "d5@5 ~@4 c5@2 ~ a#4@8 ~@28",
})).s("gm_tubular_bells").gain(0.25)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@13 A@2 B@2 C@2 D E F G@2 H G@5 I J K L M@2 N O@2 P Q R S T U V@2 W X@4 Y X@3 Z X@7 AA W Y W AB AC ~@7
>`.pickRestart({
  A: "~@5 x ~@6", B: "~@7 x ~@8", C: "~@11 x ~@12", D: "~@23 x ~@24", E: "~@20 x ~@2 x ~@24", F: "~ x",
  G: "~@25 x ~@22", H: "~@23 x ~@2 x ~@21", I: "~@13 x ~@10", J: "~@9 x ~@6", K: "~@25 x ~@2 x ~@19", L: "~@7 x ~@4",
  M: "~@29 x ~@18", N: "~@10 x!2 ~@4", O: "~@31 x ~@16", P: "~@2 x", Q: "~@13 x ~@2 x ~@7",
  R: "~@8 x ~@21 x ~@2 x ~@14", S: "~@11 x ~@4", T: "~@9 x ~@21 x ~@2 x ~@2 x ~@10", U: "~@5 x ~@11 x ~@2 x ~@3",
  V: "~@11 x ~@23 x ~@12", W: "~@2 x ~@2 x!3", X: "~ x ~ x", Y: "~@4 x ~@7 x!2 ~@2", Z: "~@4 x ~@3 x!2 ~@2 x ~ x ~",
  AA: "~@4 x!2 ~@4 x ~ x ~@3", AB: "~@13 x ~@34", AC: "~@14 x ~@18 x ~@5 x ~@5 x ~@2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@24 A B C@4 D E F G H I J K C L M N O P Q R H S J@20 C T U V ~@5>".pickRestart({
  A: "~@11 x", B: "~@2 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4",
  C: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", D: "~ x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@3",
  E: "~@2 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@2", F: "~@3 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~",
  G: "~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x", H: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x",
  I: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5", J: "x!8", K: "x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@4",
  L: "~ x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@3", M: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  N: "~@2 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@2", O: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  P: "~@3 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~", Q: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  R: "~@4 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x", S: "~ x!7",
  T: "~@2 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@2", U: "~@3 x ~@6 x ~@5 x ~@6 x ~@5 x ~@6 x ~@6 x ~@4",
  V: "~ x ~@22",
})).gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@43 A ~@2 B ~@13 C ~@3 C ~ C ~ D ~@8>".pickRestart({
  A: "~@5 x", B: "~@41 x ~@6", C: "~@7 x", D: "~@43 x ~@4",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 A ~@3 B ~@7 C ~@13 D ~@5 E ~@7 A ~@3 F ~@3 G ~@8>".pickRestart({
  A: "~@5 x ~@2", B: "~@2 x", C: "~@17 x ~@6", D: "~@19 x ~@4", E: "~@7 x", F: "~@13 x ~@2", G: "~@37 x ~@10",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@15 B ~@2 C@2 ~ D ~@6 E ~@3 E ~@3 E ~@3 E ~ E ~ F ~ G ~@5>".pickRestart({
  A: "~@19 x ~@4", B: "~@11 x", C: "~@23 x", D: "~@47 x", E: "x", F: "~ x ~@22", G: "~@3 x ~@12",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@12 A ~@7 B ~@11 C ~@35 C ~@8>".pickRestart({
  A: "~@25 x ~@22", B: "~@13 x ~@10", C: "~@31 x ~@16",
})).gain(0.45)
// … 30 more lines