Strudelify

We Just Disagree

Dave Mason

KeyE majorTempo82 bpm
0:00/0:00
// We Just Disagree — Dave Mason
// 82 bpm, 4/4, key E 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 10, 4/4 at bar 10, 2/4 at bar 14, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 63 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/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 clean · "Clean Gt."
const electric_guitar_clean = note(`<
  A@6 B@4 C@7 D@3 E@2 F G@4 H I@2 J@2 K L@5 M N O P Q R S T U V@2 W X@4 Y Z@3 AA@3 AB@2
>`.pickRestart({
  A: "[~@15 [g#3,b3,e4]@6 [e3,g#3,b3]@6 [c#4,e4]@7 [c#4,e4]@4 [c#4,e4,a4]@8 [g#3,b3,e4]@6 [e3,g#3,b3]@6 [c#4,e4]@7 [c#4,e4]@4 [c#4,e4,a4]@8 [g#3,b3,e4]@6 [e3,g#3,b3]@5 [c#4,e4]@8 [c#4,e4]@4 [c#4,e4,a4]@8 [g#3,b3,e4]@5 [e3,g#3,b3]@6 [c#4,e4]@8 [c#4,e4]@4 [c#4,e4,a4]@8 [g#3,b3,e4]@5 [g#3,b3,e4]@6 [g#3,b3]@8 [g#3,b3]@4 [e3,g#3,b3]@7 [g#3,b3,e4]@6 [g#3,b3,e4]@6 [c#4,e4]@8 [g#3,b3]@3, ~@27 a4@11 ~@20 a4@11 ~@19 a4@12 ~@19 a4@12 ~@19 e4@12 ~@19 a4@11]/6", // E C#m A E C#m A E C#m …
  B: "[~ [e3,g#3,b3]@7 [g#3,b3,e4]@6 [g#3,b3,e4]@6 [g#3,b3]@8 [g#3,b3]@3 [e3,g#3,b3]@8 [g#3,b3,e4]@6 [g#3,b3,e4]@6 [g#3,b3]@7 [g#3,b3]@4 [e4,g#4]@4 b4@2 b4@2 [b3,e4]@6 [b3,e4]@6 [b3,e4]@11 [e4,g#4]@2 b4@6 c#5@4 c#5@2 c#5@2 b4@2 b4 [d#4,e4,b4]@8 d#4@2 e4@2 b4@4, ~@20 e4@12 ~@19 e4@11 b3@8 [g#4,b4]@15 ~@16 [e4,a4]@12 ~@15]/4", // E G#m E G#m E E5 E Emaj7 …
  C: "[e4@4 d#4@7 [d#4,b4]@4 e4@2 ~@2 [b3,c#4]@6 [b3,c#4]@2 [b3,c#4]@2 [b3,c#4]@2 [b3,c#4]@11 g#4@2 b4@6 [e4,g#4,c#5]@6 [d#4,f#4,b4]@6 [e4,g#4,c#5]@7 [d#4,f#4,b4]@4 [d#4,f#4,b4]@2 [d#4,f#4,b4]@4 [d#4,f#4,b4]@2 [b3,e4]@6 [b3,e4]@6 [b3,e4]@7 [b3,e4]@4 [e4,g#4]@2 b4@6 c#5@4 e5@2 e5@3 b4@2 c#5@4 ~@6 [d#4,e4]@6 [d#4,e4]@6 b4@2 [g#4,b4,e5]@5 [g#4,b4,e5]@2 c#5@2 [e4,a4,c#5]@2 [e4,a4]@6 [e4,a4]@2 [e4,a4]@2 [e4,a4]@2 [e4,a4]@7 [e4,a4]@4 g#4@2 b4@6 [e4,g#4,c#5]@6 [d#4,f#4,b4]@6 [e4,g#4,c#5]@7 [d#4,f#4,b4]@8 [d#4,f#4,b4]@2 b4@2 [b3,e4,g#4]@4, ~@17 e4@25 ~@39 g#4@19 ~@12 [e4,a4]@11 [d#4,e4]@10 ~@91, ~@127 b4@15 ~@16 c#5@15 ~@51]/7", // G#m Bsus2 C#m B C#m B E5 E …
  D: "[~@2 [b3,e4]@5 [b3,e4]@4 [f#4,a4]@4 e4@4 e4@8 [g#4,b4]@4 e4@3 e4@4 c#4@4 [b3,e4]@8 g#4@2 b4@6 [e4,g#4,c#5]@5 [d#4,f#4,b4]@4 b4@2 b4@2 g#4@12 [e4,g#4,b4]@2 [e4,a4,c#5]@3 [e4,g#4,b4]@8, ~@69 e4@14 ~@13]/3", // E5 F#m G#m E5 C#m B E A …
  E: "[[e4,g#4]@4 [e4,g#4,b4]@4 [e4,g#4,c#5]@4 [e4,g#4,c#5]@4 c#5@2 b4@3 [e4,g#4,b4]@2 [e4,g#4,b4]@12 g#4@2 e5@2 e5@4 [e4,a4,c#5]@2 [e4,a4,c#5]@3 [d#4,f#4,b4]@6 [b3,e4,b4]@6 [b3,e4,g#4]@4, ~@16 [e4,g#4]@5 ~@43]/2", // E C#m E A B E5 E
  F: "~@2 [a3,c#4]@8 [e4,a4,c#5] [e4,a4,c#5]@4 [d#4,f#4,b4]@6 [b3,e4,b4]@6 [b3,e4,g#4]@5", // A B E5 E
  G: "[~ [c#4,e4,a4]@7 c#5@4 [e4,a4,c#5]@2 [f#4,b4,d#5]@6 e5@2 d#5@6 c#5@2 [b3,e4,g#4]@5 c#5@2 [e4,g#4,c#5]@6 [d#4,f#4,c#5]@4 c#5@2 [g#4,b4]@4 [f#4,a4]@2 [e4,g#4]@4 [b4,e5]@3 [b4,e5]@8 [b4,e5]@4 [b4,e5]@2 [a4,c#5,e5]@6 [e4,g#4,c#5]@5 [f#4,a4,d#5]@6 [g#4,b4,e5]@14 [f#4,a4,d#5]@6 ~@3 [e4,g#4,c#5]@6 [d#4,g#4,b4]@6, ~@10 [e4,g#4]@5 ~@49]/4", // A B E C#m D#m7 G#m F#m E …
  H: "b4 a4 g#4@4 [e4,g#4,c#5]@7 [b4,d#5]@3, e4@3 ~@5", I: "[e4,g#4,b4]@6 [e4,g#4,c#5]@7 [b4,d#5]@3",
  J: "[[e4,g#4,b4]@6 [e4,g#4,c#5]@4 g#4@2 g#4 b4@2 ~ [b3,e4]@3 [b3,e4]@3 [b3,e4]@6 [e4,g#4] b4@3, ~@15 b4@9 ~@8]/2", // E C#m E5 E
  K: "c#5@2 c#5@2 c#5@2 c#5 b4@3 d#4 e4 b4@2 e4@2, [e4,a4]@3 [d#4,e4]@2 ~@3", // A5 Emaj7
  L: "[d#4@4 [d#4,b4]@2 e4 ~ [b3,c#4]@3 [b3,c#4]!3 [b3,c#4]@6 g#4 b4@3 [e4,g#4,c#5]@3 [d#4,f#4,b4]@3 [e4,g#4,c#5]@4 [d#4,f#4,b4]@2 [d#4,f#4,b4] [d#4,f#4,b4]@2 [d#4,f#4,b4] [b3,e4,b4] [b3,e4]@2 [b3,e4]@3 [b3,e4]@4 [b3,e4]@2 [e4,g#4] b4@3 c#5@2 c#5 c#5@2 b4 [d#4,e4]@5 [d#4,e4]@3 [d#4,e4]@3 b4 [g#4,b4,e5]@3 [g#4,b4,e5] [e4,a4,c#5]@2, ~@7 e4@13 ~@21 g#4@7 ~@8 [e4,a4]@6 b4@10 ~@8]/5", // G#m Bsus2 C#m B C#m B E5 E …
  M: "[e4,a4]@3 [e4,a4]!3 [e4,a4]@4 [e4,a4]@2 g#4!2 b4@2, c#5 ~", // A5
  N: "[e4,g#4,c#5]@3 [d#4,f#4,b4]@3 [e4,g#4,c#5]@4 [d#4,f#4,b4]@4 [d#4,f#4,b4] b4", // C#m B C#m B
  O: "[b3,e4,g#4]@3 [b3,e4]@3 [b3,e4]@2 [g#4,b4]@2 e4@2 e4@4", P: "[g#4,b4]@2 e4@2 e4@2 c#4@2 [b3,e4]@4 g#4 b4@3",
  Q: "[e4,g#4,c#5]@3 [d#4,f#4,b4]@2 b4!2 g#4@6 [e4,g#4,b4] [e4,a4,c#5]@2, ~@6 e4@7 ~@3", // C#m B E A
  R: "[e4,g#4,b4]@4 [e4,g#4]@2 [e4,g#4,b4]@2 [e4,g#4,c#5]@2 [e4,g#4,c#5]@2 c#5 b4@2 [e4,g#4,b4]", // E C#m E
  S: "[e4,g#4,b4]@6 g#4 e5 e5@2 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3", // E A B
  T: "[b3,e4,b4]@3 [b3,e4,g#4]@3 [a3,c#4]@4 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3", // E5 E A B
  U: "[b3,e4,b4]@3 [b3,e4,g#4]@3 [c#4,e4,a4]@4 c#5@2 [e4,a4,c#5] [f#4,b4,d#5]@3", // E5 E A B
  V: "[e5 d#5@3 c#5 [b3,e4,g#4]@3 c#5 [e4,g#4,c#5]@3 [d#4,f#4,c#5]@2 c#5 [g#4,b4]@2 [f#4,a4] [e4,g#4]@2 [b4,e5]@2 [b4,e5]@4 [b4,e5]@2 [b4,e5] [a4,c#5,e5]@3, [e4,g#4]@5 ~@27]/2", // E C#m D#m7 G#m F#m E E5 A …
  W: "[e4,g#4,c#5]@3 [f#4,a4,d#5]@3 [g#4,b4,e5]@7 [f#4,a4,d#5]@3", // C#m D#dim E D#dim
  X: "[~@2 [e4,g#4,c#5]@3 [d#4,g#4]@3 ~@6 c#5@7 [b4,d#5]@3 [g#4,b4,e5]@3 [g#4,c#5]@4 [g#4,b4]@3 g#4@2 g#4 b4@3 [e4,g#4,c#5]@3 [d#4,f#4,b4]@2 b4!2 g#4@6 [e4,g#4,b4] [e4,a4,c#5]@2 [e4,g#4,b4]@4 [e4,g#4]@2 [e4,g#4,b4]@2, ~@5 b4@9 ~@50, ~@8 [e4,g#4]@13 ~@25 e4@7 ~@11]/4", // C#m G#5 B E C#5 G#m C#m B …
  Y: "[e4,g#4,c#5]@2 [e4,g#4,c#5]@2 c#5 b4@2 [e4,g#4,b4] [e4,g#4,b4]@6 g#4 e5, ~@4 [e4,g#4]@3 ~@9", // C#m E
  Z: "[e5@2 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3 [b3,e4,b4]@3 [b3,e4,g#4]@3 [a3,c#4]@4 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3 [b3,e4,b4]@3 [b3,e4,g#4]@3 [c#4,e4,a4]@4 c#5@2 [e4,a4,c#5] [f#4,b4,d#5]@3 e5 d#5@3 c#5 [b3,e4,g#4]@3, ~@40 [e4,g#4]@5 ~@3]/3", // A B E5 E A B E5 E …
  AA: "[c#5 [e4,g#4,c#5]@3 [d#4,f#4,c#5]@2 c#5 [g#4,b4]@2 [f#4,a4] [e4,g#4]@2 [b4,e5]@2 [b4,e5]@4 [b4,e5]@2 [b4,e5] [a4,c#5,e5]@3 [e4,g#4,c#5]@3 [f#4,a4,d#5]@3 [g#4,b4,e5]@7 [f#4,a4,d#5]@3 ~@2 [e4,g#4,c#5]@3 [d#4,f#4,b4] ~@2]/3", // C#m D#m7 G#m F#m E E5 A C#m …
  AB: "[~@2 [e4,g#4,c#5]@3 [d#4,f#4,b4]@3 [e4,g#4,b4]@2 [c#4,f#4,a4] [b3,e4,g#4]@13 ~@8]/2", // C#m B E F#m E
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.9)

// bass · fretless bass · "Fretless Bs."
const bass = note(`<
  A@6 B@4 C@3 D@5 E@2 F@3 G@4 H I H I J K L M@2 N@2 O P Q R S T U V W X Y Z AA AB AC@2 AD@4 AE@3 AF@2
>`.pickRestart({
  A: "[~@15 e2@12 e3@19 e2@12 e3@19 e2@11 e3@19 ~ e2@11 e3@19 ~ e2@11 c#3@8 e2@4 e2@7 e2@12 c#3@8 e2@3]/6",
  B: "[~ b2@7 e2@12 c#3@8 e2@3 e2@8 e2@12 c#3@7 e2@4 c#3@4 d#3@4 e2@12 e2@3 e2@10 e2@2 d#2@4 c#2@11 b2@15 ~]/4",
  C: "[b2@4 b2@15 a2@12 a2@4 a2@15 a2@6 b2@6 c#3@15 b2@4 e2@12 e2@3]/3",
  D: "[e2@10 e2@2 d#2@4 c#2@11 b2@15 ~ b2@4 b2@15 a2@12 a2@4 a2@15 a2@6 b2@6 c#3@15 b2@4 e3@11 e3@8 e3@2 e3@2 e3@2 c#3@2 b2@2 g#2@2 e2@5]/5",
  E: "[~@2 a2@2 a#2@2 b2@2 c#3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 c#3@2 b2@2 a2@5 b2@6 e3@17 ~@2 e3@8, ~ e2@2 ~@52 b2@2 ~@7]/2",
  F: "[~@2 c#3@2 b2@4 a2@10 b2@5 e3@19 ~ a2@5 b2@6 g#2@6 g#3@2 g#3@4 a2@17 a2@2 g#2@6 g#3@2 g#3@3]/3",
  G: "[~ a2@13 b2@6 c#3@10 g#2@6 ~ a2@6 b2@8 e3@11 g#2@14 a2@6 a2@5 b2@6 c#3@14 b2@6 ~@3 a2@6 b2@6]/4",
  H: "e2@6 e2@2 e2@6 c#2 b1", I: "e2@3 e2 e2@2 e3@2", J: "[e2,e3]@6 e2@2 e2@5 e2 d#2@2", K: "c#2@3 b2@4 b2",
  L: "b2@4 a2@3 a2", M: "[a2@8 a2@3 b2@3 c#3@8 b2@2 e2@6 e2@2]/2", N: "[e2@5 e2 d#2@2 c#2@6 b2@8 b2@2 b2@8]/2",
  O: "a2@3 a2 a2@4", P: "a2@3 b2@3 c#3@8 b2@2", Q: "e3@6 e3@4 e3!3 c#3 b2 g#2", R: "e2@3 e2 a2 a#2 b2 c#3 e3!6 c#3 b2",
  S: "a2@3 b2@3 e3@9 b2", T: "e3@5 c#3 b2@2 a2@5 b2@3", U: "e3@10 a2@3 b2@3", V: "g#2@3 g#3 g#3@2 a2@9 a2",
  W: "g#2@3 g#3 g#3@2 a2@7 b2@3", X: "c#3@5 g#2@3 ~ a2@3 b2@4", Y: "e3@6 g#2@7 a2@3", Z: "a2@3 b2@3 c#3@7 b2@3",
  AA: "~@2 a2@3 b2@3 e3@6 e3@2", AB: "e3@2 e3!3 c#3 b2 g#2 e2@3 e2 a2 a#2 b2 c#3",
  AC: "[e3!6 c#3 b2 a2@3 b2@3 e3@9 b2 e3@5 c#3 b2@2]/2",
  AD: "[a2@5 b2@3 e3@10 a2@3 b2@3 g#2@3 g#3 g#3@2 a2@9 a2 g#2@3 g#3 g#3@2 a2@7 b2@3 c#3@5 g#2@3]/4",
  AE: "[~ a2@3 b2@4 e3@6 g#2@7 a2@3 a2@3 b2@3 c#3@7 b2@3 ~@8]/3", AF: "[~@2 a2@3 b2@3 e2@16 ~@8]/2",
})).s("gm_fretless_bass").gain(0.31)

// chords · synth strings 1 · "Syn Strings1"
const synth_strings_1 = note(`<
  ~@8 A B C@7 D@3 E@2 F G@4 H I@2 J@2 K L@5 M N O P Q R S T U V@2 W X@4 Y Z@3 AA@3 AB@2
>`.pickRestart({
  A: "~@3 [b3,e4]@3 [b3,e4]@3 [b3,e4]@6 ~, ~@6 [g#4,b4]@15 ~@11", B: "~@5 [e4,a4]@11 [d#4,e4,b4]@8 d#4@2 e4@2 b4@4",
  C: "[e4@4 d#4@8 ~@7 [b3,c#4]@6 [b3,c#4]@2 [b3,c#4]@2 [b3,c#4]@2 [b3,c#4]@12 ~@7 [e4,g#4,c#5]@6 [d#4,f#4,b4]@6 [e4,g#4,c#5]@7 [d#4,f#4,b4]@4 [d#4,f#4,b4]@2 [d#4,f#4,b4]@4 [d#4,f#4,b4]@2 [b3,e4]@6 [b3,e4]@6 [b3,e4]@7 [b3,e4]@4 [e4,g#4]@2 b4@6 [e4,a4]@11 [d#4,e4]@10 [d#4,e4]@6 [d#4,e4]@6 b4@2 [g#4,b4,e5]@5 [g#4,b4,e5]@2 c#5@2 [e4,a4,c#5]@2 [e4,a4]@6 [e4,a4]@2 [e4,a4]@2 [e4,a4]@2 [e4,a4]@7 [e4,a4]@4 ~@8 [e4,g#4,c#5]@6 [d#4,f#4,b4]@6 [e4,g#4,c#5]@7 [d#4,f#4,b4]@8 [d#4,f#4,b4]@4 [b3,e4,g#4]@4]/7", // Bsus2 C#m B C#m B E5 E A5 …
  D: "[~@2 [b3,e4]@5 [b3,e4]@4 [g#4,b4]@4 e4@4 e4@8 [g#4,b4]@4 e4@3 e4@4 c#4@4 [b3,e4]@8 g#4@2 b4@6 [e4,g#4,c#5]@5 [d#4,f#4,b4]@4 b4@2 b4@2 g#4@12 [e4,g#4,b4]@2 [e4,a4,c#5]@3 [e4,g#4,b4]@8, ~@69 e4@14 ~@13]/3", // E5 G#m E5 C#m B E A E
  E: "[[e4,g#4]@4 [e4,g#4,b4]@4 [e4,g#4,c#5]@4 [e4,g#4,c#5]@4 [e4,g#4]@5 [e4,g#4,b4]@2 [e4,g#4,b4]@12 g#4@2 e5@2 e5@4 [e4,a4,c#5]@2 [e4,a4,c#5]@3 [d#4,f#4,b4]@6 [b3,e4,b4]@6 [b3,e4,g#4]@4]/2", // E C#m E A B E5 E
  F: "~@2 [a3,c#4]@8 [e4,a4,c#5] [e4,a4,c#5]@4 [d#4,f#4,b4]@6 [b3,e4,b4]@6 [b3,e4,g#4]@5", // A B E5 E
  G: "[~ [c#4,e4,a4]@7 c#5@4 [e4,a4,c#5]@2 [f#4,b4,d#5]@6 [e4,g#4]@8 c#5@2 [b3,e4,g#4]@5 c#5@2 [e4,g#4,c#5]@6 [d#4,f#4,c#5]@4 c#5@2 [g#4,b4]@4 [f#4,a4]@2 [e4,g#4]@4 [b4,e5]@3 [b4,e5]@8 [b4,e5]@4 [b4,e5]@2 [a4,c#5,e5]@6 [e4,g#4,c#5]@5 [f#4,a4,d#5]@6 [g#4,b4,e5]@14 [f#4,a4,d#5]@6 ~@3 [e4,g#4,c#5]@6 [d#4,g#4,b4]@6]/4", // A B E C#m D#m7 G#m F#m E …
  H: "b4 a4 g#4@4 [e4,g#4,c#5]@7 [b4,d#5]@3, e4@3 ~@5", I: "[e4,g#4,b4]@6 [e4,g#4,c#5]@7 [b4,d#5]@3",
  J: "[[e4,g#4,b4]@6 [e4,g#4,c#5]@4 g#4@2 g#4 b4@2 ~ [b3,e4]@3 [b3,e4]@3 [b3,e4]@6 ~@4, ~@15 b4@9 ~@8]/2", // E C#m E5
  K: "[e4,a4]@6 [d#4,e4,b4]@4 d#4 e4 b4@2 e4@2", // A5 Emaj7
  L: "[d#4@4 ~@4 [b3,c#4]@3 [b3,c#4]!3 [b3,c#4]@6 ~@4 [e4,g#4,c#5]@3 [d#4,f#4,b4]@3 [e4,g#4,c#5]@4 [d#4,f#4,b4]@2 [d#4,f#4,b4] [d#4,f#4,b4]@2 [d#4,f#4,b4] [b3,e4]@3 [b3,e4]@3 [b3,e4]@4 [b3,e4]@2 [e4,g#4] b4@3 [e4,a4]@6 [d#4,e4]@5 [d#4,e4]@3 [d#4,e4]@3 b4 [g#4,b4,e5]@3 [g#4,b4,e5] c#5 [e4,a4,c#5]]/5", // Bsus2 C#m B C#m B E5 E A5 …
  M: "[e4,a4]@3 [e4,a4]!3 [e4,a4]@4 [e4,a4]@2 ~@4", // A5
  N: "[e4,g#4,c#5]@3 [d#4,f#4,b4]@3 [e4,g#4,c#5]@4 [d#4,f#4,b4]@4 [d#4,f#4,b4] b4", // C#m B C#m B
  O: "[b3,e4,g#4]@3 [b3,e4]@3 [b3,e4]@2 [g#4,b4]@2 e4@2 e4@4", P: "[g#4,b4]@2 e4@2 e4@2 c#4@2 [b3,e4]@4 g#4 b4@3",
  Q: "[e4,g#4,c#5]@3 [d#4,f#4,b4]@2 b4!2 g#4@6 [e4,g#4,b4] [e4,a4,c#5]@2, ~@6 e4@7 ~@3", // C#m B E A
  R: "[e4,g#4,b4]@4 [e4,g#4]@2 [e4,g#4,b4]@2 [e4,g#4,c#5]@2 [e4,g#4,c#5]@2 c#5 b4@2 [e4,g#4,b4], ~@12 [e4,g#4]@3 ~", // E C#m E
  S: "[e4,g#4,b4]@6 g#4 e5 e5@2 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3", // E A B
  T: "[b3,e4,b4]@3 [b3,e4,g#4]@3 [a3,c#4]@4 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3", // E5 E A B
  U: "[b3,e4,b4]@3 [b3,e4,g#4]@3 [c#4,e4,a4]@4 c#5@2 [e4,a4,c#5] [f#4,b4,d#5]@3", // E5 E A B
  V: "[e5 d#5@3 c#5 [b3,e4,g#4]@3 c#5 [e4,g#4,c#5]@3 [d#4,f#4,c#5]@2 c#5 [g#4,b4]@2 [f#4,a4] [e4,g#4]@2 [b4,e5]@2 [b4,e5]@4 [b4,e5]@2 [b4,e5] [a4,c#5,e5]@3, [e4,g#4]@5 ~@27]/2", // E C#m D#m7 G#m F#m E E5 A …
  W: "[e4,g#4,c#5]@3 [f#4,a4,d#5]@3 [g#4,b4,e5]@7 [f#4,a4,d#5]@3", // C#m D#dim E D#dim
  X: "[~@2 [e4,g#4,c#5]@3 [d#4,g#4]@3 ~@6 c#5@7 [b4,d#5]@3 [g#4,b4,e5]@3 [g#4,c#5]@4 [g#4,b4]@3 g#4@2 g#4 b4@3 [e4,g#4,c#5]@3 [d#4,f#4,b4]@2 b4!2 g#4@6 [e4,g#4,b4] [e4,a4,c#5]@2 [e4,g#4,b4]@4 [e4,g#4]@2 [e4,g#4,b4]@2, ~@5 b4@9 ~@50, ~@8 [e4,g#4]@13 ~@25 e4@7 ~@11]/4", // C#m G#5 B E C#5 G#m C#m B …
  Y: "[e4,g#4,c#5]@2 [e4,g#4,c#5]@2 c#5 b4@2 [e4,g#4,b4] [e4,g#4,b4]@6 g#4 e5, ~@4 [e4,g#4]@3 ~@9", // C#m E
  Z: "[e5@2 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3 [b3,e4,b4]@3 [b3,e4,g#4]@3 [a3,c#4]@4 [e4,a4,c#5] [e4,a4,c#5]@2 [d#4,f#4,b4]@3 [b3,e4,b4]@3 [b3,e4,g#4]@3 [c#4,e4,a4]@4 c#5@2 [e4,a4,c#5] [f#4,b4,d#5]@3 e5 d#5@3 c#5 [b3,e4,g#4]@3, ~@40 [e4,g#4]@5 ~@3]/3", // A B E5 E A B E5 E …
  AA: "[c#5 [e4,g#4,c#5]@3 [d#4,f#4,c#5]@2 c#5 [g#4,b4]@2 [f#4,a4] [e4,g#4]@2 [b4,e5]@2 [b4,e5]@4 [b4,e5]@2 [b4,e5] [a4,c#5,e5]@3 [e4,g#4,c#5]@3 [f#4,a4,d#5]@3 [g#4,b4,e5]@7 [f#4,a4,d#5]@3 ~@2 [e4,g#4,c#5]@3 [d#4,f#4,b4] ~@2]/3", // C#m D#m7 G#m F#m E E5 A C#m …
  AB: "[~@2 [e4,g#4,c#5]@3 [d#4,f#4,b4]@3 [e4,g#4,b4]@2 [c#4,f#4,a4] [b3,e4,g#4]@13 ~@8]/2", // C#m B E F#m E
})).s("gm_synth_strings_1").gain(0.28).pan(0.9)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@4 A@2 B@3 ~@54>".pickRestart({
  A: "[~@22 a3@8 g#3@4 e3@19 a3@8 g#3@3]/2", B: "[~ b2@19 a3@8 g#3@3 e3@19 ~ a3@7 g#3@4 b2@15 ~@19]/3",
})).s("gm_string_ensemble_1").gain(0.36).pan(0.2)

// other · tinkle bell · G#m F#m
const tinkle_bell = note(`<
  [~@27 a5 f#5 d#5 [g#4,b4] e4]
  [~@26 [f#5,a5] d#5 b4 g#4 e4 ~]
  [~@24 a5 f#5 d#5 b4 g#4 e4 ~@2]
  [~@23 a5 f#5 d#5 b4 g#4 e4 ~@3]
  ~@24
  [~@8 a5 f#5 d#5 b4 g#4 e4 ~@2]!4
  ~@31
>`).s("gm_tinkle_bell").gain(0.08)

// drums · kick
const kick = s("bd").struct("<~@25 A B C@7 D C@2 E D C@11 D C@9 F C ~>".pickRestart({
  A: "~@7 x ~ x ~@6", B: "~ x ~@7 x ~@22", C: "x!4", D: "x ~ x!2", E: "x!3 ~", F: "x!2 ~ x",
})).gain(0.29)

// drums · snare
const snare = s("sd").struct("<~@26 A B@6 C D B@4 E B@10 F G B@8 H I ~>".pickRestart({
  A: "~@13 x ~ x ~@16", B: "~ x ~ x", C: "~ x ~@2", D: "~@12 x ~@2 x", E: "~@4 x ~@3 x!8", F: "~@5 x ~@10",
  G: "~@4 x ~@7 x ~@2 x", H: "~@4 x ~@7 x!4", I: "~@4 x ~@7 x ~ x!2",
})).gain(0.32)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@27 A B C D E F G H I J K L M N O P N@2 Q R S N T ~ Q U N V W Q X O Y Z AA ~
>`.pickRestart({
  A: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@3 x ~ x ~ x ~@2", C: "~ x ~ x ~@3 x ~ x ~ x ~ x ~ x",
  D: "~ x ~ x ~ x ~ x ~ x ~@3 x ~ x", E: "~ x ~@3 x ~@3 x ~ x ~ x ~ x", F: "~ x ~ x ~ x ~@3 x ~@6", G: "~ x ~@14",
  H: "~@7 x ~@8", I: "~@9 x ~ x ~ x ~@2", J: "~ x ~ x ~@5 x ~ x ~ x ~@2", K: "~ x ~@3 x ~ x ~@8", L: "~@9 x ~@3 x ~@2",
  M: "~ x ~ x ~ x ~@10", N: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", O: "~ x ~@5 x ~ x ~ x ~ x ~ x",
  P: "~ x ~@3 x ~@3 x ~@3 x ~@2", Q: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", R: "~ x ~ x ~@3 x ~ x ~@6",
  S: "~ x ~@3 x ~@3 x ~ x ~ x ~@2", T: "~ x ~@5 x ~ x ~ x ~ x ~@2", U: "~ x ~@7 x ~ x ~ x ~ x",
  V: "~ x ~ x ~@3 x ~ x ~@3 x ~ x", W: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", X: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x",
  Y: "~ x ~@3 x ~ x ~ x ~ x ~ x ~@2", Z: "~ x ~@3 x ~@10", AA: "~ x ~@3 x ~@3 x ~@6",
})).gain(0.18)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 [~ x ~@30] ~@23 [~@12 x!2 ~ x] ~@12>").gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@35 A@2 ~@10 A ~@11 A ~ B ~>".pickRestart({
  A: "~@15 x", B: "~ x ~ x ~ x ~@2",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@25 [~@9 x ~@6] ~@24 [~@8 x!2 ~ x ~@4] ~@12>").gain(0.29)

// drums · ride
const ride = s("rd").struct("<~@40 x ~@10 x ~@9 x ~>").gain(0.29)

stack(
  electric_guitar_clean, bass, synth_strings_1, string_ensemble_1, tinkle_bell, kick, snare, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, ride
)