Strudelify

Two Pieces for String Octet: Prelude

Dmitri Shostakovich

KeyF majorTempo71 bpm
0:00/0:00
// Two Pieces for String Octet: Prelude — Dmitri Shostakovich
// 71 bpm, 4/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 (4/4 at bar 1, 3/4 at bar 6, 4/4 at bar 7, 3/4 at bar 19, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5912672; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 75 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(71/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 · viola
const viola = note(`<
  A@3 B@3 ~@2 C D ~ E ~ F@3 G ~ H@8 ~@2 I@2 J K L M N@2 O P Q R S T@2 U@2 V W@4 X Y@7 Z AA@2 AB@2 AC@3 ~ AD@4 AE@2 ~@2
>`.pickRestart({
  A: "[~@12 [f3,d5] [f3,d5]@23 [g3,e5] [g3,e5]@23 g5 [g3,g5]@17 ~@6 [bb3,bb5] [bb3,bb5]@26 a5@3 g5@3 f5@3 e5@3 f5@3 g5@3 f5@3 e5@3 f5@3 e5@3 d5@3]/3", // Dm C G Bb
  B: "[c5 bb4 a4 g4 a4@7 d4 d4@10 db4@2 c4@2 b3@2 bb3@2 a3@6 ~@12, ~@4 d3@4 ~@4 bb3@7 ~@29]/3", C: "~@5 d6 g6 gb6",
  D: "f6 e6 g6 bb6@5", E: "a4", F: "[[e3,ab4]@4 ~@4 c6@7 f5 f5@4 e5@4 eb5@7 d5 ~@8 g3@8, ~ ab3@4 ~, ~@2 d5]/3",
  G: "[g3,eb5]@3 ~@5", // Cm
  H: "[~@9 gb6 g6 gb6 e6 gb6 e6 d6 c6 d6 e6 d6 e6 gb6 g6 gb6 e6 gb6 e6 d6 c6 d6 e6 d6 e6 gb6 g6 gb6 e6 gb6 e6 d6 c6 d6 e6 d6 e6 gb6 g6 gb6 e6 gb6 e6 d6 c6 d6 c6 d6 c6 b5 c6 b5 g5 b5 g5 gb5 g5 gb5 e5 gb5 e5 d5 e5 d5 c5 d5 c5 b4 c5 b4 g4 b4 g4 gb4@12 ~@3, ~@3 d4@3 c4 b3@3 c4 d4@3 c4 b3@16 ~]/8",
  I: "[~@36 f3@8 e3@8 f3@16 ~ gb3 ~ gb3 ~@5 g3@2 ~@2 g3@2 ~@2 g3@2 ~@2 g3@2 ~@2 g3@2 ~]/2",
  J: "~ [g3,a5]@2 ~@2 a5 gb3@2 c6 ~ [gb3,bb5] ~ [gb3,c6] ~ g3@2 a5 ~ c4@2 a5 ~ gb3@2 c6 ~ [gb3,d6] ~ [gb3,c6] ~ g3@2 a5 ~ c4@2 a5 ~ gb3@2 c6 ~ d6 ~ c6 ~@2 bb5, ~@6 d6 ~@7 bb5 ~@3 bb5 ~@3 d6 ~@7 bb5 ~@3 bb5 ~@3 d6 ~@9", // Gsus2 Gb Gbdim D Gbdim
  K: "~ a5 ~ g5 ~ gb5 ~@42",
  L: "f6@9 ~ e6 ~ eb6 ~ d6 ~ db6 ~ c6 ~ b5 ~ bb5 ~ a5 ~ ab5 ~ g5 ~ gb5 ~ f5@2 ~@3 f6@2 ~ f6 [d6,bb6] ~ [d6,ab6] ~ [d6,bb6] ~ [d6,ab6]", // Gm Ddim Gm Ddim
  M: "~ [eb6,gb6] ~ [eb6,f6] ~ [eb6,gb6] ~ [eb6,f6] ~ [d6,bb6] ~ [d6,ab6] ~ [d6,bb6] ~ [d6,ab6] ~ [eb6,gb6] ~ [eb6,f6] ~ [eb6,gb6] ~ [eb6,f6] ~ d6@2 ab6 ~ bb6 ~@2 ab6 ~ gb6 ~ f6 ~ eb6 ~ d6 ~@7, ~@25 bb6 ~@22", // Ebm Ebsus2 Ebm Ebsus2 Gm Ddim Gm Ddim …
  N: "[~@10 a4 ~ [ab4,db5] ~ ab4@2 f5 ~ e5 ~ eb5 ~ d5 ~ db5 ~@2 c5 ~ [gb4,b4] ~ [f4,e5] ~ eb5 ~ d5 ~ db5 ~ c5 ~ b4 ~ bb4 ~ e4@2 eb4@2 db5 ~ c5 ~ gb4@2 e4@2 eb5 ~ d5 ~ ab4@2 g4@2 f5 ~@2 e5 ~ eb5 ~ d5 ~ db5 ~ c5 ~ b4 ~ bb4 ~ a4 ~ a4 ~ d4 ~ d4 ~ db4 ~ bb4 ~ a4 ~, ~@14 gb5 ~@30 a4 ~ d5 ~@5 b4 ~ e5 ~@5 db5 ~ gb5 ~@32]/2", // Db5 B5 Fmaj7
  O: "ab4 ~ g4 ~ gb4 ~ f4 ~ f4 ~ e4 ~ d5 ~@2 db5 ~ c5 ~ [c5,f5] ~ [c5,e5] ~ [f4,f5] ~ g5@2 e4 ~ db5 ~ c5 ~ a5@2 b4 ~ [bb4,g5] ~ [a4,a5] ~ bb5@2 bb4 ~ c5@2 g4, ~@25 f4 ~@7 c5 ~@7 g4 ~@3 a4 ~@2", // F5 C F Eb A
  P: "~ [f4,c6]@2 ~@2 d6 ~ c6 ~@2 [e4,bb5]@2 ~@2 c6 ~ bb5 ~ [f4,a5]@2 ~@2 bb5 ~ a5 ~ [f4,g5]@2 ~@2 a5 ~ g5 ~@3 gb4@2 gb4@2 b3@2 b3@2 bb3@2 g4@2, ~@17 gb5@4 f5@3", // F5 Edim F Fsus2
  Q: "gb4@2 f4@8 ~ f4@8 [eb4,gb5]@2 ~@16 bb3 ~ bb3 ~ eb3 ~ eb3 ~ d3 ~@2, ~ gb5@8 ~@15", // Ebm
  R: "b3 ~ bb3 ~ a3@2 ~@2 a3 ~ a3 ~ bb3@2 ~@2 bb3@2 ~@2 ab3@2 ~@2 ab3 ~ ab3 ~ a3@2 ~@2 a3@2 ~@2 gb3 ~ g3 ~@2 e3 ~ f3 ~ d3 ~ eb3",
  S: "~ c3 ~ db3 ~@11 f3@2 bb3@2 a3@2 bb3@2 c4@2 f3@2 db4@2 c4@2 db4@2 eb4@2 ~ f3@2 f4@4 g4@2 f4@2 eb4@2",
  T: "[f4@2 eb4@2 db4@2 db4@2 f4@2 eb4@2 db4@2 c4@4 db4@4 d4@4 g5@4 ~ c6@4 b5@2 c6@2 d6@4 g5@4 eb6@4 d6@2 eb6@2 f6@4 g5@4 g6@4 ab6@2 g6@2 f6@4 ~ g6@2 f6@2 [c4,eb6]@4 [b3,f6]@2 [c4,eb6]@2 [d4,d6]@4 eb6@2 d6@2, ~@19 g3 ~@3 g3]/2", // Cm Bdim Cm D
  U: "[[eb4,c6]@4 d4@2 eb4@2 f4@4 g3@4 g4@4 ~ ab4@2 g4@2 f4@4 g4@2 f4@2 eb4@4 f4@2 eb4@2 d4@4 eb4@2 d4@2 c4@4 ~@4 c4 c4@4 ~@6 g3 g3@4 ~@6 g3 g3@4 ~@11 a3]/2", // Cm
  V: "a3@2 ~@2 [bb5,bb6]@13 a6@3 g6@3 f6@2 e6@2 f6@2 g6@2 f6 e6 d6 ~ c6 bb5 c6 ~ d6 c6 bb5 ~ a5 g5 f5 ~ g5", // Bb
  W: "[a5 bb5 ~ a5 g5 f5 ~ e5 d5 db5 ~ d5 e5 f5 ~ g5 a5 b5 ~ db6 a3 ~@2 c6@3 bb5@3 ~ a5@3 bb3 ~@2 f5@3 ~ e5@3 d5@3 c4 c4@6 bb5 a5@2 g5@2 ~ e5@2 f5@2 ~ f5@2 ~ d5@2 c5@2 ~ db4 ~@3 gb6@3 d6@3 db6@3 d4 ~@3 a5@3 ab5@3 gb5@3 ~ e4@6 d6!2 ~ b5@2 a5@2 ~ a5@2 b5@2 ~ d6@2 ~ d6@2 e6@2 b3 a4@2 d6@2 ~ c6@2 a4@2 ~ a4@2 a5@2 ~ c6@2 ~ e6@2 f6@2 ~ f6@2 bb3 ~@2 d6@3 ~ c6@3 b5@3 c4 ~@2 g5@3 ~ f5@3 e5@3 d4 d4@6 c6 b5@2 a5@2 ~ f5@2, ~@20 d6@3 ~@10 g5@3 ~@22 f5@2 ~@3 g5@2 ~ e5@2 ~@3 bb4@2 db4@12 ~ d4@12 ~@28 b3@9 ~@17 bb3@12 ~ c4@12 ~@15, ~@21 a3@12 ~ bb3@12 ~@26 a4@3 ~@10 b5@3 ~@19 db6@2 ~@3 ab5@2 ~@3 db6@2 ~ db6@2 ~@3 f6@2 ~@3 a4@2 ~@3 b5@2 ~@3 b5@2 ~ d6@2 ~@3 g6@2 ~ e6@3 ~@10 a5@3 ~@18 c6 ~@3 g5@2 ~]/4",
  X: "g5@2 ~ g5@2 ~ e5@2 d5@2 ~ d4 ~@3 g6@3 e6@3 d6@3 ~ c6@3 bb5@3 a5@3 g5@3 ~ bb3 ~@2 e7@2 ~ d7@2 ~ bb6, ~@2 a5@2 ~ f5@2 ~@3 c5@2 d4@12 ~ e4@12 ~@2 [bb3,g4]@9, ~@11 bb4@3 ~@29 e5@2 ~ e5@2", // Eb
  Y: "[~ e5@2 ~ e5@2 e6@2 ~ d6@2 e5@2 ~ e5@2 ~ g5@2 f5@2 ~ d5@2 c5@2 ~ a4@2 g4@2 ~ e4@2 d4@2 ~ bb3@2 ~ g3@2 [gb3,a3]@12 ~@12 bb3@20 eb3@3 eb3@12 d3@12 db3@12 c3@59 db3@24 e3@59 d3@47 eb3@12 e3@10, ~@3 g6@2 ~@3 e5@2 ~@3 bb5@2 ~ a5@2 ~@3 e5@2 ~@3 bb4@2 ~@3 f4@2 ~@3 c4@2 ~ a3@2 ~@295]/7", // Gbm
  Z: "~@2 f3@12 g3@23 f3@11", AA: "[~@37 bb4@20 eb4@3 eb4@24 d4@12]/2", AB: "[~@35 bb4@21 eb4@3 eb4@24 d4@12 ~]/2",
  AC: "[~@34 f4@21 bb3@3 bb3@17 a3@6 a3@24 g3@18 f3@6 f3@12 ~@3]/3",
  AD: "[~@8 a3@4 bb3@4 a3@4 g3@4 a3@3 g3@4 f3@4 eb3@4 f3@4 g3@4 f3@4 g3@4 a3@4 bb3@4 a3@4 g3@4 a3@4 g3@4 f3@4 eb3@4 f3@4 g3@4 f3@3 g3@4 a3@4 bb3@4 a3@4 g3@4 a3@4 g3@4 f3@4 eb3@4 f3@4 g3@4 f3@4 g3@4 a3@4 bb3@4 a3@4 g3@4 a3@3 g3@4 gb3@4 g3@4 gb3@4 eb3@4 gb3@3]/4",
  AE: "[~ eb3@4 d3@4 eb3@4 d3@4 g3@4 a3@4 g3@4 gb3@47 ~@20]/2",
})).s("gm_viola").gain(0.2)

// chords · viola · soft notes
const viola_soft = note("<~@4 A B C D E@2 ~@55 F G H@4 I@2 J@2>".pickRestart({
  A: "~@3 eb3 eb3@4 d3@4 db3@4", B: "c3 ~@3", C: "f3!3 e3", D: "eb3!4", E: "[e3!3 e3@5]/2",
  F: "~@33 a6@4 bb6@4 a6@4 g6@3", G: "~ a6@3 g6@4 f6@4 eb6@4 f6@4 g6@4 f6@4 g6@4 a6@4 bb6@4 a6@4 g6@4",
  H: "[a6@4 g6@4 f6@4 eb6@4 f6@4 g6@4 f6@3 g6@4 a6@4 bb6@4 a6@4 g6@4 a6@4 g6@4 f6@4 eb6@4 f6@4 g6@4 f6@4 g6@4 a6@4 bb6@4 a6@4 g6@4 a6@3 g6@4 f6@4 eb6@4 f6@4 g6@4 f6@4 g6@4 a6@4 bb6@4 a6@4 g6@4 a6@4 g6@4 f6@4 eb6@4 f6@4 g6@4 f6@3 g6@4 a6@4 g6@4 a6@4 bb6@4 a6@3]/4",
  I: "[~ bb6@4 d7@4 bb6@4 d7@4 e7@4 d7@4 e7@4 gb7@47 ~@20]/2", J: "[~@27 d3@47 ~@22]/2",
})).s("gm_viola").gain(0.05)

// other · pizzicato strings · Gbm
const pizzicato_strings = note("<~@26 [gb3!3 ~]!3 ~@6 [~@7 d4!2 ~@3] ~@36 [~@7 [gb3,a4]@3 ~@2] [~ [gb3,a4]@3 ~@8] ~>")
  .s("gm_pizzicato_strings").gain(0.15)

// chords · cello
const cello = note(`<
  A@3 B ~@4 C@2 D@2 ~ E F G H@2 I@8 ~@3 J@2 ~ K@2 L M N O P ~ Q@3 R S T U@2 V W X Y@8 Z@2 AA@2 AB AC@2 ~ AD@4 AE@2 ~@2
>`.pickRestart({
  A: "[~@12 a4 ~@11 d3 ~@11 bb4 ~@11 d3 ~@11 c5 ~@11 d3 d3@35 ~@36, ~@13 a4@23 ~ bb4@23 ~ [c5,e5]@47 ~@36, ~@25 d3@23 ~ d3@23 ~@72]/3", // C
  B: "~ [a2,gb4] ~@2", C: "[~@3 g5 c6 b5 bb5@10]/2", D: "[~@5 e3@3, e4 gb4 gb4@2, ~ e3@2 e3@2 ~@3]/2",
  E: "[b2,e4]@4 ~@4 c5@7 f4", F: "f4@4 gb4@4 g4@4 gb4@3 f4", G: "f4", H: "[gb4@3 ~ g3@12]/2",
  I: "[~@3 gb3@3 f3@3 e3@3 db3@3 c3@3 d6@2 e6@2 d6@2 c6@2 d6@2 c6@2 b5@2 g5@2 b5@2 c6@2 b5@2 c6@2 d6@2 e6@2 d6@2 c6@2 d6@2 c6@2 b5@2 g5@2 b5@2 c6@2 b5@2 c6@2 d6@2 e6@2 d6@2 c6@2 d6@2 c6@2 b5@2 g5@2 b5@2 c6@2 b5@2 c6@2 d6@2 e6@2 d6@2 c6@2 d6@2 c6@2 b5@2 c6@2 b5@2 g5@2 b5@2 g5@2 gb5@2 g5@2 gb5@2 e5@2 gb5@2 e5@2 d5@2 c5@2 d5@2 c5@2 d5@2 c5@2 b4@2 c5@2 b4@2 g4@2 b4@2 g4@2 gb4@2 g4@2 gb4@2 e4@2 g4@2 e4@2 d4@24 ~@6, ~@3 b2@3 a2 g2@3 a2 b2@3 a2 g2@16 ~]/8",
  J: "[~@13 f5@4 ~@20 a2@16 ~ gb5 ~ gb5 ~ gb5 ~ gb5 ~ g5 ~ g5 ~ g5 ~ g5 ~ a2@2 gb5 ~ gb5 ~ gb5 ~ g5 ~ g5 ~ g5 ~ g5 ~ gb5@2 ~@8, ~@54 a2@16 gb5 ~@25]/2",
  K: "[db6@2 ~@43 f5@3 f5 bb5 ~ ab5 ~ bb5 ~ ab5 ~ gb5 ~ f5 ~ gb5 ~ f5 ~ bb5 ~ ab5 ~ bb5 ~ ab5 ~ [f3,gb5]@2 f5@2 gb5@2 ~ f5@2 bb5@2 ab5@2 b5@2 bb5@2 a5 ~ ab5 ~ g5 ~, ~@41 f3@16 f3@16 ~@23]/2", // Gbmaj7
  L: "gb5 ~ f5 ~ e5 ~ eb5 ~ d5 ~ db5 ~ bb4 ~ b4@2 ~@32",
  M: "~@28 a2@2 ~@2 d3@2 ~@2 db3 ~ d3 ~ e3@2 ~@2 a2@2 ~@2, ~@5 bb3",
  N: "f3@2 ~@2 e3 ~ f3 ~ g3@2 ~@2 a2@2 ~ b3@2 a3@2 c4 ~ bb3 ~ a3 ~ g3@2 bb3 ~ a3 ~ g3 ~ f3@2 a3 ~ g3 ~ f3 ~ e3@2 g3 ~ f3 ~ e3, bb3@14 ~@3 c4 ~@7 bb3 ~@7 a3 ~@7 g3 ~@6",
  O: "~ d3@2 ~@7 d3@2 ~@6 d3@2 ~@6 d3@2 ~@6 eb5@4 d5@4 db5@6, ~@17 eb3 ~@6",
  P: "~@2 d5@8 ~@5 bb4@4 bb4@8 a4@8 bb4@10 ~@3, ~@11 db5@8 eb5@2 ~@27",
  Q: "[~@36 f5@2 bb5@4 a5@2 bb5@2 c6@4 f5@4 db6@4 c6@2 db6@2 eb6@4 f5@4 f6@4 ~@21 g2@4 c3@4 b2@2 c3@2 [d3,g5]@4 [g2,c6]@4 b5@2 c6@2 d6@3 eb3@2 [f3,g5]@4 [g2,eb6]@4 d6@2 eb6@2 ab3@2 g3@2 [f3,g5]@4, ~@115 eb3@4 d3@2 ~@11 g3@4 f6@4 ~@4]/3", // G5 C5 Fsus2 Cm Fsus2
  R: "g3@2 f3@2 ab6@2 g6@2 f3@2 eb3@2 g6@2 f6@2 eb3@2 d3@2 ~ f6@2 eb6@2 d6@4 eb6@2 d6@2 c6@4 ~@11, g6@4 eb3@4 f6@4 d3@4 eb6@4 ~ c3@4 ~@23",
  S: "~@9 [g3,g5] [g3,g5]@4 ~@6 [d3,g5] [d3,g5]@4 ~@6 [e3,ab5] [e3,ab5]@4 ~@11 [e3,a5]", T: "[e3,a5] ~@23",
  U: "[~@20 [f3,d5] [f3,d5]@12 [g3,e5] [g3,e5]@12 [g3,g5] [g3,g5]@9 ~@16 [a3,gb5] [a3,gb5]@12 [b3,ab5] [b3,ab5]@10]/2", // Dm C G D E
  V: "~@3 [b3,b5]@9 ~@17 [a3,b5] [a3,b5]@9 ~@9", W: "~@7 [g3,e5] [g3,e5]@12 [a3,f5] [a3,f5]@12 [a3,a5] [a3,a5]@9 ~@5",
  X: "~@11 [bb3,g5] [bb3,g5]@12 ~ [c4,a5]@12 ~ [c4,g5] [c4,g5,d6]@9", // Eb F C5 Csus2
  Y: "[~@42 a3@21 d3@3 d3@29 db3@6 c3@6 b2@6 bb2@6 a2@65 ab2@24 ~@29 c4@6 db4@24 db4@95 c4@11 d4@11]/8",
  Z: "[~ a2@12 bb2@71 a2@12]/2", AA: "[~@12 bb2@71 a2@12 ~]/2", AB: "~@5 bb2@12 a2@6 ~",
  AC: "[~@10 bb2@23 bb2@47 ~ a2@12 ~@3]/2",
  AD: "[~@8 f3@4 g3@4 f3@4 eb3@4 f3@3 eb3@4 d3@4 bb2@4 d3@4 eb3@4 d3@4 eb3@4 f3@4 g3@4 f3@4 eb3@4 f3@4 eb3@4 d3@4 bb2@4 d3@4 eb3@4 d3@3 eb3@4 f3@4 g3@4 f3@4 eb3@4 f3@4 eb3@4 d3@4 bb2@4 d3@4 eb3@4 d3@4 eb3@4 f3@4 g3@4 f3@4 eb3@4 f3@3 eb3@4 d3@4 eb3@4 d3@4 bb2@4 d3@3]/4",
  AE: "[~ bb2@4 a2@4 bb2@4 a2@4 bb2@4 d3@4 bb2@4 a2@47 ~@20]/2",
})).s("gm_cello").gain(0.2)

// chords · cello · soft notes
const cello_soft = note("<~@3 A@3 B C D@2 ~@55 E F G@4 H@2 ~@2>".pickRestart({
  A: "[~@6 gb3@13 f3 e3 eb3 c3 b2]/3", B: "bb2!4", C: "bb2!2 a2 ab2", D: "[e2!3 e2@5]/2",
  E: "~@33 f6@4 g6@4 f6@4 eb6@3", F: "~ f6@3 eb6@4 d6@4 bb5@4 d6@4 eb6@4 d6@4 eb6@4 f6@4 g6@4 f6@4 eb6@4",
  G: "[f6@4 eb6@4 d6@4 bb5@4 d6@4 eb6@4 d6@3 eb6@4 f6@4 g6@4 f6@4 eb6@4 f6@4 eb6@4 d6@4 bb5@4 d6@4 eb6@4 d6@4 eb6@4 f6@4 g6@4 f6@4 eb6@4 f6@3 eb6@4 d6@4 bb5@4 d6@4 eb6@4 d6@4 eb6@4 f6@4 g6@4 f6@4 eb6@4 f6@4 eb6@4 d6@4 bb5@4 d6@4 eb6@4 d6@3 eb6@4 gb6@4 eb6@4 gb6@4 g6@4 gb6@3]/4",
  H: "[~ g6@4 a6@4 g6@4 a6@4 bb6@4 a6@4 bb6@4 a6@47 ~@20]/2",
})).s("gm_cello").gain(0.05)

// other · pizzicato strings · D
const pizzicato_strings_2 = note("<~@26 [d3!3 ~]!2 [bb2!3 ~] ~@43 [~@7 [a2,gb4]@3 ~@2] [~ [a2,gb4]@3 ~@8] ~>")
  .s("gm_pizzicato_strings").gain(0.15)

// chords · cello
const cello_2 = note(`<
  A@3 B@2 ~ C D@3 E@2 ~ F ~@2 G@2 H@8 ~@3 I@2 J@3 K L M N O@2 P Q@2 R S T U@2 V W X Y@5 ~@2 Z@3 AA@2 AB AC@2 ~ AD@4 AE@2
  ~@2
>`.pickRestart({
  A: "[~@12 d4 ~@11 d2 ~@11 e4 ~@11 d2 ~@11 g4 ~@11 d2 ~@11 bb4@24 ~@36, ~@13 d4@23 ~ e4@23 ~ g4@17 ~@66, ~@25 d2@23 ~ d2@23 ~ d2@35 ~@36]/3",
  B: "[~@4 [d2,d4]@4 ~@4 bb2@7 eb2 ~@12]/2", C: "~ f4 bb4 a4 ab4 e4 f4 gb4",
  D: "[~@5 g5 c6 b5 bb5 a5 [gb4,ab5] g4@5 g4@8, g4@10 ~ g5@13]/3", E: "[~@5 e2@3, b3 c4 d4@2, ~ e2@2 e2@2 ~@3]/2",
  F: "[e2,b3] ~@3", G: "[bb4@7 eb4 b2@7 e2 ~@2 d4@2 db4@2 c4@2 b3@2 bb3@6, ~@4 eb4@5 ~@7, ~@4 e2 f2 gb2@2]/2",
  H: "[~@9 b5 c6 b5 g5 b5 g5 gb5 e5 gb5 g5 gb5 g5 b5 c6 b5 g5 b5 g5 gb5 e5 gb5 g5 gb5 g5 b5 c6 b5 g5 b5 g5 gb5 e5 gb5 g5 gb5 g5 b5 c6 b5 g5 b5 g5 gb5 g5 gb5 e5 gb5 e5 d5@36 ~@3, ~@3 gb3@3 e3 d3@3 e3 gb3@3 e3 d3@16 ~]/8",
  I: "[~@13 a5@10 ab5 ~ g5 ~ gb5 ~ f5 ~ e5 ~ eb5 ~ d5 ~ db5 ~ c5 ~ b4 ~ bb4 ~ a4@2 ~@2 a4@2 ~@2 a4 bb4 ~ a4 ~ bb4 ~ a4 ~ d5 ~ c5 ~ d5 ~ c5 ~ d2@2 a4 ~ bb4 ~ a4 ~ d5 ~ c5 ~ d5 ~ c5 ~ bb4 ~ a4 ~ bb4 ~ a4 ~@2 d5, ~@37 d2@16 ~ d2@16 bb4 ~@25]/2",
  J: "[~ c5 ~ eb5@2 d5 ~ db5 ~ c5 ~ b4 ~ bb4 ~ a4 ~ ab4 ~ g4 ~ gb4 ~ f4@8 e4@8 f4@16 ~ f4 ~ f4 ~@5 gb4@2 ~@2 gb4@2 ~@2 gb4@2 ~@2 g4@2 ~@2 ab4@2 ~@3 ab4@2 ~@2 ab4@2 ~@2 ab4 ~ ab4 ~ ab4@2 ~@2 b4@2 ~@2 ab4@2 ~@2 ab4 ~ ab4 ~ ab4@2 ~@2 b4@2 ~@2 [bb2,ab4]@2 ~@21, ~@89 bb2@16 bb2@16 ~@23]/3", // Bb7
  K: "~@20 ab5 ~ a5 ~@14 gb5 ~ g5 ~@8", L: "~ gb5@2 g5@2 ~@4 ab5@2 a5 ~@5 bb5 ~@2 b5 ~@27",
  M: "db4@12 d4@2 ~ eb4@2 e4 ~ f4 ~@5 d4 ~ e4 ~@5 c4 ~ d4 ~@5 bb3 ~ c4 ~@4",
  N: "~ [a3,c4]@2 ~@7 [g3,c4]@2 ~@6 [f3,c4]@2 ~@6 [f3,bb3]@2 ~@6 [gb3,b3]@2 ~@12", // Am C5 F5 Bb5 B5
  O: "[~@5 gb6 ~ gb6 ~ b5 ~ b5 ~ bb5 ~ g6 ~ gb6 ~ gb4@8 f4@8 gb4@8 f4@8 ~ b4 ~ bb4 ~ b4 ~ bb4 ~ a4 ~ ab4 ~ a4 ~ ab4 ~ g4 ~ gb4 ~ g4 ~ gb4 ~ f4 ~ e4 ~ f4 ~ e4 ~ eb4 ~ d4 ~@2 db4 ~ c4 ~ b3 ~ bb3, ~@15 gb4@4 gb6@2 ~@75]/2",
  P: "~ a3 ~ ab3 ~ f2@2 bb2@2 a2@2 bb2@2 c3@2 g2@2 db3@2 c3@2 db3@2 eb3@2 f2@2 f3@2 gb3@2 f3@2 eb3@2 ~ f3@2 eb3@2 db3@2 eb3@2 db3@2 c3@2",
  Q: "[db3@2 c3@2 bb2@2 a2@8 ab2@8 g2@4 ~@5 g4@4 c5@4 b4@2 c5@2 d5@4 g4@4 eb5@4 d5@2 eb5@2 f5@4 g4@4 g5@4 ab5@2 ~ g5@2 f5@4 g5@2 f5@2 [c3,eb5]@4 [b2,f5]@2 [c3,eb5]@2 [d3,d5]@4, ~@20 g2 ~@3]/2", // Cm Bdim Cm D
  R: "eb5@2 d5@2 [eb3,c5]@4 d3@2 eb3@2 f3@4 g2@4 ~ g3@4 ab3@2 g3@2 f3@4 g3@2 f3@2 eb3@4 f3@2 eb3@2 d3@3, g2 ~@11", // Cm
  S: "~ eb3@2 d3@2 c3@4 [c3,e5] [c3,e5]@4 ~@6 [bb2,d5] [bb2,d5]@4 ~@6 [bb2,d5] [bb2,d5,e5]@4 ~@11 [a2,db5]", // C Bb Em7b5 A
  T: "[a2,db5,e5] ~@23", // A
  U: "[~@20 [d3,a4] [d3,a4]@12 [d3,bb4] [d3,bb4]@12 [d3,c5] [d3,c5,e5]@9 ~@16 [d3,db5] [d3,db5]@12 [d3,d5] [d3,d5]@10]/2", // D5 Gm D7 C Dmaj7 D
  V: "~@3 [d3,b4,e5]@9 ~@17 [d3,b4] [d3,b4,f5]@9 ~@9", // E7 G Bdim
  W: "~@7 [e3,bb4] [e3,bb4]@12 [e3,c5] [e3,c5]@12 [e3,d5] [e3,d5]@9 ~@5", // Edim C E7
  X: "~@11 [e3,d5] [e3,d5]@12 ~ [e3,e5]@12 ~ [a2,bb5] e3@5 e3@3 ~, ~@13 [a2,bb5]@3", // E7 E Bbmaj7
  Y: "[~@42 [d2,a2]@12 ~@12 gb2@83 f2@23 e2@35 ~@33]/5", Z: "[~@14 a2@20 d2@3 d2@24 g2@71 d2@12]/3",
  AA: "[~@12 g2@71 d2@12 ~]/2", AB: "~@5 g2@12 d2@6 ~", AC: "[~@10 g2@23 g2@47 ~ d2@12 ~@3]/2",
  AD: "[~@8 d3@4 eb3@4 d3@4 bb2@4 d3@3 bb2@4 a2@4 g2@4 a2@4 bb2@4 a2@4 bb2@4 d3@4 eb3@4 d3@4 bb2@4 d3@4 bb2@4 a2@4 g2@4 a2@4 bb2@4 a2@3 bb2@4 d3@4 eb3@4 d3@4 bb2@4 d3@4 bb2@4 a2@4 g2@4 a2@4 bb2@4 a2@4 bb2@4 d3@4 eb3@4 d3@4 bb2@4 d3@3 bb2@4 a2@4 bb2@4 a2@4 g2@4 a2@3]/4",
  AE: "[~ g2@4 gb2@4 g2@4 gb2@4 eb2@4 gb2@4 eb2@4 d2@47 ~@20]/2",
})).s("gm_cello").gain(0.2)

// chords · cello · soft notes
const cello_soft_2 = note("<~@65 A B C@4 D@2 E@2>".pickRestart({
  A: "~@33 d6@4 eb6@4 d6@4 bb5@3", B: "~ d6@3 bb5@4 a5@4 g5@4 a5@4 bb5@4 a5@4 bb5@4 d6@4 eb6@4 d6@4 bb5@4",
  C: "[d6@4 bb5@4 a5@4 g5@4 a5@4 bb5@4 a5@3 bb5@4 d6@4 eb6@4 d6@4 bb5@4 d6@4 bb5@4 a5@4 g5@4 a5@4 bb5@4 a5@4 bb5@4 d6@4 eb6@4 d6@4 bb5@4 d6@3 bb5@4 a5@4 g5@4 a5@4 bb5@4 a5@4 bb5@4 d6@4 eb6@4 d6@4 bb5@4 d6@4 bb5@4 a5@4 g5@4 a5@4 bb5@4 a5@3 bb5@4 d6@4 bb5@4 d6@4 eb6@4 d6@3]/4",
  D: "[~ eb6@4 gb6@4 eb6@4 gb6@4 g6@4 gb6@4 g6@4 d6@47 ~@20]/2", E: "[~@27 [d2,d4]@47 ~@22]/2",
})).s("gm_cello").gain(0.05)

// other · pizzicato strings
const pizzicato_strings_3 = note("<~@26 A@2 B ~@6 C ~@36 D E ~>".pickRestart({
  A: "g2!3 ~", B: "d2!3 ~", C: "~@7 f5!2 ~@3", D: "~@7 [d2,a3]@3 ~@2", E: "~ [d2,a3]@3 ~@8",
})).s("gm_pizzicato_strings").gain(0.15)

// other · pizzicato strings
const pizzicato_strings_4 = note(`<
  ~@26
  [gb4!3 ~]!2
  [f4!3 ~]
  ~@6
  [~@7 d5!2 ~@3]
  ~
  [~@5 c4@2 f4@2 ~@5 c4@2 f4@2 ~@4 c4@2 f4@2 ~@4 bb3@2 f4@2 ~@14]
  ~@37
>`).s("gm_pizzicato_strings").gain(0.2)

// other · viola
const viola_2 = note(`<
  A@3 B ~@2 C@2 D@2 ~ E F G@3 H I ~ J@7 ~@2 K L M N O P Q@2 ~@3 R S T@2 U V W X@2 Y Z AA ~ AB@4 AC AD@2 AE@2 AF@2 AG
  AH@2 ~ AI@7 ~
>`.pickRestart({
  A: "[~@12 f4 f4@23 g4 g4@23 e4 e4@47 ~@36]/3", B: "~ gb3 ~@2", C: "db4!4", D: "[c4!3 c4@5]/2", E: "~@7 c5 c5@8",
  F: "~ b5 a5 g5 gb5 e5 d5 c5 b4 a4 g4 a4 b4 c5 d5 c5", G: "[b4@7 e4 e4@10 eb4@2 d4@2 db4@2 c4@2 b3@22]/3",
  H: "bb3@6 ~@2 b3@7 e3", I: "e3 eb3 d3 db3",
  J: "[~@15 gb4@3 b4@4 a4@4 b4@4 c5@6 gb4@6 d5@4 c5@4 d5@4 e5@6 gb4@6 gb5@96 ~@6]/7",
  K: "~@38 a4 ~ a4 ~ d4 ~ d4 ~ db4 ~",
  L: "bb4 ~ a4 ~ ab4 ~ g4 ~ gb4 ~@2 f4 ~ e4 ~ eb4 ~ d4 ~ db4 ~ c4 ~ db4 ~@5 d4@2 ~@2 eb4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4 ~ eb4",
  M: "~ e4 ~ eb4 ~@2 d4@2 ~@2 d4 ~ d4 ~ eb4@2 ~@2 g4@2 ~@2 d4@2 ~@2 d4 ~ d4 ~ eb4@2 ~@2 g4@2 ~@2 d4@2 ~@8",
  N: "~@25 f5 ~ f5 ~ bb4 ~ bb4 ~ a4 ~ gb5 ~ f5 ~ e5 ~@2 eb5 ~ d5 ~ db5 ~",
  O: "c5 ~ b4 ~ bb4 ~ a4 ~ ab4 ~ a4 ~@5 bb4@2 ~@2 b4@2 ~@2 c5@2 ~@2 c5@2 ~@2 c5 ~ b4 ~@2 c5 ~ b4 ~ bb4@2 ~@2 bb4 ~ bb4",
  P: "~ b4@2 ~@2 eb5@2 ~@2 bb4@2 ~@2 bb4 ~ bb4 ~ b4@2 ~@2 eb5@2 ~@2 bb4@2 ~@21",
  Q: "[~@29 bb4 ~ a4 ~@13 ab4@2 g4@2 ~@4 bb4@2 a4@2 ~@4 c5@2 b4@2 ~@31]/2",
  R: "d4@4 db4@2 ~@2 db4 ~ db4 ~ d4@2 ~@2 d4@2 ~@2 c4@2 ~@2 c4 ~ c4 ~ db4@2 ~@2 db4@2 ~@2 bb3 ~ b3 ~@2 ab3 ~ a3 ~ gb3 ~ g3",
  S: "~ e3 ~ f3 ~@44",
  T: "[~@43 g3@4 c4@4 b3@2 c4@2 d4@4 g3@4 eb4@4 d4@2 eb4@2 f4@4 ~ g3@4 g4@4 ab4@2 g4@2 f4@4 g4@2 f4@2]/2",
  U: "eb4@2 f4 eb4 d4@2 eb4 d4 c4@2 ~@14", V: "~@9 g4 g4@4 ~@6 d4 d4@4 ~@6 d4 d4@4 ~@11 c4", W: "[c4,e4] ~@23",
  X: "[~@20 d4 d4@12 e4 e4@12 e4 e4@9 ~@16 gb4 gb4@12 ab4 ab4@10]/2", Y: "~@3 ab4@9 ~@17 f4 f4@9 ~@9",
  Z: "~@7 e4 e4@12 f4 f4@12 f4 f4@9 ~@5", AA: "~@11 g4 g4@12 ~ a4@12 ~ a4 bb4@9",
  AB: "[~@18 bb3@20 eb3@3 eb3@12 e3@12 f3@21 e3@3 e3@20 eb3@3 eb3@24 e3@24 ab3@23 a3@9]/4", AC: "~@3 bb3@35 ~ a3@9",
  AD: "[~@3 ab3@11 a3@47 ~ bb3@23 a3@11]/2", AE: "[~@13 a3@21 d3@3 d3@23 db3@24 d3@12]/2",
  AF: "[~@12 a3@20 d3@3 d3@24 db3@24 d3@12 ~]/2", AG: "~@10 a3@21 d3@3 d3@12 ~@2",
  AH: "[~@10 a3@12 g3@23 f3@24 eb3@12 d3@12 ~@3]/2",
  AI: "[~@20 a4@11 d5@8 c5@8 d5@8 eb5@12 a4@12 f5@8 eb5@8 f5@7 g5@12 g4@12 a5@8 bb5@8 a5@8 g5@8 a5@8 g5@7 gb5@142 ~@21]/7",
})).s("gm_viola").gain(0.2)

// chords · pizzicato strings · Bm Bb
const pizzicato_strings_5 = note(`<
  ~@26
  [[b3,d4]!3 ~]
  [[bb3,d4]!3 ~]!2
  ~@6
  [~@7 f4!2 ~@3]
  ~
  [~ d3@2 g3@2 ~@5 d3@2 g3@2 ~@4 d3@2 f3@2 ~@4 d3@2 f3@2 ~@18]
  ~@37
>`).s("gm_pizzicato_strings").gain(0.15)

stack(
  viola, viola_soft, pizzicato_strings, cello, cello_soft, pizzicato_strings_2, cello_2, cello_soft_2,
  pizzicato_strings_3, pizzicato_strings_4, viola_2, pizzicato_strings_5
)

More by Dmitri Shostakovich