Strudelify

Concerto in G minor BWV 1056R

J. S. Bach

KeyA♭ majorTempo60 bpm
0:00/0:00
// Concerto in G minor BWV 1056R — J.S. Bach
// 60 bpm, 3/8, key Ab 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/8 at bar 1, 4/4 at bar 155, 3/8 at bar 251) are rendered on a constant 3/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/53191; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 391 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/1.5)

// 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 · pizzicato strings
const pizzicato_strings = note(`<
  ~@155 A B C@2 ~ D@2 E@2 F@2 G@2 ~ H@2 I J K@2 ~ L@2 M@2 N@2 O@2 ~ P@2 A Q R@2 ~ S@2 T@2 U@2 V@2 ~ H@2 W B K@2 ~ X@2
  Y@2 Z@2 AA@2 ~ AB@2 AC B AD@2 ~ AE@2 Y@2 AF@2 AG@2 ~ AH@2 AI AJ AK@2 ~ AL@2 AM@2 AN@3 ~@144
>`.pickRestart({
  A: "~ c5", B: "~ eb5@14 ~@9", C: "[~@9 bb4@7 eb5@7 ~]/2", D: "[~ ab4@14 db5@14 ~@19]/2", E: "[~@4 db5@7 bb5@7 ~@6]/2",
  F: "[~@15 eb5@14 ab5@14 ~@5]/2", G: "[~@11 ab5@7 c6@6]/2", H: "[~@5 f5@13 bb5@14 ~@16]/2", I: "~ g5",
  J: "~ bb5@14 ~@9", K: "[~@9 eb5@7 ab5@7 ~]/2", L: "[~ f5@14 ab5@14 ~@19]/2", M: "[~@4 ab5@7 g5@7 ~@6]/2",
  N: "[~@15 f5@14 ab5@14 ~@5]/2", O: "[~@11 g5@7 bb5@6]/2", P: "[~@5 eb5@13 a4@14 ~@16]/2", Q: "~ f4@14 ~@9",
  R: "[~@9 eb4@7 a4@7 ~]/2", S: "[~ bb4@14 db5@14 ~@19]/2", T: "[~@4 db5@7 f5@7 ~@6]/2", U: "[~@15 eb5@14 a5@14 ~@5]/2",
  V: "[~@11 bb5@7 a5@6]/2", W: "~ bb4", X: "[~ ab5@14 c6@14 ~@19]/2", Y: "[~@4 ab4@7 db5@7 ~@6]/2",
  Z: "[~@15 db6@14 g5@14 ~@5]/2", AA: "[~@11 bb5@7 db5@6]/2", AB: "[~@5 eb5@13 ab5@14 ~@16]/2", AC: "~ d5",
  AD: "[~@9 c5@7 eb5@7 ~]/2", AE: "[~ bb4@14 eb5@14 ~@19]/2", AF: "[~@15 db5@14 bb5@14 ~@5]/2",
  AG: "[~@11 eb5@7 c6@6]/2", AH: "[~@5 bb5@13 f5@14 ~@16]/2", AI: "~ f5", AJ: "~ bb4@14 ~@9",
  AK: "[~@9 b4@7 bb4@7 ~]/2", AL: "[~ c5@14 ab5@14 ~@19]/2", AM: "[~@4 g5@7 c5@7 ~@6]/2",
  AN: "[~@15 ab4@14 f4@13 f5@27 ~@3]/3",
})).s("gm_pizzicato_strings").gain(0.18).pan(1)

// other · pizzicato strings · soft notes
const pizzicato_strings_soft = note("<~@32 [~ c5 a4] [f4 ~@2] ~ [bb4 g4 eb4] ~@355>")
  .s("gm_pizzicato_strings").gain(0.09).pan(1)

// other · violin
const violin = note(`<
  A B C D E F G H I J K L M@2 N O A B P Q R S T U V W ~@18 X@4 Y@5 Z AA@2 ~@4 AB@8 AC@6 AD@3 ~ AE@3 AF@2 AG@2 AH@3 ~
  AI@2 ~ AJ@4 AK@4 AL@4 AM@2 AN@8 ~@30 AO@4 AP@6 AQ ~@91 AR@2 AS@6 AT@3 AU@2 AV@4 AW AX AY AZ@2 BA ~ BB@4 BC BD ~@4 BE@4
  BF@3 BG BH ~ BI@2 AU@2 BJ@2 ~@10 BK@2 BL BM@4 BN BO@2 ~@2 BP BQ@2 BR@2 BS ~ BT@4 BU BV ~@5 BW@2 BX ~ BY@2 ~ BZ CA@4 CB
  CC@4 CD CE@3 ~@2 CF@3 CG CH CI@6 CJ@4 CK@4 CL CM@4 CN CO@5 AX CP
>`.pickRestart({
  A: "c4@2 ab4 g4 f4@2", B: "~@2 bb3@2 ab4 g4", C: "f4 ~ c4", D: "ab4 g4 f4@2 ~@2", E: "f4 db4 ~", F: "~@2 f4@2 db5 c5",
  G: "bb4 ~ f4", H: "db5 c5 bb4@2 ~@2", I: "f4@2 db5 c5 bb4@2", J: "~@8 [bb4,c5]!4 a4@4 bb4@8", K: "~@4 bb4 ab4",
  L: "g4 f4 g4@2 g4@2", M: "[f4@2 c4@2 f4@5 eb4 d4 eb4]/2",
  N: "f4@8 d4@8 [d4,eb4] d4 ~ d4 [d4,eb4] d4 c4 d4, ~@9 eb4 ~ eb4", O: "c4 ~@2", P: "f4@2 ~@2 bb4 ~", Q: "~@2 bb4 ~@3",
  R: "bb4 ~@3 bb4 ~", S: "~@2 f4 ~ e4 ~", T: "f4 ~ bb3 ~ g3@2", U: "e4 f4 g4@2 e4@2", V: "f4 ~ f4 ~ f4 ~",
  W: "c4 ~ c4@4", X: "[~@9 bb4@2 ab4@4 eb4@4 eb4@4 c5@2 bb4@2 ab4@4 ~@4 eb4@4 c5@2 bb4@2 ab4@4 ~]/4",
  Y: "[~@3 f4@4 c5@2 bb4@2 ab4@4 ~@4 eb4@2 db4@2 eb4@4 ~@8 eb4@4 ~@8 eb4@4 c4@4 ~@5]/5", Z: "~@3 bb3@4 f4@4 ~",
  AA: "[~@7 a4@4 bb4@4 f4@2 eb4@2 f4@4 ~]/2", AB: "[~@7 a4@2 bb4@2 c5@4 f4@4 f4@32 a4@16 f4@16 c4@13]/8",
  AC: "[~@3 f4@52 db5@2 c5@2 bb4@4 f4@4 f4@4 ~]/6", AD: "[~@11 f4@4 db5@2 c5@2 bb4@4 f4@4 eb4@4 ~@5]/3",
  AE: "[~@11 bb3@2 ~@2 c4@2 ~@2 db4@2 ~@2 eb4@2 ~@2 f4@2 ~@7]/3", AF: "[~@11 eb4@4 eb4@8 ~]/2",
  AG: "[~@3 c4@4 c4@4 a4@4 ~@9]/2", AH: "[~@7 db5@4 eb5@4 f5@4 ~@4 f4@4 ~@4 a4@4 ~]/3", AI: "[~@7 db5@4 c5@4 ~@9]/2",
  AJ: "[~@11 bb3@4 db4@4 f4@4 db5@2 c5@2 bb4@4 ~@4 eb4@4 db5@2 c5@2 bb4@4 ~]/4",
  AK: "[~@3 f4@4 db5@2 c5@2 bb4@4 ~@4 bb4@4 gb4@4 ~@8 eb4@4 c5@2 bb4@2 ab4@4 ~]/4",
  AL: "[~@3 db4@4 c5@2 bb4@2 ab4@4 ~@4 eb4@4 c5@2 bb4@2 ab4@4 ~@4 ab4@4 f4@4 ~@5]/4",
  AM: "[~@3 f4@2 ~@6 gb4@2 ~@6 ab4@2 ~@3]/2",
  AN: "[~@6 bb4@4 ~@12 ab4@32 a4@16 bb4@20 ab4@4 g4@4 f4@4 g4@8 g4@8 f4@8 c4@8 f4@20 eb4@4 d4@4 eb4@4 f4@8 d4@8 [d4,eb4] d4 ~ d4 [d4,eb4] d4 c4 d4 ~@2, ~@92 eb4 ~ eb4 ~]/8", // Ebmaj7
  AO: "[~@3 c4@4 ab4@2 g4@2 f4@4 ~@4 bb3@4 ab4@2 g4@2 f4@4 ~@4 bb4@2 ~@6 bb4@2 ~@3]/4",
  AP: "[~@6 bb4@4 ~@12 bb4@4 ~@12 f4@4 ~@4 e4@4 ~@4 f4@4 ~@4 bb3@4 ~@4 g3@8 e4@4 f4@4 g4@8 e4@8 f4@4 ~@4 f4@4 ~@4 e4@4 ~@4 c5@10 bb4@3 ab4@3 ab4@2]/6",
  AQ: "bb4@3 c5@3 f4@16 ~@2", AR: "[~@8 ab4@14 bb4@7 ab4@7 ab4@6 g4@6]/2",
  AS: "[~ g4@7 f4@7 g4@55 c4@5 f4@5 ab4@5 f4@5 f4@5 bb4@10 ab4@5 g4@5 g4 f4@9 e4@5 c4@5 f4@5 g4@4]/6",
  AT: "[~ f4@5 f4@5 c5@5 c5@5 e4@5 ~@20 f4@5 c5@2 bb4@2 ~ ab4@2 g4@2 ~ f4@11]/3",
  AU: "[~@4 eb4@5 bb4@2 ab4@2 ~ g4@2 f4@2 ~ eb4@15 f4@5 bb4@5 f4@4]/2",
  AV: "[~ eb4@5 bb3@5 g4@5 g4@5 ab4@5 ~@20 bb3@5 db4@5 eb4@5 f4@7 eb4@2 ~ db4@2 c4@2 ~ bb3@5 f4@5 db4@5 c4@2 d4@2 ~]/4",
  AW: "e4@2 f4@2 ~ g4@7 ab4@2 ~ bb4@5 c4@4", AX: "~ c5@2 ~@3 bb4@2 ~@3 c5@2 ~@3 f4@2 ~@3 g4@2 ~",
  AY: "~@2 e4@2 ~@3 f4@10 ~@5 f4@2",
  AZ: "[~@3 ab4@2 ~@3 c5@2 ~@3 ab4@2 ~@3 c5@2 ~@3 f5@2 ~@3 c5@2 ~@3 f4@2 ~@3 g4@2 ~@3 ab4@2 ~@3]/2",
  BA: "c5@2 ~@3 g4@2 ~@3 f4@2 ~@12", BB: "[~@22 c4@5 f4@5 g4@5 f4@5 c4@5 g4@10 ab4@5 g4@5 f4@10 e4@5 ~@14]/4",
  BC: "~@6 g4@2 ~@3 eb4@2 ~@11", BD: "~@12 f4@2 ~@3 db4@2 ~@5",
  BE: "[~@22 eb4@5 ab4@5 bb4@5 ab4@5 ab4@5 db5@10 c5@5 bb4@5 ab4@10 g4@5 eb4@5 ab4@5 bb4@4]/4",
  BF: "[~ ab4@5 ab4@5 eb5@5 eb5@5 g4@5 ~@20 c5@5 g4@5 ~@16]/3", BG: "~@4 f5@5 c5@5 ~@10", BH: "~@10 bb4@5 f4@5 ~@4",
  BI: "[~@22 f4@5 c5@2 bb4@2 ~ ab4@2 g4@2 ~ f4@11]/2", BJ: "[~ eb4@5 bb3@5 g4@10 ab4@5 ~@22]/2",
  BK: "[~@13 f4@2 eb4@2 ~ d4@2 c4@2 ~ b3@2 a3@2 ~ g3@5 ~@15]/2", BL: "~@10 g3@5 c4@5 eb4@4",
  BM: "[~ c4@5 c4@5 f4@10 eb4@5 d4@5 db4 c4@9 b3@5 g3@5 c4@5 d4@5 c4@5 c4@5 g4@5 b4@5 d4@5 ~@10]/4",
  BN: "~@10 c5@5 eb4@5 ~@4", BO: "[~@16 b4@5 d4@5 ~@22]/2", BP: "~@10 d4@5 d4@5 d4@4",
  BQ: "[~ c4@2 d4@2 ~ eb4@2 f4@2 ~ g4@2 ab4@2 ~ g3@5 d4@5 b3@5 g3@15 c4@2]/2",
  BR: "[~@3 eb4@2 ~@3 g4@2 ~@3 eb4@2 ~@3 g4@2 ~@3 c5@2 ~@3 g4@2 ~@3 c4@2 ~@3 d4@2 ~@3 eb4@2 ~@3]/2",
  BS: "g4@2 ~@3 d4@2 ~@3 c4@5 ~@9", BT: "[~@22 g3@5 c4@5 d4@5 c4@5 g3@5 d4@10 eb4@5 d4@5 db4 c4@9 b3@5 ~@14]/4",
  BU: "~@6 d5@5 bb4@5 db5@5 ~@3", BV: "~@7 c5@5 ab4@5 ~@7",
  BW: "[~@13 eb4@2 f4@2 ~ g4@2 ab4@2 ~ bb4@2 ab4@2 ~ g4@5 eb4@5 bb3@5 ab3@5]/2", BX: "eb4@5 ~@19",
  BY: "[~@7 db4@2 eb4@2 ~ f4@2 gb4@2 ~ ab4@2 gb4@2 ~ f4@5 g3@5 g4@5 f4@5 f4@5 ~]/2", BZ: "~@10 f4@5 bb4@5 c5@4",
  CA: "[~ bb4@5 bb4@5 eb5@10 db5@5 c5@5 db5 bb4@9 a4@5 f4@5 bb4@5 c5@5 bb4@5 bb4@5 f5@5 f5@5 a4@5 ~@10]/4",
  CB: "~@10 bb4@5 f4@2 eb4@2 ~ db4@2 c4@2",
  CC: "[~ bb3@5 ab4@5 gb4@10 eb4@2 db4@2 ~ c4@2 bb3@2 ~ ab3@5 gb4@5 f4@5 eb4@5 db4@5 gb4@5 ab4@5 ab3@5 c4@10 db4@5 ~@5 ab3@5]/4",
  CD: "ab3@5 ~@19", CE: "[~ d4@5 f4@5 bb4@5 f4@5 bb4@5 d5@5 eb4@5 eb5@5 bb4@5 bb4@5 ~@21]/3",
  CF: "[~ e4@5 g4@5 c5@5 g4@5 c5@5 e5@5 f4@5 f5@5 c5@5 c5@5 ~@10 bb4@5 ~@6]/3", CG: "~@4 bb4@5 ~@10 ab4@5",
  CH: "~@10 ab4@5 ~@9",
  CI: "[~ g4@2 ab4@2 ~ g4@2 f4@2 ~ e4@2 d4@2 ~ c4@15 e4@15 f4@30 g4@45 bb4@5 ~@5 g5@5 ab4@5 ~@3]/6",
  CJ: "[~@2 f5@5 g4@5 ~@5 eb5@5 f4@5 ~@5 db5@5 e4@45 c4@5 f4@5 ab4@4]/4",
  CK: "[~ f4@5 f4@5 bb4@10 ab4@5 g4@5 g4 f4@9 e4@5 c4@5 f4@5 g4@5 f4@5 f4@5 c5@5 e5@5 g4@5 ~@10]/4",
  CL: "~@10 f5@5 ab4@5 ~@4", CM: "[~@16 e5@5 g4@5 ~@20 f5@5 c5@5 ab4@5 f4@5 eb5@5 db5@10 bb4@5 g4@5 eb4@5]/4",
  CN: "db5@5 c5@5 bb4@5 ab4@5 db5@4",
  CO: "[~ c5@2 db5@2 ~ eb5@5 eb4@10 ab4@5 ~@20 bb3@5 db4@5 eb4@5 f4@20 db4@5 bb3@5 g4@17 ab4@2 ~ bb4@5 c4@4]/5",
  CP: "~@2 e4@2 ~@3 c4@15 ~@2",
})).s("gm_violin").gain(0.17).pan(1)

// other · violin · soft notes
const violin_soft = note(`<
  ~@27 A B C D A ~ E F ~ G ~@4 E F ~ H ~@68 I@2 J@4 ~@2 K@7 L@7 ~@2 M@3 N@3 ~@112 O ~@4 P ~@24 Q R S T U ~@5 P V@2 W ~@2
  X@2 Y Z AA@2 ~@40 S T ~@36 P ~@5
>`.pickRestart({
  A: "c5 bb4 c5@2 ~@2", B: "~@2 bb4 ab4 bb4@2", C: "~@4 e5 d5", D: "e5 ~@2", E: "~@4 bb4 ab4", F: "bb4 ~@2",
  G: "~@2 ab4 g4 ab4@2", H: "~@7 ab4@2 ~@3", I: "[~@11 c4@4 ~@9]/2",
  J: "[~@3 ab4@2 bb4@2 c5@4 ab4@4 ~@4 ab4@2 bb4@2 c5@4 f5@4 ~@4 ab4@2 bb4@2 c5@4 f5@4 ~]/4",
  K: "[~@7 f4@24 db5@16 c5@16 g4@4 f4@4 g4@13]/7", L: "[~@3 ab4@16 g4@16 ab4@32 g4@16 ~]/7",
  M: "[~@7 e4@4 db5@2 c5@2 bb4@4 ~@4 g4@4 c5@4 ~@5]/3", N: "[~@3 c4@4 ab4@2 g4@2 f4@4 ~@4 f4@4 bb3@4 ~@9]/3",
  O: "~@7 e4@5 g3@5 ~@7", P: "~@7 bb3@5 ab3@5 ~@7", Q: "~@7 g4@5 bb3@5 ~@7", R: "~@13 c4@5 g3@5 ~", S: "~@19 f4@5",
  T: "c4@5 ~@19", U: "~ bb3@5 f4@5 ~@13", V: "[~@13 a3@2 ~@3 c4@2 ~@3 f4@2 ~@3 c4@2 ~@3 f4@2 ~@3 a4@2 ~@3 bb3@2 ~@3]/2",
  W: "bb4@2 ~@3 f4@2 ~@3 f4@2 ~@12", X: "[~@13 bb3@2 ~@3 d4@2 ~@3 g4@2 ~@3 d4@2 ~@3 g4@2 ~@3 b4@2 ~@3 c4@2 ~@3]/2",
  Y: "c5@2 ~@3 g4@2 ~@3 g4@5 ~@9", Z: "~ f4@5 ~@10 f4@5 ~@3", AA: "[~@7 eb4@5 ~@10 eb4@5 ~@21]/2",
})).s("gm_violin").gain(0.09).pan(1)

// other · pizzicato strings
const pizzicato_strings_2 = note(`<
  ~@155 A B C@2 ~ D@2 E@2 F@2 G@2 ~ H@2 I J K@2 ~ L@2 M@2 N@2 O@2 ~ P@2 Q B R@2 ~ S@2 T@2 U@2 V@2 ~ W@2 I J K@2 ~ X@2
  Y@2 Z@2 AA@2 ~ AB@2 A AC AD@2 ~ AE@2 AF@2 AG@2 AH@2 ~ AI@2 AJ AC AK@2 ~ AL@2 AM@2 AN@3 ~@144
>`.pickRestart({
  A: "~ ab4", B: "~ c5@14 ~@9", C: "[~@9 g4@7 bb4@7 ~]/2", D: "[~ f4@14 ab4@14 ~@19]/2", E: "[~@4 bb4@7 g5@7 ~@6]/2",
  F: "[~@15 c5@14 eb5@14 ~@5]/2", G: "[~@11 f5@7 ab5@6]/2", H: "[~@5 d5@13 f5@14 ~@16]/2", I: "~ eb5", J: "~ g5@14 ~@9",
  K: "[~@9 c5@7 eb5@7 ~]/2", L: "[~ d5@14 f5@14 ~@19]/2", M: "[~@4 f5@7 bb4@7 ~@6]/2", N: "[~@15 c5@14 bb4@14 ~@5]/2",
  O: "[~@11 bb4@7 eb5@6]/2", P: "[~@5 gb5@13 c5@14 ~@16]/2", Q: "~ a4", R: "[~@9 c5@7 f4@7 ~]/2",
  S: "[~ f4@14 bb4@14 ~@19]/2", T: "[~@4 bb4@7 db5@7 ~@6]/2", U: "[~@15 eb5@14 c5@14 ~@5]/2", V: "[~@11 gb5@7 f5@6]/2",
  W: "[~@5 db5@13 f5@14 ~@16]/2", X: "[~ db5@14 eb5@14 ~@19]/2", Y: "[~@4 f5@7 ab5@7 ~@6]/2",
  Z: "[~@15 bb5@14 db5@14 ~@5]/2", AA: "[~@11 db5@7 bb4@6]/2", AB: "[~@5 c5@13 c5@14 ~@16]/2", AC: "~ g4@14 ~@9",
  AD: "[~@9 ab4@7 c5@7 ~]/2", AE: "[~ g4@14 bb4@14 ~@19]/2", AF: "[~@4 f4@7 ab4@7 ~@6]/2",
  AG: "[~@15 bb4@14 g5@14 ~@5]/2", AH: "[~@11 c5@7 ab5@6]/2", AI: "[~@5 bb4@13 b4@14 ~@16]/2", AJ: "~ bb4",
  AK: "[~@9 ab4@7 eb4@7 ~]/2", AL: "[~ ab4@14 db5@14 ~@19]/2", AM: "[~@4 g4@7 eb4@7 ~@6]/2",
  AN: "[~@15 f4@14 f5@13 bb4@14 ~@16]/3",
})).s("gm_pizzicato_strings").gain(0.17).pan(1)

// other · pizzicato strings · soft notes
const pizzicato_strings_soft_2 = note("<~@32 [~ c5 a4] [f4 ~@2] ~ [bb4 g4 eb4] ~@355>")
  .s("gm_pizzicato_strings").gain(0.09).pan(1)

// other · viola
const viola = note(`<
  A B C D E F G H I J K L M N O P Q B R S T U V W X Y ~@18 Z@4 AA@5 AB AC@2 ~@4 AD@8 AE@6 AF@3 ~ AG@3 AH@2 AI@2 AJ@3 ~
  AK@2 ~@2 AL@3 AM@4 AN@4 AO@2 AP@2 AQ@6 ~@30 AR@4 AS@6 AT ~@91 AU@8 AV@4 AW AX@4 AY AZ BA BB@2 BC ~ BD@3 BE BF BG ~@4
  BH@3 BI BJ@3 BK BL ~ BM@3 BN@3 ~@52 BO BP@4 BQ BR@3 ~@2 BS@3 BT BU BV BW@8 BX BY BZ@3 CA CB@5 CC@4 CD AZ CE
>`.pickRestart({
  A: "ab3@2 c4 bb3 c4@2", B: "~@2 f3@2 f4 e4", C: "f4 ~ f3", D: "c4 bb3 c4@2 ~@2", E: "bb3 f3 ~", F: "~@2 db4@2 f4 eb4",
  G: "f4 ~ bb3", H: "f4 eb4 f4@2 ~@2", I: "db4@2 g3 ab3 bb3@2", J: "~@8 [g4,ab4]!4 f4@4 g4@8", K: "~@2 e4",
  L: "g4 c5 e4", M: "c4@2 f4 g4 ab4@2", N: "c4@2 d4 c4 b3 a3", O: "g3!3", P: "g3 ~@2", Q: "f3@2 c4 bb3 c4@2",
  R: "f4@2 ~@2 f4 ~", S: "~@2 c4 ~@3", T: "f4 ~@3 c4 ~", U: "~@2 c4 ~ c4 ~", V: "c4 ~ f4 ~ c4@2", W: "g3 c4!2",
  X: "c4 ~ c4 ~ c4 ~", Y: "bb3 ~ ab3@4", Z: "[~@9 db4@2 eb4@4 c4@4 c4@4 f4@2 eb4@2 f4@4 ~@4 c4@4 f4@2 eb4@2 f4@4 ~]/4",
  AA: "[~@3 c4@4 f4@2 g4@2 ab4@4 ~@4 ab3@2 bb3@2 c4@4 ~@8 ab3@4 ~@8 bb3@4 f4@4 ~@5]/5", AB: "~@3 db4@4 c4@4 ~",
  AC: "[~@7 f4@4 f4@4 bb3@2 c4@2 db4@4 ~]/2", AD: "[~@7 f4@2 g4@2 a4@4 a3@4 c4@16 db4@16 eb4@16 db4@16 gb4@13]/8",
  AE: "[~@3 db4@16 eb4@16 c4@16 bb3@4 f4@2 eb4@2 f4@4 bb4@4 db4@4 ~]/6",
  AF: "[~@11 bb3@4 f4@2 eb4@2 f4@4 bb3@4 bb4@4 ~@5]/3", AG: "[~@11 bb3@2 ~@2 c4@2 ~@2 db4@2 ~@2 eb4@2 ~@2 f4@2 ~@7]/3",
  AH: "[~@11 c4@4 c4@8 ~]/2", AI: "[~@3 f3@4 f3@8 ~@9]/2", AJ: "[~@7 bb4@4 bb3@4 c4@4 ~@4 c4@4 ~@4 c4@4 ~]/3",
  AK: "[~@7 g4@4 c4@4 ~@9]/2", AL: "[~@3 bb3@4 db4@4 f4@2 eb4@2 f4@4 ~@4 bb3@4 bb4@2 a4@2 bb4@4 ~]/3",
  AM: "[~@3 bb3@4 f4@2 eb4@2 f4@4 ~@4 eb4@4 bb3@4 ~@8 c4@4 eb4@2 db4@2 eb4@4 ~]/4",
  AN: "[~@3 ab3@4 g4@2 f4@2 g4@4 ~@4 ab3@4 eb4@2 db4@2 eb4@4 ~@4 db4@4 ab3@4 ~@5]/4",
  AO: "[~@3 db4@2 ~@6 bb3@2 ~@6 ab3@2 ~@3]/2", AP: "[~@3 db4@2 ~@6 eb4@2 ~@6 f4@2 ~@3]/2",
  AQ: "[~@3 gb4@2 ~@6 f4@2 ~@6 e4@4 a4@4 c5@4 e4@4 c4@4 eb4@2 f4@2 g4@4 c4@4 d4@2 c4@2 b3@2 a3@2 g3@4 g3@4 g3@4 ~]/6",
  AR: "[~@3 f3@4 c4@2 bb3@2 c4@4 ~@4 f3@4 f4@2 e4@2 f4@4 ~@4 f4@2 ~@6 c4@2 ~@3]/4",
  AS: "[~@6 f4@4 ~@12 c4@4 ~@12 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 f3@4 ~@4 c4@8 g3@8 c4@8 c4@8 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 bb3@8 ab3@2 c4@3 bb3@3 ab3@2]/6",
  AT: "bb3@3 c4@3 f3@16 ~@2",
  AU: "[~@8 c4@110 ab3@5 c4@5 f4@5 c4@5 c4@5 c4@5 c4@10 c4@5 db4 c4@9 c4@5 c4@5 c4@5 c4@4]/8",
  AV: "[~ c4@5 c4@5 ab4@5 e4@5 g4@5 ~@20 c4@5 ab4@2 g4@2 ~ f4@2 eb4@2 ~ db4@2 c4@2 ~ db4@2 eb4@2 ~ f4@2 db4@2 ~ bb3@5 g4@2 f4@2 ~ eb4@2 db4@2 ~ c4@2 bb3@2 ~]/4",
  AW: "c4@2 db4@2 ~ eb4@2 c4@2 ~ db4@5 f4@5 bb3@4",
  AX: "[~ bb3@5 eb4@5 eb4@5 eb4@5 eb4@5 ~@20 f3@5 bb3@5 c4@5 db4@7 eb4@2 ~ f4@7 eb4@2 ~ db4@2 c4@2 ~ bb3@2 ab3@2 ~ g3@2 ab3@2 ~]/4",
  AY: "bb3@2 ab3@2 ~ g3@2 f3@2 ~ e3@5 ~@5 bb4@4", AZ: "~ ab4@2 ~@3 g4@2 ~@3 f4@5 ~@5 db4@2 ~",
  BA: "~@2 c4@2 ~@3 ab3@10 ~@7", BB: "[~@13 f3@2 ~@3 ab3@2 ~@3 c4@2 ~@3 ab3@2 ~@3 c4@2 ~@3 c4@2 ~@3 c4@2 ~@3]/2",
  BC: "f4@2 ~@3 bb3@2 ~@3 ab3@2 ~@12", BD: "[~@22 ab3@5 c4@5 g3@5 ab3@5 f3@5 c3@5 c4@5 f3@5 g3@5 ab3@2 bb3@2 ~]/3",
  BE: "c4@5 ~@19", BF: "~@6 eb4@2 ~@3 bb3@2 ~@11", BG: "~@12 db4@2 ~@3 ab3@2 ~@5",
  BH: "[~@22 c4@5 eb4@5 eb4@5 eb4@5 eb4@5 eb4@5 eb4@10 eb4@5 eb4@5]/3", BI: "eb4@5 eb4@5 eb4@5 eb4@5 eb4@4",
  BJ: "[~ eb4@5 ab4@5 c5@5 g4@5 bb4@5 ~@20 g3@5 g4@5 ~@16]/3", BK: "~@4 f3@5 f4@5 ~@10", BL: "~@10 db4@5 f4@5 ~@4",
  BM: "[~@22 c4@5 ab4@2 g4@2 ~ f4@2 eb4@2 ~ db4@2 c4@2 ~ db4@2 eb4@2 ~ f4@2 db4@2 ~ bb3@5 g4@2 f4@2 ~ eb4@2 db4@2 ~ c4@2 bb3@2 ~]/3",
  BN: "[c4@2 db4@2 ~ eb4@2 c4@2 ~ db4@5 f4@5 bb3@10 eb4@5 eb4@5 eb4@5 eb4@5 ~@22]/3", BO: "~@10 f3@5 bb3@5 db4@4",
  BP: "[~ eb4@10 eb4@5 eb3@5 ab3@5 c4@5 db4@10 ab3@5 bb3@5 ab3@5 gb3@5 f3@5 gb3@5 ab3@10 ab3@5 ~@5 gb3@5]/4",
  BQ: "f3@5 ~@19", BR: "[~@16 d4@5 f4@5 c5@5 bb4@5 eb4@5 f4@5 eb4@5 ~@21]/3",
  BS: "[~@16 e4@5 g4@5 db5@5 c5@5 f4@5 g4@5 f4@5 ~@10 f4@5 ~@6]/3", BT: "~@4 eb4@5 ~@10 eb4@5", BU: "~@10 db4@5 ~@9",
  BV: "~ db4@5 ~@10 g3@8", BW: "[~@7 c4@185]/8", BX: "~@10 ab3@5 c4@5 f4@4", BY: "~ c4@5 c4@5 c4@5 c4@8",
  BZ: "[~@2 c4@5 db4 c4@9 c4@5 c4@5 c4@5 c4@5 c4@5 f4@5 ab4@5 g4@5 e4@5 ~@10]/3", CA: "~@10 c5@5 f4@5 ~@4",
  CB: "[~@16 g4@5 e4@5 ~@20 c4@5 f4@5 ab4@5 bb4@10 bb4@5 bb3@5 eb4@5 g4@5 ab4@10 eb4@5 f4@5 eb4@5 db4@4]/5",
  CC: "[~ eb4@5 bb3@5 bb4@10 eb4@5 ~@20 f3@5 bb3@5 c4@5 db4@20 f4@5 db4@5 g3@2 ab3@2 ~]/4",
  CD: "bb3@2 c4@2 ~ db4@2 bb3@2 ~ e4@5 ~@5 bb4@4", CE: "~@2 c4@2 ~@3 ab3@15 ~@2",
})).s("gm_viola").gain(0.21).pan(1)

// other · viola · soft notes
const viola_soft = note(`<
  ~@27 A B C D A ~ E F ~ G ~@4 H D ~ I ~@68 J@2 K@4 ~@2 L@3 M@8 N@3 ~@2 O@3 P@3 ~@112 Q ~@4 R ~@24 S T U V W ~@5 R ~ X Y
  ~@3 Z AA AB AC@3 AD AE AF@3 AG AH@2 ~@2 AI AJ@2 AK@2 AL ~ AM@4 AN AO ~@6 AP AQ ~ AR AS ~ AT AU AV@3 AW ~@36 R ~@5
>`.pickRestart({
  A: "ab4 g4 ab4@2 ~@2", B: "~@2 g4 f4 g4@2", C: "~@4 bb4 ab4", D: "g4 ~@2", E: "~@4 f4 eb4", F: "f4 ~@2",
  G: "~@2 eb4 db4 eb4@2", H: "~@4 eb4 f4", I: "~@7 eb4@2 ~@3", J: "[~@11 g3@4 ~@9]/2",
  K: "[~@3 f4@2 g4@2 ab4@4 f4@4 ~@4 f4@2 g4@2 ab4@4 f4@4 ~@4 f4@2 g4@2 ab4@4 f4@4 ~]/4", L: "[~@7 f4@24 ~@5]/3",
  M: "[~@3 g4@16 eb4@8 f3@8 c4@8 e4@8 f4@16 e4@16 f4@13]/8", N: "[~@3 f3@16 c4@16 ~]/3",
  O: "[~@7 g4@4 e4@2 f4@2 g4@4 ~@4 c4@4 g4@4 ~@5]/3", P: "[~@3 f3@4 c4@2 bb3@2 c4@4 ~@4 bb3@4 db4@4 ~@9]/3",
  Q: "~@7 c4@5 d3@5 ~@7", R: "~@7 g3@5 ab3@5 ~@7", S: "~@7 eb4@5 g3@5 ~@7", T: "~@13 g3@5 e4@5 ~", U: "~@19 f3@5",
  V: "bb3@5 ~@19", W: "~ f3@5 db4@5 ~@13", X: "~@4 a3@2 ~@3 c4@2 ~@3 gb4@2 ~@3 f4@2 ~@3",
  Y: "bb3@2 ~@3 c4@2 ~@3 bb3@2 ~@12", Z: "~@4 b3@2 ~@3 d4@2 ~@3 ab4@2 ~@3 g4@2 ~@3", AA: "c4@2 ~@3 d4@2 ~@3 c4@5 ~@9",
  AB: "~ c4@5 ~@10 f3@5 ~@3", AC: "[~@7 g3@5 ~@10 c4@5 ~@10 ab4@17 g4@2 ~ f4@2 eb4@2 ~ d4@2 c4@2 ~ b3@2 ~@3]/3",
  AD: "~@10 eb3@5 g3@5 c4@4", AE: "~ g3@5 g3@5 g3@5 g3@8",
  AF: "[~@2 g3@5 ab3 g3@9 g3@5 g3@5 g3@5 g3@5 g3@5 c4@5 eb4@5 g4@5 b3@5 ~@10]/3", AG: "~@10 g4@5 c4@5 ~@4",
  AH: "[~@16 d4@5 b3@5 ~@22]/2", AI: "~@10 g3@5 g3@5 g3@4", AJ: "[~ g3@5 g4@5 c4@10 ab3@5 g3@5 eb3@15 ~@2]/2",
  AK: "[~@13 c3@2 ~@3 eb3@2 ~@3 g3@2 ~@3 eb3@2 ~@3 g3@2 ~@3 g3@2 ~@3 g3@2 ~@3]/2", AL: "c4@2 ~@3 f3@2 ~@3 eb3@5 ~@9",
  AM: "[~@22 c4@5 g3@5 g3@5 g3@5 c4@5 g3@5 g3@5 g3@5 g3@5 ab3 g3@9 g3@5 ~@14]/4", AN: "~@6 bb4@5 f4@5 ~@8",
  AO: "~@7 g4@5 eb4@5 ~@7", AP: "~@4 eb3@2 f3@2 ~ g3@2 ab3@2 ~ bb3@2 g3@2 ~ eb3@5", AQ: "ab3@5 ~@19", AR: "~@11 db4",
// … 275 more lines

More by J. S. Bach