Strudelify

Passacaglia for Violin and Viola

Johan Halvorsen

KeyB♭ majorTempo110 bpm
0:00/0:00
// Passacaglia for Violin and Viola — Johan 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 137) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2231131; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 161 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.

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

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

// other · viola
const viola = note(`<
  A@4 B C@2 D@3 E F G@2 H ~@2 I@3 J@2 K L@3 M@2 N@2 O P Q R O P Q R S T U V W X Y Z W X Y Z AA AB AC AD ~@9 AE@5 ~ AF@7
  ~@2 AG@4 ~@3 AH AI@3 AJ ~@2 AK AL@2 AM AN AO@3 ~@5 AP AQ AR@2 AS@2 AT AU AV AW AX AY AZ BA BB BC@2 BD@2 BE@2 BF@2 BG@2
  BH@2 BI BJ BK BL BM BN@2 BO@2 BP@3 BQ@6 BR@3 BS BT@7
>`.pickRestart({
  A: "[g4@5 eb4@5 f4@5 bb3@5 eb4@5 c4@5 d4@2]/4", B: "~ d3@5 g3@10",
  C: "[bb3 g4@4 f4@5 eb4@5 d4@5 c4@5 d4@5 eb4@5 d4@5 f4@5 eb4@5 d4@5 c4@5 bb3@4]/2",
  D: "[~ c4@5 d4@5 bb3@5 eb4@5 d4@5 c4@5 bb3@5 a3@5 bb3@5 c4@5 a3@5 d4@5 c4@5 bb3@5 a3@5 g3@5 d4@5 bb3@5 a3@5]/3",
  E: "g3@5 bb3@5 c4 ~@4 eb3", F: "~@4 f3@5 a3@5 bb3 ~", G: "[~@3 d3 ~@4 eb3@5 g3@5 a3 ~@4 c3 ~@4 d3@4]/2",
  H: "~@2 gb3@10 g3@15 a3@5",
  I: "[~@16 g3@5 bb3@5 eb4@5 d4@5 c4@5 bb3@5 a3@5 g3@5 gb3@5 g3@5 c4@5 bb3@5 bb3@5 a3@5 g3@10]/3",
  J: "[[bb3,d4]@5 ~@5 [g3,d4]@5 ~@5 [c4,g4]@5 ~@5 [c4,eb4]@5 ~@5 f4@5 ~@5 [a3,f4]@5 ~@5 [bb3,f4]@4]/2", // Bb G5 C5 Cm Dm Bb5
  K: "~@6 [d4,f4]@5 ~@5 g4@2 ~ a4@2 ~@2 bb4@2 ~ eb4@2 ~ f4@2 ~", // Dm
  L: "[~ g4@2 ~ c4@2 ~ d4@2 ~@2 eb4@2 ~ bb3@2 ~ c4@2 ~@2 d4@2 ~ gb3@2 ~ g3@2 ~@2 a3@2 ~ d3@2 ~ d4@2 ~@2 c4@2 ~ bb3@2 ~ c4@2 ~@2 d4@2 ~ g3@13 d4@3 ~ c4@3 bb3@3 c4@3 ~ d4@3 eb4@3 f4@3 ~ g4@3 c3@2]/3",
  M: "[~ d3@3 ~ eb3@3 f3@3 c4@3 ~ bb3@3 a3@3 bb3@3 ~ c4@3 d4@3 eb4@3 ~ f4@3 bb3@3 c4@3 ~ d4@3 c4@10 eb4@3 d4@3]/2",
  N: "[~ c4@3 d4@7 g4 c4@2 bb3@7 a4 g4@2 g4@10 gb4@10 [g3,g4]@15 ~@5, ~@6 a3@5 ~@5]/2", // G
  O: "g3 ~ d4 ~ bb4 ~ d4 ~ bb3 ~ g4 ~ d5 ~ g4 ~ c4 ~ g4 ~ eb5 ~ g4 ~ eb4 ~ c5 ~ f4 ~ c5 ~",
  P: "f3 ~ c4 ~ a4 ~ c4 ~ a3 ~ f4 ~ c5 ~ f4 ~ bb3 ~ f4 ~ d5 ~ f4 ~ d4 ~ bb4 ~ eb4 ~ bb4 ~",
  Q: "eb3 ~ bb3 ~ g4 ~ bb3 ~ g3 ~ eb4 ~ bb4 ~ eb4 ~ a3 ~ eb4 ~ c5 ~ eb4 ~ c4 ~ a4 ~ d4 ~ a4 ~",
  R: "d4 eb5 d5 c5 bb4 c5 bb4 a4 g4 a4 g4 d4 bb3 c4 bb3 a3",
  S: "g3@2 [g3,d4,bb4]@2 ~@2 bb3@2 g4 f4 eb4 d4 c4 bb3 a3 g3", // Gm
  T: "f3@2 [c4,f4,a4]@2 ~@2 a3@2 f4 eb4 d4 c4 bb3 a3 g3 f3", U: "eb3@2 [bb3,g4]@2 ~@2 g3@2 eb4 d4 c4 bb3 a3 g3 gb3 g3",
  V: "d3@2 [c4,gb4]@2 ~@2 gb3@2 g3 a3 bb3 c4 d4 c4 bb3 a3", // Cdim
  W: "g3 a3 ~ bb3 c4 d4 ~ eb4 f4 g4 ~ a4 bb4 c5 ~ d5 eb5@4 ~@4 eb3@8",
  X: "f3 g3 ~ a3 bb3 c4 ~ d4 eb4 f4 ~ g4 a4 bb4 ~ c5 d5@4 ~@4 d3@8",
  Y: "eb3 f3 ~ g3 a3 bb3 ~ c4 d4 eb4 ~ f4 g4 a4 ~ bb4 c5@4 ~@4 d5 bb4 ~ g4 d4 bb3 ~ g3",
  Z: "c4 d4 ~ eb4 c4 d4 ~ eb4 d4@4 d3@4 g3 a3 ~ bb3 c4 bb3 ~ a3 g3@8",
  AA: "g3 d4 bb3 d4 g3 d4 bb3 d4 c4 g4 eb4 g4 c4 g4 eb4 g4",
  AB: "f3 bb3 g3 bb3 f3 bb3 g3 bb3 a3 eb4 c4 eb4 a3 eb4 c4 eb4",
  AC: "eb3 bb3 g3 bb3 eb3 bb3 g3 bb3 a3 eb4 c4 eb4 a3 eb4 c4 eb4",
  AD: "d4 c5 a4 c5 d4 c5 a4 c5 [g3,d4,bb4] d4 c4 d4 bb3 c4 a3 bb3", // Gm
  AE: "[~ bb4@25 ~ b4@8 [c4,c5]@17 [d4,bb4]@17 [eb4,bb4]@17 [f4,a4]@17 a4@17 ab4@17 ~@23, ~ g3@68 ~@34 bb3@34 ~@23]/5", // C Gm Eb5 F
  AF: "[~@29 [d4,gb4]@17 [g3,d4]@34 bb4@25 b4@8 ~ [c4,c5]@17 [d4,bb4]@17 [eb4,bb4]@17 [f4,a4]@16 a4@17 ab4@17 ~@9, ~@80 g3@68 ~@33 bb3@34 ~@9]/7", // D G5 C Gm Eb5 F
  AG: "[~@12 [d4,gb4]@17 [g3,d4]@34 [b3,d4]@34 ~@31]/4", AH: "~@8 a3@8 [a3,c4]@8 ~ [bb3,d4]@7",
  AI: "[~ [c4,eb4]@8 ~ [gb3,a3]@17 [d3,c4]@17 [g3,c4]@8 bb3@8 ~ a3@8 g3@8 ~@19]/3", AJ: "~@11 [b3,d4]@20 ~",
  AK: "~@13 a3@4 [a3,c4]@5 [bb3,d4]@5 [c4,eb4]@5", AL: "[[gb3,a3]@10 [d3,c4]@10 [g3,c4]@5 bb3@4 a3@5 g3@5 ~@25]/2",
  AM: "~@7 g3 ~ a3 ~@2 bb3 ~@4 g3 ~ a3 ~@2 b3 ~@4 c4 ~ d4 ~ eb4",
  AN: "~@4 c3 ~@2 d3 ~ eb3 ~@4 f3@2 ~ g3@2 a3@2 ~@3 f3@2 g3@2 ~ a3@2 ~",
  AO: "[~@2 bb3@2 c4@2 ~ d4@2 ~@2 bb3@2 ~ c4@2 d4@2 ~@3 c4@2 ~ d4@2 eb4@2 ~@3 c3@2 d3@2 ~ eb3@2 ~@3 d3@2 e3@2 ~ gb3@2 ~@3 g3@2 a3@2 bb3@2 ~@3 c4@2 ~ d4@2 eb4@2 ~@3 d3@2 ~ e3@2 gb3@2 g3@2 ~ c4@2 bb3@2 ~ a3@2 g3@9]/3",
  AP: "~@2 g3@3 ~@2 bb3@3 ~@2 d4@3 ~@2 c4@3 ~@2 bb3@3 ~@2 a3@3 ~@2",
  AQ: "g3@3 ~@2 f3 a3 c4 f4 a3 ~ c4 f4 a4 c4 ~ f4 a4 c5 f4 a4 ~ c5 eb5 d5 eb5 ~ f5 eb5 d5 eb5 d5",
  AR: "[~ c5 bb4 c5 d5 ~ c5 bb4 c5 bb4 a4 ~ g4@3 ~@2 eb4@3 ~ g4@3 ~@2 bb4@3 ~@2 a4@3 ~@2 bb4@3 ~@2 c5@3 ~@2 eb5@3 ~@2 d5!2 eb5 d5 ~ c5 d5 c5 bb4 ~ a4 bb4 a4]/2",
  AS: "[g4 gb4 ~ eb4 d4 c4 bb3 ~ c4 bb3 a3 g3 bb3 ~ d4 gb4 g4 bb4 ~ d5 gb5 g5@5 ~@5 g3@3 ~@2 bb3@3 ~@2 d4@3 ~ c4@3 ~@2 bb3@3 ~@2 a3@3 ~@2 g3@3 ~]/2",
  AT: "~ f3 a3 c4 ~ f4 a3 c4 f4 ~ a4 c4 f4 a4 c5 ~ f4 a4 c5 eb5 ~ d5 eb5 f5 eb5 d5 ~ eb5 d5 c5 bb4 ~",
  AU: "c5 d5 c5 bb4 c5 ~ bb4 a4 g4@3 ~@2 eb4@3 ~@2 g4@3 ~@2 bb4@3 ~@2 a4@3 ~",
  AV: "~ bb4@3 ~ c5@3 ~@2 eb5@3 ~@2 d5!2 ~ eb5 d5 c5 d5 ~ c5 bb4 a4 bb4 a4 ~ g4 gb4 eb4",
  AW: "d4 ~ c4 bb3 c4 bb3 a3 ~ g3 bb3 d4 gb4 ~ g4 bb4 d5 gb5 g5@5 ~@10",
  AX: "~@10 d3 eb3 [eb3,f3] ~@2 gb3 [g3,ab3] g3 ~@2 [b3,c4] d4 c4 ~@2 [d4,eb4] f4 eb4 ~@4", // Ebsus2 Abmaj7 Cmaj7 Ebmaj7
  AY: "~@17 db3 d3 [d3,eb3] ~@2 e3 f3 [f3,g3] ~@2 a3 [bb3,db4] bb3 ~@2", // Ebmaj7 Fsus2 Bbm
  AZ: "[db4,d4] eb4 d4 ~@21 d3 eb3 d3 c3 ~ d3 eb3 [eb3,f3]", BA: "~@2 ab3 a3 [a3,bb3] ~@2 b3 [c4,d4] c4 ~@21 gb3",
  BB: "g3 a3 g3@2 ~ a3 bb3 c4 bb3@2 ~@2 db4 d4 eb4 d4@4 ~@3 gb4 g4 a4 g4@5 ~@2",
  BC: "[~@3 g4@2 bb4@2 bb4@2 d5@2 ~ g5@2 g5@2 bb5@2 d5@2 g5@2 ~ d5@2 c5@2 eb5@2 g4@2 c5@2 ~ eb5@2 g4@2 c5@2 c5@2 eb4@2 ~ c4@2 a3@2 c4@2 c4@2 f4@2 ~ a4@2 a4@2 c5@2 c5@2, ~@11 d5@2 ~@9 bb4@2 ~@9 c5@2 ~@9 bb3@2 ~@9 f4@2 ~@7]/2",
  BD: "[f5@2 ~ a5@2 bb5@2 d6@2 f5@2 bb5@2 ~ d6@2 f5@2 bb5@2 bb5@2 d6@2 ~ bb5@2 bb4@2 eb5@2 g4@2 bb4@2 ~ g4@2 bb3@2 eb4@2 g4 ~ bb4 ~ eb5 g5 ~ c5@2 eb5@2 a4@2 c5@2 ~ g4@2 eb4@2 g4@2, ~@2 f5@2 ~@9 bb5@2 ~@9 f5@2 ~@9 eb4@2 ~@20 eb4@2 ~@5]/2",
  BE: "[a4 ~ c5 ~ eb5 c5 ~ eb5@2 g5@2 bb4@2 d5@2 ~ bb4@2 eb4@2 g4@2 d4@2 g4@2 ~ gb4@2 bb3@2 d4@2 bb4@3 d5@3 g5@3 bb5@3 [bb4,eb5]@9 ~@8 g4@2, ~@15 g4@2 ~@9 c4@2 ~@36]/2", // Eb5
  BF: "[bb4@2 bb4@2 d5@2 ~ g5@2 g5@2 bb5@2 d5@2 g5@2 ~ d5@2 c5@2 eb5@2 g4@2 c5@2 ~ eb5@2 g4@2 c5@2 c5@2 eb4@2 ~ c4@2 a3@2 c4@2 c4@2 f4@2 ~ a4@2 a4@2 c5@2 c5@2 f5@2 ~ a5@2, ~@6 d5@2 ~@9 bb4@2 ~@9 c5@2 ~@9 bb3@2 ~@9 f4@2 ~@9 f5@2 ~]/2",
  BG: "[bb5@2 d6@2 f5@2 bb5@2 ~ d6@2 f5@2 bb5@2 bb5@2 d6@2 ~ bb5@2 bb4@2 eb5@2 g4@2 bb4@2 ~ g4@2 bb3@2 eb4@2 g4 ~ bb4 ~ eb5 g5 ~ c5@2 eb5@2 a4@2 c5@2 ~ g4@2 eb4@2 g4@2 a4 ~ c5 ~ eb5, ~@8 bb5@2 ~@9 f5@2 ~@9 eb4@2 ~@20 eb4@2 ~@10]/2",
  BH: "[c5 ~ eb5@2 g5@2 bb4@2 d5@2 ~ bb4@2 eb4@2 g4@2 d4@2 g4@2 ~ gb4@2 bb3@2 d4@2 bb4@3 d5@3 g5@3 bb5@3 [bb4,eb5]@9 ~@11 d4 c4 ~ bb3, ~@10 g4@2 ~@9 c4@2 ~@41]/2", // Eb5
  BI: "a3 ~ g3@3 ~@8 g4 f4 eb4 ~ d4 c4@3 ~@8 c4 bb3 ~", BJ: "a3 g3 ~ f3 ~@10 f4 eb4 d4 ~ c4 bb3@3 ~@8 bb3 a3",
  BK: "~ g3 f3 ~ eb3@3 ~@8 eb4 d4 c4 ~ bb3 a3@3 ~@8 bb3", BL: "d4 ~ c4 bb3 ~ a3@3 ~@8 d4 c4 bb3 ~ a3 g3@11",
  BM: "~@11 [b3,g4]@16 ~ [b3,g4]@3 ~", // Em
  BN: "[~ [a3,g4]@11 [b3,g4]@11 [c4,g4]@16 ~ [c4,eb4]@3 ~@2 [c4,d4]@11 [c4,eb4]@8]/2", // A7 Em C5 Cm Csus2 Cm
  BO: "[bb3@3 [f3,a3]@16 ~ [f3,a3]@3 ~@2 [f3,g3]@11 [f3,a3]@11 [bb3,d4]@16 ~]/2", // F Fsus2 F Bb
  BP: "[[bb3,d4]@3 ~@2 [bb3,c4]@11 [bb3,d4]@4 ~@4 a3 ~@2 [g3,d4]@16 ~ [g3,d4]@3 ~@2 [g3,eb4]@11 [g3,d4]@11 [g3,a4]@3 a3 bb3 ~ c4 d4 eb4 f4 g4 a4 g4 ~ eb4 g4 ~ eb4 c4 a3 ~ c4 a3 g3 ~]/3", // Bb Bbsus2 Bb G5 Cm G5 Gsus2
  BQ: "[eb3 g3 ~ eb3 f3 eb3 ~ d3 c3@11 [d3,a3]@16 ~ [d3,a3]@3 ~@2 [d3,a3]@11 [d3,a3]@11 [d3,bb3]@26 [d3,bb3]@44 ~ [bb4,d5]@2 [bb4,d5]@2 g3@2 ~ [a4,c5]@2 [a4,c5]@2 g3@2 ~ [c5,eb5]@2 [c5,eb5]@2 g3@2 ~ [bb4,d5]@2 [bb4,d5]@2 g3@2 ~ [a4,c5]@2 [a4,c5]@2 g3@2 ~ [g4,eb5]@2 [g4,eb5]@2 g3@2 ~ [bb4,d5]@2 [bb4,d5]@2 g3@2 ~ [a4,c5]@2 [a4,c5]@2 g3@2 ~ [g4,bb4]@2, ~@133 g3@2 ~@5 g3@2 ~@5 g3@2 ~@5 g3@2 ~@5 g3@2 ~@5 g3@2 ~@5 g3@2 ~@5 g3@2 ~@5 g3@2 ~]/6", // D5 Gm Bb Am Cm Bb Am Cm …
  BR: "[[g4,bb4]@2 g3 g3@2 [gb4,a4]@2 [gb4,a4]@2 g3 g3@2 [a4,c5]@2 [a4,c5]@2 g3 g3@2 [g4,bb4]@2 [g4,bb4]@2 g3 g3@2 [gb4,a4]@2 [gb4,a4]@2 g3 g3@2 [e4,c5]@2 [e4,c5]@2 g3 g3@2 [gb4,a4]@2 [gb4,a4]@2 g3 g3@2 [bb3,g4]@2 [bb3,g4]@2 g3 [g3,f4]@2 [f4,b4]@2 [f4,b4]@2 [g3,f4] [g3,f4]@2 [f4,b4]@2 [f4,b4]@2 g3 [g3,eb4]@2 [eb4,c5]@2 [eb4,c5]@2 [g3,eb4] [g3,eb4]@2 [eb4,c5]@2 [eb4,c5]@2 g3 [g3,e4]@2 [e4,db5]@2 [e4,db5]@2 [g3,e4] [g3,e4]@2 [e4,db5]@2 [e4,db5]@2 g3 [g3,f4]@2, ~@65 f4@2 ~@12 eb4@2 ~@12 e4@2 ~]/3", // Gm Gbm Am Gm Gbm C Gbm Eb …
  BS: "[f4,d5]@2 [f4,d5]@2 [g3,f4] [g3,f4]@2 [f4,d5]@2 [f4,d5]@2 g3 [g3,d4]@2 [d4,b4]@2 d4 [g3,d4]@2 [g3,eb4]@2 [eb4,c5] [eb4,c5]@2 [g3,eb4]@2 e4 [e4,db5]@2 e4 [g3,e4]@2, ~@11 f4@2 ~@3 b4@2 ~@8 g3@2 ~ db5@2 ~", // Dm G7 Dm G5 G G5 Cm Dbm …
  BT: "[g4 [g4,e5]@2 [g4,e5] [g3,g4] [g3,bb4] ~ [bb4,g5]!2 ~ [g3,bb4] [g3,db5] [db5,bb5] ~ [db5,bb5] [g3,db5] [g3,db5,bb5]@24 ~@19 [bb3,d4]@14 ~ [c3,d4]@14 [c3,c4]@7 [c3,bb3]@9 a3@8 d4@9 [d3,c4]@18 [g3,d4]@59 ~@26, g3@2 ~@102 d3@17 ~@103]/7", // C G Gm Eb Gm Gdim Gb Gdim …
})).s("gm_viola").gain(0.25)

// other · viola · soft notes
const viola_soft = note("<~@15 A@2 B ~@36 C D E F G H I J K ~@4 L@3 ~@5 M@4 ~@2 N O@4 ~@3 P@4 ~@68>".pickRestart({
  A: "[bb3@5 d4@5 g4@5 f4@5 eb4@5 d4@5 c4@5 bb3@5 a3@5 c4@5 f4@5 eb4@5 d4@4]/2", B: "~ c4@5 bb3@5 a3@5 ~@16",
  C: "g3 d4 bb3 d4 g3 d4 bb3 d4 c4 g4 eb4 g4 c4 g4 eb4 g4",
  D: "f3 bb3 g3 bb3 f3 bb3 g3 bb3 a3 eb4 c4 eb4 a3 eb4 c4 eb4",
  E: "eb3 bb3 g3 bb3 eb3 bb3 g3 bb3 a3 eb4 c4 eb4 a3 eb4 c4 eb4",
  F: "d4 c5 a4 c5 d4 c5 a4 c5 bb4 d4 c4 d4 bb3 c4 a3 bb3",
  G: "g3@2 bb3@2 d4@2 bb3 ~ d4 ~ g4 ~ bb4 ~ d5 ~ db5@2 bb4@2 a4@2 e4 ~ db4 ~ bb3 ~ g3 ~ e3 ~",
  H: "eb3@2 f3@2 a3@2 c4 ~ eb4 ~ f4 ~ a4 ~ c5 ~ b4@2 ab4@2 f4@2 d4 ~ b3 ~ ab3 ~ f3 ~ d3 ~",
  I: "db3@2 e3@2 g3@2 bb3 ~ db4 ~ e4 ~ d4 ~ db4 ~ c4@2 d4@2 gb4@2 a4 ~ bb3@2 d4@2 g4@2 d5 ~",
  J: "c5@2 bb4@2 a4@2 g4@2 gb4@2 d4@3 e4@3 gb4@3 ~ g4@3 d4@4 bb3@5", K: "~ d4@5 g3@26",
  L: "[~@9 [bb3,g4]@33 a3@17 bb3@17 [c4,g4]@17 ~@3, ~@21 g4@17 ~@10]/3", // Eb C5
  M: "[~@23 [bb3,g4]@34 a3@17 bb3@17 [c4,g4]@17 ~@20, ~@57 g4@34 ~@37]/4", N: "~ c4@8 d4@8 c4@8 ~ bb3@6",
  O: "[~@2 [a3,f4]@34 bb3@8 ~ c4@8 bb3@8 ~ a3@8 [g3,eb4]@34 ~@24]/4", // Dm Cm
  P: "[~@30 c4@5 d4@5 c4@5 bb3@5 [a3,f4]@19 bb3@5 c4@5 bb3@5 a3@5 [g3,eb4]@20 ~@19]/4", // Dm Cm
})).s("gm_viola").gain(0.15)

// other · pizzicato strings
const pizzicato_strings_2 = note(`<
  ~@100
  [~@3 g3@2 ~ a3@2 bb3@2 ~@3 g3@2 ~ a3@2 b3@2 ~@3 c4@2 d4@2 ~ eb4@2 ~@2]
  [~ c3@2 d3@2 ~ eb3@2 ~@3 f3@2 g3@2 a3@2 ~@3 f3@2 ~ g3@2 a3@2 ~@3 bb3@2]
  [~ c4@2 d4@2 ~@3 bb3@2 c4@2 ~ d4@2 ~@3 c4@2 d4@2 ~ eb4@2 ~@2 c3@2 ~ d3@2]
  [eb3@2 ~@3 d3@2 ~ e3@2 gb3@2 ~@3 g3@2 a3@2 ~ bb3@2 ~@3 c4@2 d4@2 ~ eb4@2]
  [~@3 d3@2 e3@2 gb3@2 ~ g3@2 c4@2 ~ bb3@2 a3@2 ~ g3@10 ~@2]
  ~@56
>`).s("gm_pizzicato_strings").gain(0.05)

stack(pizzicato_strings, pizzicato_strings_soft, viola, viola_soft, pizzicato_strings_2)