Strudelify

Serenade for Strings Op.22

Antonín DvoÅák

KeyA majorTempo160 bpm
0:00/0:00
// Serenade for Strings Op.22 — Antonín DvoÅák
// 160 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2, 1/4 at bar 22, 3/4 at bar 22, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5983812; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/3)

// 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 · violin
const violin = note(`<
  A B C@2 D E F G@2 H I J K@2 L M N O@2 P Q R S T U V W S X Y Z AA@2 AB AC AD@5 AE AF AG AH AG AI AJ AK AL AM@2 AN AO
  AP@2 ~ AQ AR@2 AS@2 AT@2 AU@4 A AV AW AV AW AX AY AZ BA@3 BB AW@2 ~@2 BC BD ~ BE ~ BF BG BH ~@25 BI BJ
>`.pickRestart({
  A: "~@11 g#4@5", B: "g#5@3 a5@2 g#5@3 f#5@3 e5@2 d#5@3", C: "~@5 a3@5 ~ e5@5, c#5@11 ~@5",
  D: "~@5 g#3@5 ~ [c4,e5]@5, d#5@11 ~@5", E: "~@5 g#3@5 ~ g#4@5, [c#4,c#5]@11 ~@5",
  F: "g#5@3 a5@2 [g#3,g#5]@3 f#5@3 e5@2 d#5@3", G: "~@5 a3@5 ~ c#5@2 e5@3, c#5@11 ~@5",
  H: "~@5 g#3@5 ~ d#5@2 e5@3, d#5@11 c4@5", I: "~@5 g#3@5 ~ g#5@5, [c#4,c#5]@11 ~@5",
  J: "[g#5,g#6]@3 [a5,a6]@2 [g#5,g#6]@3 [f#5,f#6]@3 [e5,e6]@2 [d#5,d#6]@3, e4", // G# A G# F# E D#
  K: "[c#5,c#6]@3 ~@2 [c#5,c#6]@3 [e5,e6]@3 [c#5,c#6]@5", // C# E C#
  L: "[c#5,c#6]@3 ~@2 [c#5,c#6]@3 [d#5,d#6]@3 [c5,c6]@2 [e5,e6]@3", M: "~@11 [g#4,g#5]@5, [c#5,c#6]@11 ~@5, ~@5 g#3@11",
  N: "[g#5,g#6]@3 [a5,a6]@2 [g#5,g#6]@3 [f#5,f#6]@3 [e5,e6]@2 [d#5,d#6]@3, ~@5 g#3@11", // G# A G# F# E D#
  O: "[c#5,c#6]@3 ~@2 [c#5,c#6]@3 [e5,e6]@3 [c#5,c#6]@2 [e5,e6]@3, ~@5 [c#4,e4]@11", // C# E C# E C#m
  P: "[c#5,c#6]@3 ~@2 [g#3,d#4,c#5,c#6]@3 [d#5,d#6]@3 [g#3,d#4,c5,c6]@2 [e5,e6]@3", Q: "[c#4,e4,c#5,c#6]@5 ~@11",
  R: "g#4@5 g#5@3 a5@3 g#5@2 f#5@3", S: "e5@3 d#5@2 ~@6 a3@5, ~@5 c#5@11", T: "e5@5 ~@6 a3@5, ~@5 c#5@11",
  U: "e5@5 ~@6 g#3@5, ~@5 d#5@11", V: "[c4,e5]@5 ~@6 g#3@5, ~@5 [c#4,c#5]@11", W: "g#4@5 g#5@3 a5@3 [g#3,g#5]@2 f#5@3",
  X: "c#5@3 e5@2 ~@6 a3@5, ~@5 c#5@11", Y: "c#5@3 e5@2 ~@6 g#3@5, ~@5 d#5@11",
  Z: "d#5@3 e5@2 ~@6 g#3@5, c4@5 [c#4,c#5]@11", // C#
  AA: "[g#5@5 [g#5,g#6]@3 [a5,a6]@3 [g#5,g#6]@2 [f#5,f#6]@3 [e5,e6]@3 [d#5,d#6]@2 [c#5,c#6]@3 ~@3 [c#5,c#6]@2 [e5,e6]@3, ~@5 e4@16 ~@11]/2", // G# A G# F# E D# C# E
  AB: "[c#5,c#6]@5 [c#5,c#6]@3 ~@3 [c#5,c#6]@2 [e5,e6]@3", AC: "[c#5,c#6]@5 [c#5,c#6]@3 ~@3 [c#5,c#6]@2 [d#5,d#6]@3",
  AD: "[[c5,c6]@3 [e5,e6]@2 ~@11 [g#4,g#5]@5 [g#5,g#6]@3 [a5,a6]@3 [g#5,g#6]@2 [f#5,f#6]@3 [e5,e6]@3 [d#5,d#6]@2 [c#5,c#6]@3 ~@3 [c#5,c#6]@2 [e5,e6]@3 [c#5,c#6]@3 [e5,e6]@2 [c#5,c#6]@3 ~@3 [c#5,c#6]@2 [e5,e6]@3 [c#5,c#6]@3 [e5,e6]@2 [c#5,c#6]@3 ~@3 [g#3,d#4,c#5,c#6]@2 [d#5,d#6]@3, ~@5 [c#5,c#6]@11 ~@64, ~@11 g#3@11 ~@5 g#3@11 ~@5 [c#4,e4]@11 ~@5 [c#4,e4]@11 ~@10]/5", // C E G# A G# F# E D# …
  AE: "[g#3,d#4,c5,c6]@3 [e5,e6]@2 [c#4,e4,c#5,c#6]@5 ~@6", AF: "~@5 g#4@5 ~ [d5,f#5]@2 [e5,g#5]@3",
  AG: "[d5,f#5]@3 [c#5,e5]@2 [b4,d5]@3 [a4,c#5]@3 ~@5", AH: "~@8 e4@3 [d5,f#5]@2 [e5,g#5]@3",
  AI: "~@8 e4@3 [f#4,a5]@2 [g#4,b5]@3", AJ: "[f#4,a5]@3 [e4,g#5]@2 [d4,f#5]@3 [c#4,e5]@3 d5@2 e5@3",
  AK: "f#5@3 d5@2 b4@3 e4@3 [d5,f#5]@2 [e5,g#5]@3", AL: "f#5@3 [d5,e5]@2 [b4,d5]@3 [e4,c#5]@3 [b4,d5]@2 [c#5,e5]@3",
  AM: "[d5,f#5]@3 [b4,d5]@2 [g#4,b4]@3 e4@3 [b4,d5]@2 [c#5,e5]@3", // D Bm G#m Bm C#m
  AN: "[d5,f#5]@3 [b4,d5]@2 [g#4,b4]@3 e4@3 c#5@2 d5@3", AO: "e5@3 c#5@2 a4@3 e4@3 ~@5", AP: "~@8 e4@3 ~@5",
  AQ: "~@13 b4@3", AR: "[d5@3 b4@2 f#5@3 e5@3 [a3,e4,a4,e5]@11 ~@10]/2", AS: "[~@11 [g#3,e4,b4,e5]@11 ~@10]/2",
  AT: "[~@11 [a3,f#4,a4,a5]@11 ~@10]/2", // D
  AU: "[~@11 [c#5,c#6]@9 [c#5,c#6] [b4,b5]@2 ~@2 [a4,a5] ~ [e5,e6]@9 [e5,e6] [d#5,d#6]@2 ~@2 [c#5,c#6] ~ g#5 g#6@8 f#6 [f#4,c5,e6]@3 ~ d#6 ~ [e4,c#5]@3 ~@2, ~@43 [f#4,c5]@10 ~@6 c#6@5]/4", // C# B A E D# C# F#m7b5 C#m …
  AV: "[d5,f#5]@3 [e5,g#5]@2 [d5,f#5]@3 [c#5,e5]@3 [b4,d5]@2 [a4,c#5]@3", AW: "~@13 e4@3",
  AX: "[f#4,a5]@3 [g#4,b5]@2 [f#4,a5]@3 [e4,g#5]@3 [d4,f#5]@2 [c#4,e5]@3", AY: "d5@3 e5@2 f#5@3 d5@3 b4@2 e4@3",
  AZ: "[d5,f#5]@3 [e5,g#5]@2 f#5@3 [d5,e5]@3 [b4,d5]@2 [e4,c#5]@3", // D E Dsus2 Bm C#m
  BA: "[b4,d5]@3 [c#5,e5]@2 [d5,f#5]@3 [b4,d5]@3 [g#4,b4]@2 e4@3", BB: "c#5@3 d5@2 e5@3 c#5@3 a4@2 e4@3",
  BC: "~@3 b4@2 d5@3 b4@3 f#5@2 e5@3", BD: "[a3,e4,a4,e5]@11 ~@5", BE: "[g#3,e4,b4,e5]@11 ~@5",
  BF: "[a4,c#5,c#6]@9 [a4,c#5,c#6] ~ [g#4,b4,b5]@4 [f#4,a4,a5]", // A G#m F#m
  BG: "[c#5,e5,e6]@9 [c#5,e5,e6] ~ [b4,d5,d#6]@4 [a4,c#5,c#6]", BH: "[d5,f#5,a6]@9 a6 ~ g#6@2 f#6@3",
  BI: "[g#4,d5,f#5,c6]@5 ~@11", BJ: "[c#4,g#4,f5,c#6]@5 ~@11",
})).s("gm_violin").gain(0.3)

// chords · violin · soft notes
const violin_soft = note(`<
  ~ A ~@10 B@2 C ~@6 D ~@10 E@4 ~@6 F G F G H I ~@3 J@2 K L M N ~ O P O P ~ Q ~@5 R ~ R ~ S ~@4 T U@2 V W X Y@4 ~@3 Z AA
  AB AC AD AE AF@3 AG AH AI@2 AJ AK AL AM@3 AN AO AP@2 AQ AR ~@2
>`.pickRestart({
  A: "~@5 g#3@3 ~@8", B: "~@5 a3@11", C: "~@5 g#3@11", D: "~@11 g#3@3 ~@2",
  E: "[~@11 a3@11 ~@5 a3@11 ~@5 g#3@11 ~@10]/4", F: "~@11 [g#4,b4]@2 [a4,c#5]@3", G: "[g#4,b4]@3 [e4,g#4]@2 e4@3 ~@8",
  H: "~@11 b3@2 c#4@3", I: "d4@3 b3@2 g#3@3 ~@8", J: "[~@11 e4@13 ~@3 b4@2 c#5@3]/2",
  K: "d5@3 b4@2 g#4@3 ~@3 b4@2 c#5@3", L: "d5@3 b4@2 g#4@3 ~@3 d5@2 b4@3", M: "g#4@3 e4@3 ~@10",
  N: "d5@3 b4@2 g#4@3 e4@3 g#4@3 ~@2", O: "~@5 e5@11", P: "e5@11 ~@5", Q: "a5@11 ~@5",
  R: "[g#4,b4]@3 [a4,c#5]@2 [g#4,b4]@3 [e4,g#4]@3 e4@2 ~@3", S: "b3@3 c#4@2 d4@3 b3@3 g#3@3 ~@2", T: "e4@13 ~@3",
  U: "b4@3 c#5@2 d5@3 b4@3 g#4@3 ~@2", V: "d5@3 b4@2 g#4@3 e4@3 ~@5", W: "~@5 d5@3 b4@3 g#4@2 e4@3", X: "g#4@3 ~@13",
  Y: "[~@11 e5@10 e5@11]/2", Z: "e6@3 d6@2 c#6@3 b5@3 a5@2 g#5@3, [b3,d4]@5 ~@11",
  AA: "f#5@3 e5@2 d5@3 c#5@3 b4@2 a4@3", AB: "g#4@3 f#4@2 e4@3 f#4@3 g#4@2 a4@3, ~@5 [b3,d4]@5 ~@6",
  AC: "f#4@3 g#4@2 a4@3 b4@3 g#4@2 a4@3, [b3,d4]@5 ~@11", AD: "b4@3 c#5@2 a4@3 c#5@3 e5@2 f#5@3, ~@5 [c#4,e4]@5 ~@6",
  AE: "g#5@3 a5@2 g#5@3 f#5@3 e5@2 d#5@3, [d#4,f#4]", // D#m
  AF: "[e4 ~@10 e5@5 c#5@11 e5@5 d#5@11 [c4,e5]@5, c#5@11 ~@37, ~ c#4@42 ~@5]/3", AG: "c#5@11 g#4@5, c#4",
  AH: "g#5@3 a5@2 g#5@3 f#5@3 e5@2 d#5@3", AI: "c#5@3 ~@2 c#5@3 e5@3 ~@2 d#4@3, c#4@13 ~@3, ~@11 c#5@5",
  AJ: "d#5@3 ~@2 c#5@3 d#5@3 c5@2 [d#4,e5]@3, c#4@13 ~@3", AK: "[c#4,c#5]@11 c#5@2 d#5@3",
  AL: "[g#4,c5]@3 [a4,c#5]@2 g#4@3 f#4@3 e4@2 d#4@3, ~@5 c5@11", // G# A
  AM: "[c#5@3 d#5@2 ~@3 e4@3 ~@5 c#5@3 d#5@2 ~@3 e4@3 ~@5 c#5@3 d#5@2 ~@3 d#4@3 e5@2 d#5@3, c#4@8 ~@3 c#4@13 ~@3 c#4@13 ~@3 c4@5, ~@5 c#5@11 ~@5 c#5@11 ~@5 c#5@5 ~@6]/3",
  AN: "c#5@3 e5@2 d#5@3 c#5@3 b4@2 a4@3, c#4", AO: "g#4@3 a4@2 g#4@3 f#4@3 e4@2 d#4@3, c4",
  AP: "~@3 d#4@2 ~@3 e4@3 c#4@2 e4@3, c#4@5 c#4@6 ~@5", AQ: "~@3 d#4@2 ~@3 d#4@3 [c4,e4]@2 [c4,e4]@3, c#4@5 c#4@5 ~@6",
  AR: "c#4@5 ~@11",
})).s("gm_violin").gain(0.2)

// chords · violin
const violin_2 = note(`<
  ~ A@3 B C A@3 B C D E@3 F G@4 H I@3 J K I@3 J K L@4 M@5 N O@2 P@2 Q@2 R@8 S ~ T@2 U@2 V@2 W@4 ~ X Y X Y Z AA Z AB@3 AC
  AD@3 AE ~ AF AG AH AI AJ AK AL AM ~@4 AN AO AP AQ AR D AS@2 AT AR AU AV AW AX AY AZ BA@2 BB BC BD BE
>`.pickRestart({
  A: "~@5 [c#4,e4]@3 ~@8", B: "~@5 d#4@3 ~@8", C: "~@5 c#4@3 ~@8", D: "~@5 [c#4,e4]@11",
  E: "[~@5 [c#4,e4]@11 ~@27 c5@5, ~@5 c#5@37 ~@6, ~@37 d#4@11]/3", F: "c#5@5 [c#4,e4]@11",
  G: "[~@11 c#5@8 d#5@2 [e4,a4]@11 ~@3 d#5@2 [e4,a4]@11 ~@3 d#5@2 [c#4,g#4]@3 ~@3 g#4@5, ~@5 [c#4,e4]@11 ~@5 c#5@13 ~@3 c#5@13 ~@3 c#5@5 ~ c4@3 ~@2]/4", // A5 C#5 C#m
  H: "[c#4,e4,c#5]@5 ~@11", I: "~@11 [c#4,e4]@3 ~@2", J: "~@11 d#4@3 ~@2", K: "~@11 c#4@3 ~@2",
  L: "[~@11 [c#4,e4]@11 ~@5 [c#4,e4]@11 ~@21 d#4@5, ~@27 c#5@37]/4", // C#m
  M: "[c5@5 c#5@5 ~ [c#4,e4]@11 ~@10 c#5@8 d#5@3 [e4,a4]@11 ~@2 d#5@3 [e4,a4]@11 ~@2 d#5@3 [c#4,g#4]@3 ~@2, ~@27 [c#4,e4]@11 ~@5 c#5@13 ~@3 c#5@13 ~@3 c#5@5]/5", // C#m A5 C#5 C#m
  N: "g#4@5 [c#4,e4,c#5]@5 ~@6, c4@3 ~@13", O: "[~@11 [b3,d4,g#4]@16 [b3,d4,g#4]@5]/2",
  P: "[[b3,d4,g#4]@5 ~@6 [b3,d4,g#4]@16 [b3,d4,g#4]@5]/2", Q: "[[b3,d4,g#4]@5 ~@6 [d4,a4]@16 [b3,d4]@5]/2",
  R: "[[b3,d4]@5 ~@6 [d4,a4]@16 g#4@13 ~@3 g#4@13 ~@3 g#4@13 ~@3 f#4@13 ~@3 e4@37]/8", S: "~@5 d5@3 b4@3 g#4@2 e4@3",
  T: "[~@11 e4 c#5@8 d5 c#5@2 ~@2 b4 ~ a4@2 ~@2 b4]/2", U: "[c#5@5 a4@3 ~@3 d4 b4@8 c#5 b4@2 ~@2 a4 ~ g#4@2 ~@2 a4]/2",
  V: "[b4@5 g#4@3 ~@3 a4 f#5@8 f#5 e5@2 ~@2 d5 ~ c#5@2 ~@2 d5]/2",
  W: "[e5@5 c#5@3 ~@3 a4 a5@8 a5 g#5@2 ~@2 f#5 ~ g#4 g#5@8 g#5 f#5@2 ~@2 e5 ~ g#5@9 f#5 e5@2 ~@2 d#5 ~ c#5@5]/4",
  X: "[b3,d4,g#4]", Y: "[b3,d4,g#4]@5 [b3,d4,g#4]@5 ~@6", Z: "[d4,a4]", AA: "[b3,d4]@5 [b3,d4]@5 ~@6", AB: "g#4@13 ~@3",
  AC: "f#4@13 ~@3", AD: "[e4@37 ~@6 d5@2 b4@3]/3", AE: "g#4@3 e4@3 ~@10", AF: "e4 c#5@8 d5 ~ c#5@2 ~@2 b4",
  AG: "a4@2 ~@2 b4 c#5@5 ~ a4@3 ~@2", AH: "d4 b4@8 c#5 ~ b4@2 ~@2 a4", AI: "g#4@2 ~@2 a4 b4@5 ~ g#4@3 ~@2",
  AJ: "a5@9 a5 ~ g#5@4 f#5", AK: "c#6@9 c#6 ~ b5@4 a5", AL: "f#6 ~", AM: "g#4@5 ~@11", AN: "c5",
  AO: "~@5 e4@3 g#4@3 ~@5", AP: "~@5 e4@3 a4@3 ~@5", AQ: "~@5 f#4@3 a4@3 f#4@3 ~@2", AR: "e4@11 ~@5",
  AS: "~@5 [c#4,e4]@8 ~@3", AT: "~@5 d#4@5 ~ f#4@5", AU: "~@5 g#4@11", AV: "[c#4,e4]@3 ~@13", AW: "[c#4,d#4]@3 ~@13",
  AX: "[c#4,d#4]@3 ~@8 [g#3,f#4]@3 ~@2", AY: "[g#3,e4]@3 ~@13", AZ: "g#3@5 ~@11", BA: "a3@11 ~@5",
  BB: "a3@3 ~@8 a3@3 ~@2", BC: "c#4@3 ~@13", BD: "[d#4,c5,g#5]@5 ~@11", BE: "[g#4,c#5,f5]@5 ~@11",
})).s("gm_violin").gain(0.21)

// other · viola
const viola = note(`<
  ~ A B@3 C A B@3 C D E@2 F@3 G@2 H I J K@3 L J K@3 L M N@8 O P Q R Q S T U T V@2 W@4 ~@2 X@2 Y@2 Z@2 AA@4 ~ AB AC AB AC
  AD AE AD AF@3 AG@4 ~@2 AH ~ AI ~ AJ AK AL AM ~ AN AM AO AP AQ@3 AR ~ AS@3 AT AU AV@3 AW ~@5 AX AY
>`.pickRestart({
  A: "~@5 g#3@3 ~@8", B: "[~@5 a3@5 ~@11 a3@5 ~@11 [f#3,g#3]@5 ~ c3@5, ~@5 e3@37 ~@6]/3",
  C: "~@5 [e3,g#3]@5 ~@6, c#3@11 ~@5", D: "e3", E: "~@5 a3@11", F: "~@5 g#3@11", G: "~@5 [c#4,e4]@11",
  H: "~@5 [g#3,d#4]@3 ~@3 [g#3,d#4]@3 ~@2", I: "[c#4,e4]@5 ~@11", J: "~@11 g#3@3 ~@2",
  K: "[~@11 a3@5 ~@11 a3@5 ~@11 [f#3,g#3]@5, ~@11 e3@37]/3", L: "c3@5 ~@6 [e3,g#3]@5, ~@5 c#3@11", M: "~@5 e3@11",
  N: "[~@11 a3@11 ~@5 a3@11 ~@5 g#3@11 ~@5 g#3@11 ~@5 g#3@11 ~@5 [c#4,e4]@11 ~@5 [c#4,e4]@11 ~@5 [g#3,d#4]@3 ~@2]/8", // C#m G#5
  O: "[g#3,d#4]@3 ~@2 [c#4,e4]@5 ~@6", P: "~@11 d4@2 e4@3", Q: "d4@3 c#4@2 b3@3 a3@3 g#3@2 a3@3",
  R: "g#3@3 e3@3 ~@5 d4@2 e4@3", S: "g#3@3 e3@3 ~@5 f#4@2 g#4@3", T: "f#4@3 e4@2 d4@3 c#4@3 b3@2 c#4@3",
  U: "d4@3 b3@2 g#3@3 ~@3 f#4@2 g#4@3", V: "d4@3 b3@2 g#3@3 e3@3 b3@2 c#4@3", W: "[d4@3 b3@2 g#3@3 e3@3 e3@53]/4",
  X: "[~@11 [a3,e4]@11 ~@10]/2", Y: "[~@11 [g#3,e4]@11 ~@10]/2", Z: "[~@11 [a3,f#4]@11 ~@10]/2",
  AA: "[~@11 c#5@9 c#5 b4@2 ~@2 a4 ~ e5@9 e5 d#5@2 ~@2 c#5 ~ [f#4,c5]@10 [f#4,c5]@3 ~@3 [e4,c#5]@3 ~@2]/4", // F#dim C#m
  AB: "d4@3 e4@2 d4@3 c#4@3 b3@2 a3@3", AC: "g#3@3 a3@2 g#3@3 e3@3 ~@5", AD: "f#4@3 g#4@2 f#4@3 e4@3 d4@2 c#4@3",
  AE: "b3@3 c#4@2 d4@3 b3@3 g#3@3 ~@2", AF: "b3@3 c#4@2 d4@3 b3@3 g#3@2 e3@3", AG: "[e3@53 ~@11]/4",
  AH: "[a3,e4]@11 ~@5", AI: "[g#3,e4]@11 ~@5", AJ: "[a4,c#5]@9 [a4,c#5] ~ [g#4,b4]@4 [f#4,a4]",
  AK: "[c#5,e5]@9 [c#5,e5] ~ [b4,d5]@4 [a4,c#5]", AL: "[d5,f#5] ~", AM: "[b3,d4]@5 ~@11", AN: "~@5 [b3,d4]@5 ~@6",
  AO: "~@5 [c#4,e4]@5 ~@6", AP: "[d#4,f#4]", AQ: "[e4 c#4@42 c4@5]/3", AR: "c#4", AS: "c#4@13 d#4@3", AT: "c#4@11 ~@5",
  AU: "g#3@3 a3@2 g#3@3 f#3@3 e3@2 d#3@3", AV: "[c#3@8 e3@3 c#3@13 e3@3 c#3@13 d#3@3 c3@5]/3", AW: "c#3",
  AX: "[g#3,f#4]@5 ~@11", AY: "[c#3,g#3,f4]@5 ~@11",
})).s("gm_viola").gain(0.25)

// other · viola · soft notes
const viola_soft = note("<~@111 c3 [c#3@5 c#3@3 e3@3 c#3@2 e3@3]!2 [c#3@5 c#3@3 d#3@3 c3@2 e3@3] [c#3@5 ~@11] ~@2>")
  .s("gm_viola").gain(0.05)

// bass · contrabass
const bass = note(`<
  ~@16 A B C D E ~@15 F@2 G H I J@4 K@4 ~@8 L@2 M@2 N@2 O@4 ~ A ~ A ~ P ~ P ~@9 Q ~ R ~ S R T ~@25 U E
>`.pickRestart({
  A: "e2", B: "a2@5 a2@3 ~@8", C: "f#2@5 f#2@3 ~@8", D: "g#2@5 ~@6 g#1@5", E: "c#2@5 ~@11",
  F: "[~@5 e2@16 a2@5 ~ a2@3 ~@2]/2", G: "~@5 f#2@5 ~ f#2@3 ~@2", H: "~@5 g#2@5 ~@6", I: "g#1@5 c#2@5 ~@6",
  J: "[~@11 e2@16 ~@5]/2", K: "[~@11 b1@16 ~@5]/2", L: "[~@11 a1@11 ~@10]/2", M: "[~@11 e2@11 ~@10]/2",
  N: "[~@11 d2@11 ~@10]/2", O: "[~@11 f#2@11 ~@5 d2@11 ~@5 g#2@10 g#1@3 ~@3 c#2@3 ~@2]/4", P: "b1", Q: "a1@11 ~@5",
  R: "e2@11 ~@5", S: "f#2@11 ~@5", T: "d2@11 ~@5", U: "g#1@5 ~@11",
})).s("gm_contrabass").gain(0.35)

// bass · contrabass · soft notes
const bass_soft = note("<~@42 A B A B C D C E@6 ~@14 F ~ F ~ G ~ G@6 D ~@9 D ~@26>".pickRestart({
  A: "~@11 e2@3 ~@2", B: "e2@3 ~@13", C: "~@11 e2@5", D: "e2@5 ~@11", E: "e2@5 ~@6 e2@5", F: "e2@3 ~@2 e2@3 ~@8",
  G: "e2@5 e2@5 ~@6",
})).s("gm_contrabass").gain(0.2)

// bass · acoustic bass
const bass_2 = note("<~@11 A B C D E ~@15 F G H I J ~@60 K L M N L A O M N L ~@3 P L ~@3 P L ~@2>".pickRestart({
  A: "e2@5 ~@11", B: "a2@11 ~@5", C: "f#2@11 ~@5", D: "g#2@5 ~@6 g#1@5", E: "c#2@11 ~@5", F: "~@5 e2@5 ~@6",
  G: "~@5 a2@11", H: "~@5 f#2@11", I: "~@5 g#2@5 ~@6", J: "g#1@5 c#2@11", K: "g#2@5 ~@11", L: "c#2@5 ~@11",
  M: "f#2@5 ~@11", N: "g#2@5 ~@6 g#2@5", O: "a2@5 ~@11", P: "~@11 g#1@5",
})).s("gm_acoustic_bass").gain(0.2)

stack(violin, violin_soft, violin_2, viola, viola_soft, bass, bass_soft, bass_2)

More by Antonín DvoÅák