Strudelify

csardas

Vittorio Monti

KeyF majorTempo60 bpm
0:00/0:00
// csardas — Vittorio Monti
// 60 bpm, 2/4, key F 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 (2/4 at bar 1, 4/4 at bar 7, 2/4 at bar 59) are rendered on a constant 2/4 grid of one bar per cycle
// note: ch 1 "Flute" named as a pipe, played on flute (its string ensemble 1 patch is not one); ch 3 "B♭ Clarinet" named as a reed, played on clarinet (its tremolo strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5951904; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 137 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/2)

// 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 · flute
const flute = note(`<
  A@3 ~@2 B ~@18 C@2 D ~ E@2 ~@10 F@4 ~@13 G H@2 I J K L M N O@2 P@2 ~ Q R S T U V@2 W X Y Z AA AB AC@5 AD AE@6 AF AG AH
  ~@17 AI AJ AK AL AM AN AO AP@2 AQ AR AS@3 AT AU@2 AV@2 AW@2
>`.pickRestart({
  A: "[[d2,a4,d5]@18 [bb1,bb4,d5]@19 [g1,g5,bb5]@38 ~ [a1,e5,a5]@10 ~@10]/3", B: "[a1,e5,g5]", C: "[bb4@3 g4]/2",
  D: "f4@15 ~", E: "[[e4,a4]@19 ~@13]/2", F: "[~@17 bb4@48 g4@16 f4@30 ~@17]/4",
  G: "~@16 [d5,f5]@2 ~@5 [d5,f5]@2 ~@4 [d5,f5]@2 ~", // Dm
  H: "[~@4 [d5,f5]@2 ~@5 [d5,f5]@2 ~@4 [d5,f5]@2 ~@5 [d5,f5]@2 ~@5 [d5,f5]@2 ~ f5 ~ g5 d5@2 g5 ~ f5 g5 ~ d5@2 g5 f5 ~ g5 ~ a5 g5 ~ f5 ~ g5 d5@2 f5 ~ a5@2 ~, ~@37 a5 ~@6 a5 ~@6 d5@2 ~@4 a5 ~@6]/2", // Dm
  I: "g5@7 [d5,gb5]@3 ~@3 d5@2 ~@5 d5@2 ~@5 [bb4,g5]@2 ~@3, d5@2 ~@8 g5@9 ~@13", // D Eb
  J: "~ [bb4,g5]@2 ~@5 [bb4,g5]@2 ~@5 [bb4,g5]@3 d5 ~ e5 a4@2 e5 ~ d5 e5 ~ a4@2 e5 d5, ~@21 f5 ~@6 f5 ~@3", // Eb
  K: "~ e5 ~ f5 e5 ~ d5 ~ f5 a4@2 d5 ~@4 g6@2 ~ e6@2 ~@2 db6@2 ~ a5@2 ~ g5@2 ~, ~@3 a4@2 ~@4 e5 ~@22",
  L: "~ e5@2 ~ db6@2 ~@26", M: "~@5 [d5,f5]@2 ~@5 [d5,f5]@2 ~@5 [d5,f5]@2 ~@4 [d5,f5]@2 ~@5",
  N: "[d5,f5]@2 ~@5 [d5,f5]@2 ~@4 [d5,f5]@2 ~@5 [d5,f5]@2 ~ f5 ~ g5 ~ a5 g5 ~ f5 ~, ~@27 d5@2 ~@3", // Dm
  O: "[g5 d5@2 g5 ~ f5 g5 ~ d5@2 g5 f5 ~ g5 ~ a5 f5 ~ a5@2 ~ g5@7 [d5,gb5]@3 ~@4 d5@2 ~@4 d5@2 ~@5 [bb4,g5]@2 ~@5 [bb4,g5]@2 ~@4 [bb4,g5]@2 ~, ~ a5 ~@6 a5 ~@6 d5@2 ~@4 d5@2 ~@8 g5@9 ~@24]/2", // D Eb
  P: "[~@4 [bb4,g5]@3 d5 ~ e5 ~ f5 e5 ~ d5 ~ e5 a4@2 e5 ~ d5 e5 ~ a4@2 e5 d5 ~ f5 ~ e5 d5 ~@4 g6@2 ~@2 e6@2 ~ db6@2 ~ a5@2 ~@2 g5@2 ~ e5@2 ~ db6@2 ~@5, ~@11 a4@2 ~@4 f5 ~@6 f5 ~@6 a4@2 ~@31]/2", // Eb
  Q: "~@31 bb4", R: "~ a4 ~ bb4 c5 ~ d5 ~ e5 f5 ~ g5 ~ a5@6 bb5@5 a5@2 a5@6",
  S: "~ db6@5 e6 e6@2 ~@2 d6@6 a5@3 ~ d6@11",
  T: "~@2 g5 ~ f5 e5 ~ f5 ~ g5 f5 ~ e5 ~ f5 g5 ~ f5 ~ e5 f5 ~ g5 ~ f5 e5 ~ g5 ~ f5 e5 ~",
  U: "d5 ~ e5 f5 ~ e5 ~ d5 e5 ~ f5 ~ e5 d5 ~ e5 ~ f5 e5 ~ d5 ~ f5 ~@4 g6@2 ~ e6@2",
  V: "[~ db6@2 ~@2 a5@2 ~ g5@2 ~ e5@2 ~@2 db6@2 ~ e6@2 ~ d6@7 db6@3 d6@6 ~@27]/2",
  W: "~@21 bb4 a4 ~ bb4 ~ c5 d5 ~ e5 ~ f5", X: "g5 ~ a5@7 bb5@5 a5 a5@7 db6@5 e6@2 e6@2 ~",
  Y: "d6@7 a5@3 d6@13 g5 ~ f5 ~ e5 f5 ~ g5 ~",
  Z: "f5 e5 ~ f5 ~ g5 f5 ~ e5 ~ f5 g5 ~ f5 ~ e5 g5 ~ f5 ~ e5 d5 ~ e5 ~ f5 e5 ~ d5 ~ e5 f5",
  AA: "~ e5 ~ d5 e5 ~ f5 ~ e5 d5 ~ f5 ~@4 g6@2 ~ e6@2 ~@2 db6@2 ~ a5@2 ~ g5@2 ~",
  AB: "~ e5@2 ~ db6@2 ~ e6@2 ~@2 d6@6 db6@3 ~ d6@6 ~@5", AC: "[~@13 d2@30 gb2@30 g2@30 e2@30 db2@27]/5",
  AD: "~@3 a1@29",
  AE: "[~ d2@30 d2@15 ~@8 a1@7 [gb5,a5]@15 [gb4,a4]@14 ~@16 [gb5,bb5]@15 ~@15 [e5,b5]@15 ~@15 [e5,b5]@15 [a1,a5,d6]@11, ~@61 d2@30 gb2@30 g2@30 e2@30 ~@11]/6", // Gbm Gb E5 D5
  AF: "~@4 [gb5,a5]@15 [a1,b4,g5]@13", AG: "~@2 [a1,a4,db5]@15 [d2,a4,d5]@15",
  AH: "~@8 [a1,a4,db5]@4 ~@3 [d2,a4,d5]@15 ~@2", AI: "~@21 bb4 ~ a4 ~ bb4 c5 ~ d5 ~ e5 f5",
  AJ: "~ g5 ~ a5@6 bb5@5 a5@2 a5@7 db6@5 e6 e6@2 ~", AK: "~ d6@6 a5@3 ~ d6@13 g5 ~ f5 e5 ~ f5 ~ g5",
  AL: "f5 ~ e5 ~ f5 g5 ~ f5 ~ e5 f5 ~ g5 ~ f5 e5 ~ g5 ~ f5 e5 ~ d5 ~ e5 f5 ~ e5 ~ d5 e5 ~",
  AM: "f5 ~ e5 d5 ~ e5 ~ f5 e5 ~ d5 ~ f5 ~@4 [db5,g5]@2 ~@4 [db5,g5]@2 ~@5 [db5,g5]@2", // Dbdim
  AN: "~@5 [db5,g5]@2 ~ [d2,d5,gb5]@3 ~@4 a1@3 ~@3 d2@3 ~@4 a1@3 ~", AO: "~@3 d2@3 ~@3 a1@3 ~@4 d2@3 ~@4 a1@3 ~@3 d2@3",
  AP: "[~@4 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@2 g5 a5 ~ g5 ~ gb5 g5 ~ a5 ~ g5 d2@2 g5 ~ a5 g5 ~ a1@2 g5 a5 ~ gb5 ~ [g1,a5]@3 ~@3 b1@3 ~ gb5@3, ~@24 gb5 ~@6 a1@3 ~@3 gb5 ~@6 gb5 ~@9 g5@6 ~@4]/2", // Gsus2
  AQ: "g5@7 g1@3 ~@3 e2@2 gb5 ~ g5 gb5 ~ b1@2 gb5 g5 ~ gb5 ~ e5 gb5 ~ g5 ~, g2@3 ~@10 e5 ~@6 e5 ~@6 e2@3 ~@2",
  AR: "gb5 g1@2 g5 ~ gb5 e5 ~ a1@2 e5 gb5 ~ e5 ~ d5 e5 ~ gb5 ~ e5 gb2@2 e5 ~ gb5 e5 ~ a1@2 gb5 e5, ~ e5 ~@6 d5 ~@6 d2@3 ~@3 d5 ~@6 d5 ~@3",
  AS: "[~ d5 ~ db5 d5 ~ e5 ~ d5 ab1@2 d5 ~ e5 d5 ~ e2@2 d5 e5 ~ d5 ~ db5 d5 ~ e5 ~ d5 a1@3 ~@4 g2@3 ~@4 e2@3 ~@3 a1@3 ~@4 d2@3 [d5,gb5]@2 ~@2 a1@3 [d5,gb5]@2 ~ d2@3 ~ [d5,gb5]@2 ~ a1@3 [d5,gb5]@2 ~@2 d2@3 [d5,gb5]@2 ~ a1@3 ~ [d5,gb5]@2 ~, ~@3 b1@3 ~@3 db5 ~@6 db5 ~@6 e1@3 ~@3 [db5,a5]@22 ~@45]/3", // D Gbm
  AT: "d2@3 [d5,gb5]@2 ~@2 a1@3 [d5,gb5]@2 ~ d2@3 ~ [d5,gb5]@2 ~ a1@3 [d5,gb5]@2 ~@2 d2@3 [d5,gb5]@2", // D
  AU: "[~ a1@3 ~ [d5,gb5]@2 ~ g1@3 [e5,g5]@2 ~@2 b1@3 [e5,g5]@2 ~ g1@3 ~ [e5,g5]@2 ~ g2@3 [e5,g5]@2 ~@2 e2@3 [e5,g5]@2 ~ b1@3 ~ [e5,g5]@2 ~ e1@3 [e5,g5]@2 ~@2 e2@3 [e5,g5]@2 ~ a1@3]/2", // D Em
  AV: "[~ [d5,gb5]@2 ~ d2@3 [d5,gb5]@2 ~@2 gb2@3 [d5,gb5]@2 ~ a1@3 ~ [d5,gb5]@2 ~ g1@3 [d5,e5]@2 ~@2 e1@3 [d5,g5]@2 ~ db2@3 ~ [e5,g5]@2 ~ a1@3 [e5,g5]@2 ~@2 [d5,gb5]@3 ~@10, ~@51 d2@7 ~@6]/2", // D Dsus2 G5 Em D
  AW: "[[a1,db5,a5]@3 ~@10 [d2,gb5,d6]@48 ~@3]/2", // A D
})).s("gm_flute").gain(0.25)

// chords · flute · soft notes
const flute_soft = note("<~@44 A@2 ~ B ~ C D E F G H I@2 ~@31 J K L@2 ~@14 M@7 N@2 ~@22>".pickRestart({
  A: "[~@17 [e4,a4]@38 ~@9]/2", B: "~@3 [d5,f5] ~@3 [d5,f5]", C: "~@5 [d5,e5] ~@2", D: "~ [d5,g5] ~@6",
  E: "~@5 [d5,f5] ~@2", F: "~ [f5,a5] ~@6", G: "~@29 [db5,g5]@3", H: "~@29 [a4,e5]@3",
  I: "[~@13 e5@8 d5@8 d5@12 db5@4 d5@8 ~@11]/2", J: "~@5 g5@11 ~ db5@3 db5@7 ~ db6@4",
  K: "~@3 db6@11 ~ g5@3 g5@7 ~ g5@4 ~@2", L: "[~ g5@7 ~ gb5@7 gb5@4 e5@4 d5@4 e5@3 gb5@28 ~@5]/2",
  M: "[~@29 a4@45 gb4@15 [g4,d5]@58 ~@2 [a4,d5]@30 db5@15 a4@7 ~ db5@7 [a4,d5]@14 ~, ~@29 d5@60 ~@90 g4@30 ~@15]/7", // G5 D5
  N: "[~@8 [a4,db5]@4 ~@3 [a4,d5]@28 ~@21]/2", // A D5
})).s("gm_flute").gain(0.15)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A@4 B@2 C ~@15 D E F ~@3 G@2 ~@8 H I ~@20 J ~ K L ~@2 M@2 ~ N O@3 P Q R S@2 T U V W X Y ~@4 Z AA AB AC@2 AD AE AF AG
  AH AI ~@16 AJ AK AL AM AN AO AP AQ AR AS AT ~ AU AV AW AX AY@2 AZ BA BB@2
>`.pickRestart({
  A: "[[f4,d5]@18 [f4,d5]@19 [bb4,d5]@38 ~ [db5,a5]@9 a3@24 bb3@2 ~ a3@2 ab3@2 ~ a3@3 db4@4 e4@4]/4", // Dm Bb Gbm
  B: "[bb4@3 db4]/2", C: "d4 ~@3", D: "e4@2 d4@2 d4@3 db4", E: "d4@2 d4 db4", F: "c4", G: "[[db4,g4]@5 ~@3]/2",
  H: "~@17 e4@8 d4@7", I: "~ d4@12 db4@4 d4@15", J: "g4@2 ~ a4@2 ~@2 bb4@2 ~ g4@2 ~ e4@2 ~@2 d4@2 ~ e4@2 ~@10",
  K: "~@16 g5@2 ~ e5@2 ~@2 db5@2 ~ a4@2 ~ g4@2 ~", L: "~ e4@2 ~ db5@2 ~@26",
  M: "[~@21 g4@2 ~@2 a4@2 ~ bb4@2 ~ g4@2 ~@2 e4@2 ~ d4@2 ~ e4@2 ~@21]/2",
  N: "~@5 g5@2 ~@2 e5@2 ~ db5@2 ~ a4@2 ~@2 g4@2 ~ e4@2 ~ db5@2 ~@5",
  O: "[~@23 bb4@7 g4@5 e4@2 c4@6 e4@7 bb4@2 ~ a4@7 c4@3 f4@13 ~ e4@2 ~@4 db4@2 ~@5 e4@2 ~@4]/3",
  P: "~ db4@2 ~@4 d4@2 ~@5 a3@2 ~@5 a4 ab4 ~ a4 ~ b4 db5 ~ d5 ~ e5", Q: "d5 ~@4 g4@2 ~@5 e4@2 ~@5 g4@2 ~@4 e4@2 ~@5",
  R: "f4@2 ~@5 d4@2 ~@4 f4@2 ~@5 d4@2 ~@5 g5@2 ~ e5@2",
  S: "[~ db5@2 ~@2 a4@2 ~ g4@2 ~ e4@2 ~@2 db5@2 ~ e5@2 ~ d5@7 db5@3 d5@7 ~@7 bb4@6 g4@5 e4@2 c4@6]/2",
  T: "~ e4@6 bb4@2 ~@2 a4@6 c4@3 ~ f4@11", U: "~@2 e4@2 ~@5 db4@2 ~@4 e4@2 ~@5 db4@2 ~@5 d4@2 ~",
  V: "~@3 a3@2 ~@5 a4 ~ ab4 a4 ~ b4 ~ db5 d5 ~ e5 ~ d5 ~@4 g4@2 ~@3",
  W: "~ e4@2 ~@5 g4@2 ~@5 e4@2 ~@4 f4@2 ~@5 d4@2 ~@2", X: "~@3 f4@2 ~@4 d4@2 ~@5 g5@2 ~ e5@2 ~@2 db5@2 ~ a4@2 ~ g4@2 ~",
  Y: "~ e4@2 ~ db5@2 ~ e5@2 ~@2 d5@6 db5@3 ~ d5@7 ~@4", Z: "~@5 [g4,db5]@3", AA: "~@9 [g4,a4]@7",
  AB: "~@16 [gb4,d5]@15 ~", AC: "[~@14 d4@4 ~@4 a3@4 ~@3 [a4,d5]@15 [d4,a4]@15 ~@5]/2", AD: "~@10 [bb4,d5]@15 ~@7",
  AE: "~@8 [b4,d5]@15 ~@9", AF: "~@6 [b4,d5]@15 [d5,gb5]@11", AG: "~@4 [a4,d5]@15 [b4,db5]@13",
  AH: "~@2 [g4,db5]@15 [gb4,d5]@15", AI: "~@8 [g4,db5]@4 ~@3 [gb4,d5]@15 ~@2", AJ: "~@13 bb4@7 g4@5 e4@2 c4@5",
  AK: "~ e4@7 bb4@2 ~ a4@7 c4@3 f4@11", AL: "~@3 e4@2 ~@4 db4@2 ~@5 e4@2 ~@5 db4@2 ~@4 d4@2 ~",
  AM: "~@4 a3@2 ~@5 a4 ab4 ~ a4 ~ b4 db5 ~ d5 ~ e5 d5 ~@4 g4@2 ~@3",
  AN: "~@2 e4@2 ~@5 g4@2 ~@4 e4@2 ~@5 f4@2 ~@5 d4@2 ~", AO: "~@3 f4@2 ~@5 d4@2 ~@5 e4@2 ~@4 e4@2 ~@5 e4@2",
  AP: "~@5 e4@2 ~ d4@2 ~@22", AQ: "~@3 d4@2 ~ d4@7 gb4@6 a4@7 gb5@3 a4@3", AR: "~ a4@6 a4@3 ~ gb4@10 ~@3 d4@2 ~ d4@5",
  AS: "~@2 gb4@7 a4@6 gb5@3 ~ g4@3 g4@7 g4@3", AT: "e4@5 ~@11", AU: "~@29 a4@3",
  AV: "~ a4@6 g4@7 e4@7 a3@3 ~@3 [gb4,a4]@2 ~@3", // Gbm
  AW: "~@2 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~@4 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~", // Gbm
  AX: "~@3 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~@4 [gb4,a4]@2 ~@5 [gb4,a4]@2", // Gbm
  AY: "[~@5 [gb4,a4]@2 ~@4 [g4,b4]@2 ~@5 [g4,b4]@2 ~@5 [g4,b4]@2 ~@4 [g4,b4]@2 ~@5 [g4,b4]@2 ~@5 [g4,b4]@2 ~@4 [g4,b4]@2 ~@5 [g4,b4]@2 ~@4]/2", // Gbm G
  AZ: "~ [gb4,a4]@2 ~@4 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~@5 [gb4,a4]@2 ~@4 [e4,g4]@2 ~@3", // Gbm Em
  BA: "~@2 [g4,b4]@2 ~@5 [g4,db5]@2 ~@4 [g4,db5]@2 ~@2 [gb4,a4]@3 ~@10", BB: "[[a4,e5]@3 ~@10 [a4,gb5]@48 ~@3]/2",
})).s("gm_clarinet").gain(0.25)

// other · clarinet · "B♭ Clarinet" · soft notes
const clarinet_soft = note("<~@44 A@2 ~ B ~ C D E F G H I@2 ~@49 J@5 ~ K L@2 ~@22>".pickRestart({
  A: "[~@17 [db4,g4]@40 ~@7]/2", B: "~@3 [a4,d5] ~@3 [a4,d5]", C: "~@5 d4 ~@2", D: "~ d4 ~@6", E: "~@5 [a4,d5] ~@2",
  F: "~ [a4,d5] ~@6", G: "~@29 [a4,e5]@3", H: "~@29 [g4,db5]@3", I: "[~@13 e4@8 d4@8 d4@12 db4@4 d4@8 ~@11]/2",
  J: "[~@29 a4@45 bb4@15 [b3,b4]@60 ~@11, ~@29 a3@60 ~@71]/5", K: "~@2 g4@15 [gb4,d5]@15",
  L: "[~@8 [g4,db5]@4 ~@3 [gb4,d5]@30 ~@19]/2", // Gdim D
})).s("gm_clarinet").gain(0.15)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@3 ~@2 B ~@51 C D@2 E F G H@2 I J K L@2 M N O P@2 Q R S T@2 U F V W X@5 Y Z@3 AA AB AC AD AE AF ~@13 AG AH@2 AI AJ@2
  AK AL AM AN@2 AO AP AQ AR@2 AS AT AU AV@2 AW AX AY@2
>`.pickRestart({
  A: "[[a4,d5]@18 [bb4,d5]@19 [d5,g5]@38 ~ [db5,e5]@10 ~@10]/3", B: "[db4,g4]",
  C: "~@13 d5@2 ~ [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~", // Dm
  D: "[~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5]/2", // Dm
  E: "[d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,g4]@2 ~@5 [d4,g4]@2 ~@5 [d4,g4]@2 ~@3", // G5
  F: "~ [d4,g4]@2 ~@5 [d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@2", // G5 Dm
  G: "~@3 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,g4]@2 ~", // Dm G5
  H: "[~@4 [d4,g4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~ d5@2 ~ [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5]/2", // G5 Dm
  I: "[d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@3", // Dm
  J: "~ [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,g4]@2 ~@5 [d4,g4]@2 ~@2", // Dm G5
  K: "~@3 [d4,g4]@2 ~@4 [d4,g4]@2 ~@5 [d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,g4]@2 ~", // G5
  L: "[~@4 [d4,g4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,g4]@2 ~@5 [d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,g4]@2 ~@5]/2", // G5 Dm G5
  M: "[d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [c4,g4]@2 ~@3", // Dm C5
  N: "~ [c4,g4]@2 ~@5 [c4,g4]@2 ~@5 [c4,g4]@2 ~@4 [c4,f4]@2 ~@5 [c4,f4]@2 ~@2", // C5 F5
  O: "~@3 [c4,f4]@2 ~@4 [c4,f4]@2 ~@5 [db4,e4]@2 ~@5 [db4,e4]@2 ~@4 [db4,e4]@2 ~", // F5 Dbm
  P: "[~@4 [db4,e4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,g4]@2 ~@5 [d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,g4]@2 ~@5]/2", // Dbm Dm G5
  Q: "[d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [db4,e4]@2 ~@3", // Dm Dbm
  R: "~ [db4,e4]@2 ~@5 [db4,e4]@2 ~@5 [db4,e4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@2", // Dbm Dm
  S: "~@3 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [c4,g4]@2 ~@5 [c4,g4]@2 ~@4 [c4,g4]@2 ~", // Dm C5
  T: "[~@4 [c4,g4]@2 ~@5 [c4,f4]@2 ~@4 [c4,f4]@2 ~@5 [c4,f4]@2 ~@5 [c4,f4]@2 ~@4 [db4,e4]@2 ~@5 [db4,e4]@2 ~@5 [db4,e4]@2 ~@4 [db4,e4]@2 ~@5]/2", // C5 F5 Dbm
  U: "[d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,g4]@2 ~@3", // Dm G5
  V: "~@3 [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [db4,e4]@2 ~@5 [db4,e4]@2 ~@4 [db4,e4]@2 ~", // Dm Dbm
  W: "~@4 [db4,e4]@2 ~@5 [d4,f4]@2 ~@4 [d4,f4]@2 ~@2 [d4,f4]@7 ~@4", // Dbm Dm
  X: "[~@13 [gb5,a5]@15 [a4,d5]@15 ~@15 [gb4,bb4]@15 ~@15 [e4,b4]@15 ~@15 [g4,b4]@15 [e5,g5]@11 ~ [a4,db5]@3 [a4,db5]@7 ~ [g5,db6]@4]/5", // Gbm D5 Gb E5 G Em A Gdim
  Y: "~@3 [g5,db6]@11 ~ [db5,g5]@3 [db5,g5]@7 ~ [db5,g5]@6", // Gdim Dbdim
  Z: "[~ g5@7 ~ gb5@7 [d5,gb5]@4 [db5,e5]@4 [b4,d5]@4 [db5,e5]@3 [d5,gb5]@30 [gb5,a5]@15 [a4,d5]@15 ~@5, ~ d5@15 ~@80]/3", // D Dbm Bm Dbm D Gbm D5
  AA: "~@10 [gb4,bb4]@15 ~@7", AB: "~@8 [e4,b4]@15 ~@9", AC: "~@6 [g4,b4]@15 [a4,d5]@11",
  AD: "~@4 [gb4,a4]@15 [g4,b4]@13", AE: "~@2 [a3,db4]@15 [a3,d4]@15", AF: "~@8 [a3,db4]@4 ~@3 [a3,d4]@15 ~@2",
  AG: "~@17 e4@7 ~ d4@7", AH: "[~@8 db4@7 d4@30 ~@19]/2", AI: "~@17 [c4,g4]@2 ~@4 [c4,g4]@2 ~@5 [c4,g4]@2",
  AJ: "[~@5 [c4,g4]@2 ~@4 [c4,f4]@2 ~@5 [c4,f4]@2 ~@5 [c4,f4]@2 ~@4 [c4,f4]@2 ~@5 [db4,e4]@2 ~@5 [db4,e4]@2 ~@4 [db4,e4]@2 ~@5 [db4,e4]@2 ~@4]/2", // C5 F5 Dbm
  AK: "~ [d4,f4]@2 ~@4 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~@4 [d4,g4]@2 ~@3", // Dm G5
  AL: "~@2 [d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [d4,g4]@2 ~@5 [d4,f4]@2 ~@5 [d4,f4]@2 ~", // G5 Dm
  AM: "~@3 [d4,f4]@2 ~@5 [d4,f4]@2 ~@5 [e4,g4]@2 ~@4 [db4,g4]@2 ~@5 [e4,g4]@2", // Dm Em Dbdim Em
  AN: "[~@5 [e4,g4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4]/2", // Em D
  AO: "~ [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@3", // D
  AP: "~@2 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~", // D Em7
  AQ: "~@3 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@4 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2", // Em7
  AR: "[~@5 [d4,e4,g4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,e4]@2 ~@5 [d4,e4]@2 ~@4 [d4,e4]@2 ~@5 [d4,e4]@2 ~@4]/2", // Em7 D Dsus2
  AS: "~ [db4,e4,a4]@2 ~@4 [db4,e4,a4]@2 ~@5 [db4,e4,g4,a4]@2 ~@5 [db4,e4,g4,a4]@2 ~@4 [d4,gb4]@2 ~@3", // A A7 D
  AT: "~@2 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~", // D
  AU: "~@3 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2", // D
  AV: "[~@5 [d4,gb4]@2 ~@4 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@4 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@4 [d4,e4,g4]@2 ~@5 [d4,e4,g4]@2 ~@4]/2", // D Em7
  AW: "~ [d4,gb4]@2 ~@4 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@5 [d4,gb4]@2 ~@4 [d4,e4]@2 ~@3", // D Dsus2
  AX: "~@2 [d4,e4,g4]@2 ~@5 [e4,g4]@2 ~@4 [a3,e4,g4]@2 ~@2 [d4,gb4]@3 ~@10", // Em7 Em A7 D
  AY: "[[a3,e4,db5,a5]@3 ~@10 [gb4,d5]@48 ~@3]/2", // A D
})).s("gm_string_ensemble_1").gain(0.2)

// chords · pizzicato strings
const pizzicato_strings = note(`<
  ~@6 A B C D E F G E A D H I E F G E J K L@2 M@2 N O A P Q R S@2 ~ T U@2 ~ V@2 W@2 X Y Z@2 AA AB AC AD AE@4 ~@42 AF@2
  AG AH AI AJ AK@3 AL AM AN AO AP ~@24
>`.pickRestart({
  A: "~@17 f4@15, ~ d4", B: "~ a4@15 ~@16, f4 ~", C: "~@9 a4@7, ~ a3, ~@17 d4@15", D: "~ a4@7 ~@8, d4 ~, ~ f4@15 ~@16",
  E: "~@17 g4@15, ~ e4", F: "~ bb4@15 ~@16, e4 ~", G: "~@17 e4@15, ~ db4", H: "~@17 d4@15, ~ a3",
  I: "~ f4@15 ~@16, d4 ~", J: "~ f4@15 ~ db4@15, d4 a3", K: "~ d4@15 ~@16, a3 ~", L: "~@17 g4@15, ~ c4",
  M: "~@17 f4@15, ~ c4", N: "~@17 g4@15, ~ a3", O: "~@17 g4@15, ~ db4", P: "~ a4@15 ~@16, d4 ~", Q: "~@17 g4@15, ~ d4",
  R: "~ bb4@21 ~@10, d4@11 ~@5", S: "[~@26 f4@15 ~@3 a4@14 ~@6, ~@25 d4@16 d4@16 ~@7, ~@42 f4@15 ~@7]/2",
  T: "~@2 g4@15 ~@15, ~ e4@16 ~@15", U: "~@2 g4@15 ~ f4@14, ~ db4@16 d4@15", V: "~@2 g4@15 ~@15, ~ c4@16 ~@15",
  W: "~@2 f4@15 ~@15, ~ c4@16 ~@15", X: "~@2 g4@15 ~@15, ~ a3@16 ~@15", Y: "~@4 g4@25 ~@3, ~@3 db4@26 ~@3",
  Z: "[~@13 f4@15 ~ a4@15 ~@20, ~@3 d4@4 d4@4 ~@5]/2", AA: "~@21 g4@11, ~@5 d4@3", AB: "~@5 bb4@15 ~@12, ~ d4@4 ~@3",
  AC: "~@21 f4@11, ~@5 d4@3", AD: "~@3 a4@7 ~@6, ~ d4@4 ~@3, ~@5 f4@15 ~@12",
  AE: "[~@30 g4@15 ~@17 g4@15 ~ f4@15 ~ g4@15 ~ f4@15 ~@3, ~@29 e4@16 ~@16 db4@16 d4@16 db4@16 d4@16 ~@3]/4",
  AF: "[~@13 [gb4,d5]@7 ~@8 [gb4,a4]@7 ~@8 [d4,b4]@7 ~ a4@7 g4@6]/2", AG: "~@2 gb4@7 gb4@7 ~ e4@7 e4@7 ~",
  AH: "g4@7 ~@2 b4@5 ~@18, ~@7 g3@7 ~@18, ~@4 e4@3 ~@9", AI: "~@5 [g4,b4]@7 ~@8 [g4,a4]@7 ~@5",
  AJ: "~@3 [g4,db5]@7 ~ b4@7 [e4,a4]@7 ~ g4@6", // Gdim A5
  AK: "[~ g4@7 ~ gb4@7 gb4@7 ~ f4@7 gb4@7 ~@8 [e4,g4,a4]@7 ~@8 [gb4,d5]@7 ~@8 [gb4,a4]@7 ~@8 [gb4,b4]@5]/3", // A7 D Gbm B5
  AL: "~@3 a4@7 g4@7 ~ gb4@7 gb4@7", AM: "~ e4@7 e4@7 ~ g4@7 [g3,e4,b4]@7 ~@2", AN: "~@6 [e4,b4]@7 ~@8 [gb4,d5]@7 ~@4",
  AO: "~@4 [gb4,a4]@7 ~@8 [g4,b4]@7 ~ a4@5", AP: "~@2 [g4,a4]@7 ~ db4@7 ~@15",
})).s("gm_pizzicato_strings").gain(0.2)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  A@3 ~@2 B ~@51 C D@2 E F G H@2 I J K L@2 M N O P@2 I Q R S@2 T U V W X@5 Y Z AA@2 AB AC AD AE AF AG ~@13 AH AI@2 AJ
  AK@2 AL AM AN AO@2 AP AQ AR AS@2 AP AT AU AV@2 AW AX AY@2
>`.pickRestart({
  A: "[f4@18 f4@19 e4@38 ~ e4@10 ~@10]/3", B: "e4", C: "~@16 a3@2 ~@5 a3@2 ~@4 a3@2 ~",
  D: "[~@4 a3@2 ~@5 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 a3@2 ~@4 a3@2 ~@5]/2",
  E: "[bb3,e4]@3 ~@4 [bb3,e4]@3 ~@3 [bb3,e4]@3 ~@4 [bb3,e4]@3 ~@4 [bb3,e4]@3 ~@2", // Bbdim
  F: "~ [bb3,e4]@3 ~@4 [bb3,e4]@3 ~@4 [bb3,e4]@3 ~@3 a3@2 ~@5 a3@2 ~@2", // Bbdim
  G: "~@3 a3@2 ~@4 a3@2 ~@5 [bb3,e4]@2 ~@5 [bb3,e4]@2 ~@4 [bb3,e4]@2 ~", // Bbdim
  H: "[~@4 [bb3,e4]@2 ~@5 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 a3@2 ~@4 a3@2 ~@5]/2", // Bbdim
  I: "a3@2 ~@5 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 a3@2 ~@3", J: "~ a3@2 ~@5 a3@2 ~@5 a3@2 ~@4 [bb3,e4]@3 ~@4 [bb3,e4]@3 ~",
  K: "~@3 [bb3,e4]@3 ~@3 [bb3,e4]@3 ~@4 [bb3,e4]@3 ~@4 [bb3,e4]@3 ~@3 [bb3,e4]@3", // Bbdim
  L: "[~@4 [bb3,e4]@3 ~@4 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 a3@2 ~@4 [bb3,e4]@2 ~@5 [bb3,e4]@2 ~@5 [bb3,e4]@2 ~@4 [bb3,e4]@2 ~@5]/2", // Bbdim
  M: "a3@2 ~@5 a3@2 ~@4 a3@2 ~@5 a3@2 ~@5 [c4,e4]@2 ~@3", // C
  N: "~ [c4,e4]@2 ~@5 [c4,e4]@2 ~@5 [c4,e4]@2 ~@4 [a3,c4]@2 ~@5 [a3,c4]@2 ~@2", // C Am
// … 99 more lines