Strudelify
KeyB♭ majorTempo110 bpm
0:00/0:00
// Passacaglia — G. F. Händel J. Halvorsen
// 110 bpm, 4/4, key Bb 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, 12/8 at bar 132, 4/4 at bar 136) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5828744; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 162 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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.

// other · violin
const violin = note(`<
  A@2 B@2 C D@3 E@3 F G@3 H I@4 J K L M N O P Q R S T U ~@4 V ~@3 V W X Y Z AA AB AC@2 AA AB AC@2 AD AE AF AG ~@4 AH AI
  AJ AK ~@13 AL@6 AM@3 AN@5 ~@43 AO@2 AP@2 AQ@3 AR@4 AS AT@2 AU AV@3 AW AX@7 ~
>`.pickRestart({
  A: "[~@18 [bb4,d5]@9 [c5,eb5]@2 ~ [a4,c5]@9 [bb4,d5]@2 ~ [c5,eb5]@9 [c5,eb5]@2 ~ [bb4,d5]@9 ~]/2", // Bb Cm Am Bb Cm Bb
  B: "[[c5,eb5]@2 ~ [a4,c5]@9 [a4,f5]@2 ~ [g4,eb5]@9 [a4,f5]@2 ~ [bb4,d5]@9 [bb4,d5]@2 ~ [a4,c5]@9 [bb4,d5]@2 ~@2 [g4,bb4]@9 [g4,bb4]@2 ~]/2", // Cm Am Dm Cm Dm Bb Am Bb …
  C: "[gb4,a4]@9 [g4,bb4]@2 ~ [a4,c5]@9 [a4,c5]@2 ~ [g4,bb4]@8", // Gbm Gm Am Gm
  D: "[~ [a4,c5]@2 ~ [gb4,a4]@9 ~ [gb4,d5]@2 ~ [e4,c5]@9 [gb4,d5]@2 ~ [g4,bb4]@9 a4@3 g4@12 [bb4,d5]@18 ~ [bb4,d5]@6 [c5,eb5]@18]/3", // Am Gbm D C D Gm Bb Cm
  E: "[[bb4,d5]@6 [a4,c5]@18 ~ [a4,c5]@6 [bb4,d5]@18 [a4,c5]@6 [g4,bb4]@18 [g4,bb4]@6 ~ [a4,c5]@16]/3", // Bb Am Bb Am Gm Am
  F: "~ [g4,bb4]@3 [gb4,a4]@6 d5@6", // Gm Gbm
  G: "[bb4@9 ~ a4@3 g4@12 bb4@6 d5@6 g5@6 f5@6 eb5@6 d5@6 ~ c5@6 bb4@6 a4@6 c5@6 f5@6 eb5@4]/3",
  H: "~@2 d5@6 c5@6 bb4@6 ~ a4@6 g4@5",
  I: "[~ bb4@6 eb5@6 d5@6 c5@6 bb4@6 a4@6 g4@6 ~ gb4@6 a4@6 d5@6 c5@6 bb4@6 a4@6 g4@12 g4@2 ~ g4@2 a4@2 ~ a4@2 ~ a4@2 gb4 g4 bb4@4 ~@6 c5@6 ~@5, ~@94 a4@2 ~@3 g4@2 ~ g4@2 ~@24]/4",
  J: "~ eb5 eb6@5 ~@6 f4@2 ~ f4@2 ~ f4@2 ~ f4@2 g4@2 [e4,f4] a4@4 ~, ~@15 g4@2 ~ g4@2 ~ g4@2 ~@9", // Fmaj7
  K: "~@6 bb4@6 ~@6 d5 d6@5 ~@6 eb4@2",
  L: "~ eb4@2 ~ eb4@2 ~ eb4@2 ~ d4 eb4 g4@4 ~@7 a4@6 ~@3, f4@2 ~ f4@2 ~ f4@2 ~ f4@2 ~@21",
  M: "~@3 c5 c6@5 ~@6 d5 d6@5 ~@6 gb5 gb6@4", N: "~@8 g6@5 ~@19, ~@8 g5 ~@23",
  O: "~@3 d5 ~ c5 ~@2 bb4 ~@2 c5 ~ d5 ~@2 eb5 ~@2 f5 ~ g5 ~@2 c5 ~@2 d5 ~ eb5 ~@2",
  P: "a4 ~@2 bb4 ~ c5 ~@2 f4 ~@2 f5 ~ eb5 ~@2 d5 ~@2 eb5 ~ f5 ~@2 bb4 ~@2 c5 ~ d5 ~@2",
  Q: "eb5@2 ~@2 [bb4,g5] ~@3 [a4,g5] ~@3 [c5,eb5] ~@3", R: "[c5,d5] ~@3 [a4,gb5] ~@3 [g4,g5]@2 ~@6",
  S: "bb4 g4 g5 f5, d5 g4", T: "a4 f4 f5 d5, c5 f4",
  U: "eb5@3 f5@2 g5@3 c5@3 d5@2 eb5@3 d5@3 e5@2 gb5@3 g5 ~@2 a5 ~ bb5 ~@2", V: "~@7 d5",
  W: "[g4,bb4] g5 f5@2 eb5@2 d5@2 c5@2 ~ a4@2 ~ f4@2 eb4@4 ~@8 c5@4, ~@10 bb4@2 ~ g4@2 ~@17", // Gm
  X: "[a4,c5] f5 eb5@2 d5@2 c5@2 bb4@2 ~ g4@2 ~ eb4@2 d4@4 ~@8 bb4@4, ~@10 a4@2 ~ f4@2 ~@17", // Am
  Y: "[g4,bb4] eb5 d5@2 c5@2 bb4@2 a4@2 ~ f4@2 ~ d4@2 c4@4 ~@8 c5@4, ~@10 g4@2 ~ eb4@2 ~@17", // Gm
  Z: "[gb4,a4] d5 c5@2 bb4@2 a4@2 g4 gb4 eb4 d4 ~ c4 bb3 a3 g3@4 ~@12", // Gbm
  AA: "gb5 g5@3 ~@4 g3@4 ~@4 c6 d6 ~ eb6 d6 c6 ~ bb5 a5 g5 f5 eb5 ~ d5 c5 bb4",
  AB: "a4@4 ~@4 a3@4 ~@4 bb5 c6 ~ d6 c6 bb5 ~ a5 g5 f5 eb5 d5 ~ c5 bb4 a4",
  AC: "[g4@4 ~@4 g3@4 ~@4 eb4 g4 ~ a4 c5 eb5 ~ c5 bb4@4 bb4@4 a4@8 [c5,gb5] d5 ~ c5 a4 gb4 ~ d4 g4@8 ~@8, ~@7 g5@3 ~@6]/2", // Cdim
  AD: "~ bb5 a5 bb5 g5 bb5 f5 bb5 eb5 bb5 d5 bb5 c5 bb5 bb4 bb5",
  AE: "c5 a5 g5 a5 f5 a5 eb5 a5 d5 a5 c5 a5 bb4 a5 a4 a5", AF: "bb4 g5 f5 g5 eb5 g5 d5 g5 c5 g5 bb4 g5 a4 g5 g4 g5",
  AG: "a4 g5 gb5 e5 gb5 g5 e5 gb5 g5@2 ~@6",
  AH: "~@4 bb5 c6 bb5@2 g5 a5 g5@2 d5 eb5 d5@2 ~@4 e5 f5 e5@2 g5 a5 g5@2 bb5 c6 bb5@2",
  AI: "~@4 c6 d6 c6@2 a5 bb5 a5@2 f5 g5 f5@2 ~@4 ab5 a5 ab5@2 b5 c6 b5@2 d6 eb6 d6@2",
  AJ: "~@4 bb5 c6 bb5@2 g5 a5 g5@2 e5 f5 e5@2 ~@4 a5 bb5 a5@2 g5 a5 g5@2 bb5 c6 bb5@2",
  AK: "~@4 eb5 f5 eb5@2 d5 eb5 d5@2 c5 d5 c5@2 bb4 c5 bb4@2 a4 bb4 a4@2 g4 a4 g4@6",
  AL: "[~@17 g5@7 ab5@7 g5@7 f5@6 [g4,eb5]@27 f5@7 g5@7 f5@7 eb5@6 [f4,d5]@27 ~ eb5@6 f5@7 eb5@7 d5@7 [eb4,c5]@6 eb5@7 d5@7 c5@7 d5@6 c5@6, ~@17 g4@27 ~@27 f4@14 ~@41 g4@14 ~@19 g4@20 ~ d4@12]/6", // Cm Dm Cm
  AM: "[~ bb4@7 a4@7 g4@27 g5@7 ab5@6 g5@7 f5@7 [g4,eb5]@27, ~ gb4@14 ~@27 g4@27 ~@27]/3", // Cm
  AN: "[f5@7 g5@7 f5@6 eb5@7 [f4,d5]@27 eb5@7 f5@7 eb5@6 d5@7 [eb4,c5]@7 eb5@7 d5@7 c5@6 d5@7 c5@7 bb4@7 a4@6 g4@25, f4@7 ~@20 g4@7 ~@10 g4@10 d4@7 gb4@7 ~@12]/5", // Dm Cm
  AO: "[~@27 [g3,f4,d5]@19 [f4,eb5]@3 ~@3 [f4,c5]@12]/2", // G7 F7 F5
  AP: "[~ [f4,d5]@13 [eb4,eb5]@2 ~@2 d4@2 ~ f4@2 g4@2 ~ b4@2 ~ d5@2 ~ f5@2 g5@2 ~ b5@2 c6 d6 ~ eb6 f6 g6 ~ a6 b6 ~ c7 d7 eb7@9 ~ [f4,d5]@2 ~, ~@17 c4@2 ~ eb4@2 ~@3 a4@2 ~ c5@2 ~ eb5@2 ~@3 a5@2 ~@26]/2", // Dm Eb Dm
  AQ: "[[f4,c5]@19 [f4,f5]@3 ~@3 [f4,eb5]@13 [f4,f5]@12 [f4,d5]@3 bb3@2 ~ d4 ~ eb4 f4 g4 ~ a4 ~ c5@2 ~ eb5@2 f5@2 ~ a5@2 ~ c6@2 ~ eb6@2 f6@2 ~ a6@2 ~ c7@2 d7@8, ~@55 c4@2 ~@6 bb4@2 ~ d5@2 ~@3 g5@2 ~ bb5@2 ~ d6@2 ~@3 g6@2 ~ bb6@2 ~@9]/3", // F5 F F7 F Dm
  AR: "[~ c5@2 ~ [g4,bb4]@19 [g4,bb4]@3 ~@4 [g4,a4]@12 [g4,bb4]@13 [eb4,c5]@19 [eb4,c5]@3 ~@3 [eb4,b4]@12 [eb4,c5]@9 ~ bb4@2 ~ [gb4,a4]@19 [gb4,d5]@3 ~]/4", // Gm Gsus2 Gm Cm Abm Cm Gbm D
  AS: "~@2 [e4,c5]@13 [gb4,d5]@12 [d4,d5]@3 d4@2", // C D
  AT: "[g4@2 ~ d5@2 ~ bb5@2 d6@13 ~@4 gb5@2 ~ d6@2 ~ a6@2 d7@13 [bb4,d5]@2 g3@2 g3@2 [c5,eb5]@2 [a4,c5]@2 g3@2 g3@2 [bb4,d5]@2 [c5,eb5]@2, ~@2 bb4@2 ~ g5@2 ~@17 d5@2 ~ a5@2 ~ gb6@2 ~@32]/2", // Bb Cm Am Bb Cm
  AU: "g3@2 ~ g3@2 [c5,eb5]@2 [bb4,d5]@2 g3@2 g3@2 [c5,eb5]@2 [a4,c5]@2 g3@2 g3@2 [a4,f5]@2 ~ [g4,eb5]@2 g3@2 g3@2 [a4,f5]@2", // Cm Bb Cm Am Dm Cm Dm
  AV: "[[bb4,d5]@2 g3@2 g3@2 [bb4,d5]@2 [a4,c5]@2 g3@2 g3@2 ~ [bb4,d5]@2 [g4,bb4]@2 g3@2 g3@2 [g4,bb4]@2 [gb4,a4]@2 g3@2 g3@2 [g4,bb4]@2 [a4,c5]@2 ~ g3@2 g3@2 [a4,c5]@2 [g4,bb4]@2 g3@2 g3@2 [a4,c5]@2 [gb4,a4]@2 g3@2 g3@2 [gb4,d5]@2 ~ [e4,c5]@2 g3@2 g3@2 [gb4,d5]@2 [g4,bb4]@2 g3@2 g3@2 [gb4,a4]@2 [bb3,g4]@2 g3@2 ~ g3@2 [bb4,g5]@2 [b4,g5]@2 [g3,d4]@2 [g3,d4]@2 [b4,ab5]@2 [b4,gb5]@2 [g3,d4]@2]/3", // Bb Am Bb Gm Gbm Gm Am Gm …
  AW: "[g3,d4]@2 [b4,g5]@2 [c5,g5]@2 ~ [g3,eb4]@2 [g3,eb4]@2 [c5,ab5]@2 [c5,gb5]@2 [g3,eb4]@2 [g3,eb4]@2 [c5,g5]@2 [db5,a5]@2 [g3,e4]@2 [g3,e4]@2 ~ [db5,bb5]@2 [db5,ab5]@2", // G5 Em C5 Cm Fm Cdim Cm C5 …
  AX: "[[g3,e4]@2 [g3,e4]@2 [db5,a5]@2 [d5,bb5]@2 [g3,f4]@2 [g3,f4]@2 [d5,c6]@2 [d5,a5]@2 [g3,f4]@2 ~ [g3,f4]@2 [d5,bb5]@2 [d5,b5]@2 [g3,f4]@2 [g3,f4]@2 [d5,b5]@2 [eb5,c6]@2 [g3,gb4]@2 [g3,gb4]@2 [eb5,c6]@2 ~ [e5,db6]@2 [g3,g4]@2 [g3,g4]@2 [e5,db6]@2 [g5,e6]@2 [g3,bb4]@2 [g3,bb4]@2 [g5,e6]@2 [bb5,g6]@2 [g3,db5]@2 [g3,db5]@2 ~ [bb5,g6]@2 [db6,bb6]@2 [g3,e5]@2 [g3,e5]@2 [db6,bb6]@2 [e6,db7]@4 ~@6 g4@9 f4@9 [g3,eb4,d5]@18 [eb4,c5]@8 [eb4,bb4]@9 [g4,a4]@18 gb4@13 g4@4 [b3,g4]@53, ~@83 d5@18 ~@123]/7", // C Gbm Gm G7 D7 D5 G7 Gm …
})).s("gm_violin").gain(0.3)

// other · violin · soft notes
const violin_soft = note(`<
  ~@32 A B C D E B C D E ~@16 F G H I ~@4 J@5 K@5 L@4 ~@24 M N O P Q R S T U V W X Y Z AA AB AC AD@2 AE@2 AF@4 AG@3 AH
  AI AJ AK AL ~@26
>`.pickRestart({
  A: "c6 ~@2 bb5 ~ a5 ~@2 d6 ~@2 c6 ~ d6 ~@2 bb5 ~@2 c6 ~ d6 ~@2 g5@4 a5 [bb5,c6] d6 [e6,gb6]", // Bbsus2 Esus2
  B: "g6@2 ~ f6 eb6@2 ~ d6 c6@2 ~ bb5 a5@2 ~ g5", C: "f5 f6@3 ~@2 eb6@2 d6@4 ~@2 c6@2 bb5@4 ~@2 a5@2 g5@4 ~@2 f5@2",
  D: "eb5 eb6@3 ~@2 d6@2 c6@4 ~@2 bb5@2 a5@4 ~@2 g5@2 gb5@4 ~@2 g5@2", E: "d5@2 ~ a5 d6@2 ~ c6 bb5@2 ~ a5 g5@2 ~@2",
  F: "~@2 bb5 ~ a5 ~ bb5 ~ g5 ~ bb5 ~ f5 ~ bb5 ~ eb5 ~ bb5 ~ d5 ~ bb5 ~ c5 ~ bb5 ~ bb4 ~ bb5 ~",
  G: "c5 ~ a5 ~ g5 ~ a5 ~ f5 ~ a5 ~ eb5 ~ a5 ~ d5 ~ a5 ~ c5 ~ a5 ~ bb4 ~ a5 ~ a4 ~ a5 ~",
  H: "g4 ~ g5 ~ f5 ~ g5 ~ eb5 ~ g5 ~ d5 ~ g5 ~ c5 ~ g5 ~ bb4 ~ g5 ~ a4 ~ g5 ~ g4 ~ g5 ~",
  I: "a4 ~ g5 ~ gb5 ~ e5 ~ gb5 ~ g5 ~ e5 ~ gb5 ~ g5@2 ~@14",
  J: "[d5@7 eb5@7 f5@20 eb5@13 d5@7 g4@7 gb4@7 ~@6 eb5@7 [f4,d5]@27 bb4@7 c5@7 d5@20 c5@14 bb4@4, g4@27 c5@10 ~@43, ~@68 f4@13 ~@27 f4@14 eb4@38]/5", // Dm
  K: "[~@2 eb4@14 ~@7 bb4@7 [bb3,g4]@27 d5@6 eb5@7 f5@20 eb5@14 d5@7 g4@7 gb4@6 ~@7 eb5@7 [f4,d5]@22, ~@2 a4@20 ~@35 g4@54 c5@20 ~@29, ~@8 d4@7 ~@47 f4@7 ~@11]/5", // Eb Dm
  L: "[~@5 bb4@7 c5@6 d5@20 ~ c5@13 bb4@7 eb4@14 ~@6 bb4@7 [bb3,g4]@27 ~@15, ~@5 f4@13 eb4@41 a4@20 ~@49, ~@73 d4@14 ~@41]/4", // Eb
  M: "~@14 g3 ~ bb3 d4 g4 ~ bb3 d4 g4 ~ bb4 d4 ~ g4 bb4 d5 ~ g4",
  N: "bb4 d5 ~ g5 eb5 ~ f5 g5 f5 ~ eb5 f5 eb5 ~ d5 c5 ~ d5 eb5 d5 ~ c5 d5 c5 ~ bb4 a4@3 ~@3",
  O: "c4@3 ~@2 f4@3 ~@3 a4@3 ~@2 bb4@3 ~@3 a4@3 ~@2 g4@3 ~@2",
  P: "~ f4@3 ~@2 eb4 ~ g4 bb4 eb5 ~ g4 bb4 eb5 ~ g5 bb4 ~ eb5 g5 bb5 ~ eb5 g5 bb5 ~ eb6 c6 ~ d6 eb6",
  Q: "d6 ~ c6 d6 c6 ~ bb5 a5 ~ bb5 c6 bb5 ~ a5 bb5 a5 ~ g5 gb5@3 ~@3 d5@3 ~@2 d6@3",
  R: "~@3 d5@3 ~@2 g5@3 ~@3 g3@3 ~@13 g3 ~",
  S: "bb3 d4 g4 ~ bb3 d4 g4 ~ bb4 d4 ~ g4 bb4 d5 ~ g4 bb4 d5 ~ g5 eb5 ~ f5 g5 f5 ~ eb5 f5 eb5 ~ d5 c5",
  T: "~ d5 eb5 d5 ~ c5 d5 c5 ~ bb4 a4@3 ~@3 c4@3 ~@2 f4@3 ~@3 a4@3 ~@2",
  U: "bb4@3 ~@3 a4@3 ~@2 g4@3 ~@3 f4@3 ~@2 eb4 ~ g4 bb4 eb5 ~ g4 bb4 eb5 ~",
  V: "g5 bb4 ~ eb5 g5 bb5 ~ eb5 g5 bb5 ~ eb6 c6 ~ d6 eb6 d6 ~ c6 d6 c6 ~ bb5 a5 ~ bb5 c6 bb5 ~ a5 bb5 a5",
  W: "~ g5 gb5@3 ~@3 d5@3 ~@2 d6@3 ~@3 d5@3 ~@2 g5@3 ~@3 g3@2",
  X: "~@14 c6 bb5 a5 bb5@2 ~ a5 g5 gb5 g5@2 ~@2 eb5 d5 db5 d5@2", Y: "~ c5 bb4 a4 bb4@2 ~@26",
  Z: "bb5 a5 ab5 a5@2 ~@2 g5 f5 e5 f5@2 ~ db5 c5 b4 c5@2 ~ bb4 a4 ab4 a4@2 ~@8",
  AA: "~@19 ab5 g5 gb5 g5@2 ~ f5 eb5 d5 eb5@2 ~ c5", AB: "bb4 a4 bb4@2 ~@2 ab4 g4 g4@2 ~@22, ~@8 gb4 ~@23",
  AC: "~@5 g5 gb5 f5 gb5@2 ~ eb5 d5 db5 d5@2 ~@2 d5 c5 c5@2 ~@2 bb4 a4 ab4 a4@2 ~@3, ~@20 b4 ~@11",
  AD: "[~@23 db5@2 d5@2 gb5@2 g5@2 a5@2 ~ db6@2 d6@2 a5@2 bb5@2 gb5@2 ~ eb5@2 g5@2 c5@2 eb5@2 eb5@2 ~ c5@2 eb5@2 eb5@2 g5@2, ~@33 bb5@2 ~@9 g5@2 ~@9 g5@2 ~@7]/2",
  AE: "[c5@2 ~ e4@2 f4@2 ab4@2 a4@2 b4@2 ~ e5@2 f5@2 ab5@2 a5@2 b5@2 ~ d6@2 f6@2 bb5@2 d6@2 d6@2 ~ bb5@2 d6@2 d6@2 f6@2 bb5@2 ~ gb5@2 g5@2 d5@2 eb5@2 a4@2 ~ gb4@2 g4@2 bb4 ~, ~@2 eb5@2 ~@9 c5@2 ~@9 c6@2 ~@9 f6@2 ~@9 d6@2 ~@9 bb4@2 ~@5]/2",
  AF: "[eb5 ~ g5 ~ bb5 ab5@2 a5@2 d5@2 eb5@2 b4@2 ~ ab4@2 a4@2 c5 ~ eb5 ~ a5 ~ c6 a5@2 bb5@2 gb5@2 g5@2 db5@2 ~ b4@2 c5@2 a4 ~ bb4 ~ ab4 ~ a4 gb4@2 g4@2 gb5@2 g5@2 gb6@2 ~ gb5@3 g5@3 ~@5 db5@2 d5@2 gb5@2 g5@2 a5@2 ~ db6@2 d6@2 a5@2 bb5@2 gb5@2 ~ eb5@2 g5@2 c5@2 eb5@2 eb5@2 ~ c5@2 eb5@2 eb5@2 g5@2 c5@2 ~ e4@2 f4@2 ab4@2 a4@2 b4@2 ~ e5@2, ~@15 c5@2 ~@20 d5@2 ~@20 g6@2 ~@20 bb5@2 ~@9 g5@2 ~@9 g5@2 ~@9 eb5@2 ~@9 c5@2 ~]/4",
  AG: "[f5@2 ab5@2 a5@2 b5@2 ~ d6@2 f6@2 bb5@2 d6@2 d6@2 ~ bb5@2 d6@2 d6@2 f6@2 bb5@2 ~ gb5@2 g5@2 d5@2 eb5@2 a4@2 ~ gb4@2 g4@2 bb4 ~ eb5 ~ g5 ~ bb5 ab5@2 a5@2 d5@2 eb5@2 b4@2 ~ ab4@2 a4@2 c5 ~ eb5 ~ a5 ~ c6 a5@2 bb5@2 gb5@2 g5@2 db5@2 ~ b4@2 c5@2 a4 ~ bb4 ~ ab4 ~, ~@8 c6@2 ~@9 f6@2 ~@9 d6@2 ~@9 bb4@2 ~@20 c5@2 ~@20 d5@2 ~@9]/3",
  AH: "a4 gb4@2 g4@2 gb5@2 g5@2 gb6@2 ~ gb5@3 g5@3 ~@5 d5@3 ~@6, ~@11 g6@2 ~@19",
  AI: "~@2 bb4 ~ c5 d5 bb4 ~ eb5@3 ~@8 eb5 d5 ~ c5 bb4 a4@3 ~@5",
  AJ: "~@3 a4 ~ bb4 c5 a4 ~ d5@3 ~@8 d5 c5 ~ bb4 a4 g4@3 ~@4",
  AK: "~@4 g4 ~ a4 bb4 g4 ~ c5@3 ~@8 c5 eb5 ~ d5 c5 bb4@3 ~@3", AL: "~@5 a4 ~ c5 bb4 a4 ~ g4@3 ~@18",
})).s("gm_violin").gain(0.2)

// chords · pizzicato strings
const pizzicato_strings = note("<~@41 A B C D ~@47 E F@2 G H I ~@64>".pickRestart({
  A: "~@5 [eb4,c5,g5] ~@2", B: "~@5 [d4,bb4,f5] ~@2", C: "~@5 [a3,g4,eb5] ~@2", D: "~@5 [d4,bb4,g5] ~@2",
  E: "~ [bb3,g4,d5]@3 ~@3 [b3,g4,f5]@3 ~@3 [c4,g4,f5]@3", // Gm G7 Csus4
  F: "[~@6 [c4,g4,eb5]@6 d5@5 [a3,f4,c5]@6 ~@6 [a3,f4,eb5]@6 ~@6 [bb3,f4,eb5]@6 ~@6 [bb3,f4,d5]@6 ~@5]/2", // Cm F F7 Bbsus4 Bb
  G: "[eb4,g4,c5]@3 ~@3 [c4,g4,eb5]@3 ~@3 [a3,gb4,d5]@3 ~", H: "~@4 [g3,d4,bb4]@6 ~@5 [c4,g4,a4]@6 ~@6 [d4,gb4,a4]@5",
  I: "~ [c4,d4,bb4]@6 [bb3,g4]@6 ~@19", // Gm Eb
})).s("gm_pizzicato_strings").gain(0.3)

// chords · pizzicato strings · soft notes
const pizzicato_strings_soft = note("<~@97 A@3 B C D ~@59>".pickRestart({
  A: "[~@32 d5@4 ~@7 f5@4 ~@7 f5@4 ~@7 eb5@4 d5@5 ~@2 c5@4 ~@7 eb5@4 ~@5, ~@30 bb3@5 ~@6 b3@5 ~@6 c4@5 ~@6 c4@5 ~@6 a3@5 ~@6 a3@5 ~@6, ~@31 g4@4 ~@7 g4@4 ~@7 g4@4 ~@7 g4@4 ~@7 f4@4 ~@7 f4@4 ~@6]/3",
  B: "~@2 eb5@4 ~@7 d5@4 ~@7 c5@4 ~@4, bb3@5 ~@6 bb3@5 ~@7 g4@4 ~@5, ~ f4@4 ~@7 f4@4 ~@6 eb4@5 ~@5",
  C: "~@3 eb5@4 ~@7 d5@4 ~@7 bb4@4 ~@3, ~ c4@5 ~@6 a3@5 ~@6 g3@5 ~@4, ~@2 g4@4 ~@7 gb4@4 ~@7 d4@4 ~@4",
  D: "~@4 a4@4 ~@7 a4@4 ~@2 bb4@3 [bb3,g4]@5 ~@3, ~@2 c4@5 ~@6 d4@5 ~ c4@5 ~@8, ~@3 g4@4 ~@7 gb4@4 ~@2 d4@4 ~@8", // Eb
})).s("gm_pizzicato_strings").gain(0.15)

stack(violin, violin_soft, pizzicato_strings, pizzicato_strings_soft)