Strudelify

Waltz no. 2

Dmitri Shostakovich

KeyE♭ majorTempo180 bpm
0:00/0:00
// Waltz no. 2 — Dmitri Shostakovich
// 180 bpm, 3/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5377209; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 219 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · flute
const flute = note(`<
  A@10 B@8 A@2 C D E F G H I J K L M J K L M N O P Q ~@3 R S C T U V R W X Y Z AA AB AC AD AE AF AG AH W AI AJ AK ~@8 N
  O P Q ~ AL@2 AM AN AO@2 AP AQ C AR AS AT AU AV AW AX AY@2 AZ BA BB@2 BC BD AF@3 BE BF BG BH BI BJ BK BJ BL AJ BM BN BI
  BJ BK BJ BO BP BQ BR BS BT BU BT BU BV BW BV BX BT BU BT BU BY BZ CA CB CC ~@4 A@6 B@8 A@2 C D E F G H I J K L M J K L
  M N O P Q CD R S C T U V R W X Y Z AA AB AC AD AE AF AG AH W AI AJ AK J K L M J K L M N O P CE CF
>`.pickRestart({
  A: "~@5 g4@3 ~@3 g4@3 ~@2", B: "~@5 ab4@3 ~@3 ab4@3 ~@2", C: "c5", D: "g4@11 g4@5", E: "f4@11 f4@5", F: "c4@15 ~",
  G: "f4", H: "d4@11 d4@5", I: "eb4@15 ~", J: "~@5 eb5@3 ~@3 f5@3 ~@2", K: "g5@3 ~@2 g5@3 f5@3 g5@2 ab5@3",
  L: "f5@3 ~@2 f5@3 eb5@3 f5@2 g5@3", M: "eb5@3 ~@8 g5@3 ~@2", N: "~@5 c6@3 ~@3 d6@3 ~@2",
  O: "eb6@3 ~@2 eb6@3 d6@3 eb6@2 f6@3", P: "d6@3 ~@2 d6@3 c6@3 d6@2 eb6@3", Q: "c6@3 ~@13", R: "g5", S: "eb5@11 d5@5",
  T: "c5@5 c5@5 ~ d5@5", U: "eb5@5 c5@5 ~ eb5@5", V: "g5@11 ab5@5", W: "f5@15 ~", X: "f5", Y: "d5@11 c5@5", Z: "b4",
  AA: "b4@5 g4@5 ~ b4@5", AB: "d5@5 b4@5 ~ d5@5", AC: "f5@5 g5@5 ~ ab5@5", AD: "gb5", AE: "g5@15 ~", AF: "eb6",
  AG: "d6@11 c6@5", AH: "bb5@11 ab5@5", AI: "d6", AJ: "c6@11 bb5@5", AK: "bb5@15 ~", AL: "eb5", AM: "eb5@5 d5@5 ~ c5@5",
  AN: "bb4@5 g4@5 ~ bb4@5", AO: "d5", AP: "c5@5 bb4@5 ~ g4@5", AQ: "eb4@5 f4@5 ~ g4@5", AR: "bb4",
  AS: "bb4@5 ab4@5 ~ g4@5", AT: "f4@5 eb4@5 ~ f4@5", AU: "g4@11 bb4@5", AV: "f4@11 bb4@5", AW: "g5@11 bb5@5",
  AX: "eb6@11 f6@5", AY: "g6", AZ: "g6@5 f6@5 ~ eb6@5", BA: "d6@5 bb5@5 ~ d6@5", BB: "f6", BC: "f6@5 eb6@5 ~ d6@5",
  BD: "c6@5 g5@5 ~ bb5@5", BE: "f6@5 eb6@5 ~ f6@5", BF: "g6@11 eb6@5", BG: "bb5@5 c6@5 ~ d6@5",
  BH: "eb6@5 f6@5 ~ eb6@5", BI: "db6@5 c6@5 ~ b5@5", BJ: "c6@11 eb5@5", BK: "eb5@5 d5@5 ~ eb5@5",
  BL: "eb5@5 db6@5 ~ c6@5", BM: "a5@11 bb5@5", BN: "f6@11 eb6@5", BO: "eb5@5 f5@5 ~ g5@5", BP: "ab5@11 bb5@5",
  BQ: "c6@10 ~ c6@5", BR: "d6@5 c6@5 ~ d6@5", BS: "eb6@11 db6@5", BT: "c6@3 b5@2 c6 ~@2 f6 ~@2 eb6 ~ c6 ~@2",
  BU: "ab5@3 g5@2 ab5 ~@2 db6 ~@2 c6 ~ ab5 ~@2", BV: "eb5@3 d5@2 eb5 ~@2 g5 ~@2 bb5 ~ db6 ~@2",
  BW: "f6@3 eb6@2 db6 ~@2 bb5 ~@2 g5 ~ f5 ~@2", BX: "f6@3 eb6@2 db6 ~@2 bb5 ~@2 g5 ~ eb5 ~@2",
  BY: "f5@3 e5@2 f5 ~@2 db6 ~@2 bb5 ~ ab5 ~@2", BZ: "f5@3 e5@2 f5 ~@2 g5 ~@2 ab5 ~ bb5 ~@2",
  CA: "f5@3 g5@2 ab5 ~@2 bb5 ~@2 c6 ~ d6 ~@2", CB: "eb6@3 f6@2 eb6 ~@2 d6 ~@2 eb6 ~ f6 ~@2", CC: "g6@15 ~",
  CD: "~@5 g5@11", CE: "c6@3 ~@8 d6@5", CF: "eb6@5 ~@11",
})).s("gm_flute").gain(0.4)

// other · flute
const flute_2 = note(`<
  A@10 B@8 A@2 C@2 B@4 C D E F G D E F G H I J K C@9 L@4 C@6 M N O P Q R S H I J T H I J T H I J U V ~@14 W X Y@2 Z AA
  AB@2 AC AD M@3 AE AF AG AH AI AJ AK AJ AL AM AN AO AF AJ AK AJ AP AQ AR AS AO AT AU AT AV AW AX AY AZ AT AU AT BA BB
  BC BD BE AM C@4 A@6 L@8 C@6 B@2 C ~@8 H I J U BF BG BH BG BI@4 BJ Q@4 BJ BI BK BI BG BL BM BN BJ BO BP ~@8 D E F BQ BR
>`.pickRestart({
  A: "~@5 eb4@3 ~@3 eb4@3 ~@2", B: "~@5 f4@3 ~@3 f4@3 ~@2", C: "~@5 g4@3 ~@3 g4@3 ~@2", D: "~@5 c5@3 ~@3 d5@3 ~@2",
  E: "eb5@3 ~@2 eb5@3 d5@3 eb5@2 f5@3", F: "d5@3 ~@2 d5@3 c5@3 d5@2 eb5@3", G: "c5@3 ~@8 eb5@3 ~@2",
  H: "~@5 eb5@3 ~@3 f5@3 ~@2", I: "g5@3 ~@2 g5@3 f5@3 g5@2 ab5@3", J: "f5@3 ~@2 f5@3 eb5@3 f5@2 g5@3",
  K: "eb5@3 ~@2 g4@3 ~@3 g4@3 ~@2", L: "~@5 ab4@3 ~@3 ab4@3 ~@2", M: "eb5", N: "d5@11 c5@5", O: "bb4@11 ab4@5",
  P: "f4@15 ~", Q: "d5", R: "c5@11 bb4@5", S: "bb4@15 ~", T: "eb5@3 ~@8 g5@3 ~@2", U: "eb5@3 ~@13", V: "~@11 bb4@5",
  W: "g4@11 bb4@5", X: "eb5@11 f5@5", Y: "g5", Z: "g5@5 f5@5 ~ eb5@5", AA: "d5@5 bb4@5 ~ d5@5", AB: "f5",
  AC: "f5@5 eb5@5 ~ d5@5", AD: "c5@5 g4@5 ~ bb4@5", AE: "f5@5 eb5@5 ~ f5@5", AF: "g5@11 eb5@5", AG: "bb4@5 c5@5 ~ d5@5",
  AH: "eb5@5 f5@5 ~ eb5@5", AI: "db5@5 c5@5 ~ b4@5", AJ: "ab5@11 c5@5", AK: "c5@5 b4@5 ~ c5@5", AL: "c5@5 f5@10 ~",
  AM: "g5@15 ~", AN: "f5@15 ~", AO: "bb5@11 g5@5", AP: "c5@5 db5@5 ~ eb5@5", AQ: "f5@11 g5@5", AR: "ab5@10 ~ ab5@5",
  AS: "bb5@5 ab5@5 ~ bb5@5", AT: "c6@11 eb5@5", AU: "eb5@5 d5@5 ~ eb5@5", AV: "eb5@5 db6@5 ~ c6@5", AW: "c6@11 bb5@5",
  AX: "a5@11 bb5@5", AY: "f6@11 eb6@5", AZ: "db6@5 c6@5 ~ b5@5", BA: "eb5@5 f5@5 ~ g5@5", BB: "ab5@11 bb5@5",
  BC: "c6@11 c6@5", BD: "d6@5 c6@5 ~ d6@5", BE: "eb6@15 ~", BF: "~@5 g4@11", BG: "c5", BH: "c5@11 d5@5", BI: "g4",
  BJ: "f4", BK: "gb4", BL: "g4@11 g4@5", BM: "f4@11 f4@5", BN: "c4@15 ~", BO: "d4@11 d4@5", BP: "eb4@15 ~",
  BQ: "c5@3 ~@8 g5@5", BR: "g5@5 ~@11",
})).s("gm_flute").gain(0.4)

// other · english horn
const english_horn = note(`<
  ~@4 A B C D E F A G@2 H I J K L M A N O P G Q R S ~@8 T U V W ~@3 A B C D E F A G@2 H I J K L M A ~@7 T U V X T U V X
  Y Z AA AB AC A@2 AD AE S@2 AF AG AH A AI AJ AK AL AM AN N@2 AO AP Q@2 AQ AR A@2 AH AS AT AU AV AW AX ~@108
>`.pickRestart({
  A: "g4", B: "eb4@11 d4@5", C: "c4", D: "c4@5 c4@5 ~ d4@5", E: "eb4@5 c4@5 ~ eb4@5", F: "g4@11 ab4@5", G: "f4",
  H: "d4@11 c4@5", I: "b3", J: "b3@5 g3@5 ~ b3@5", K: "d4@5 b3@5 ~ d4@5", L: "f4@5 g4@5 ~ ab4@5", M: "gb4", N: "eb5",
  O: "d5@11 c5@5", P: "bb4@11 ab4@5", Q: "d5", R: "c5@11 bb4@5", S: "bb4", T: "~@5 c4@3 ~@3 d4@3 ~@2",
  U: "eb4@3 ~@2 eb4@3 d4@3 eb4@2 f4@3", V: "d4@3 ~@2 d4@3 c4@3 d4@2 eb4@3", W: "c4@3 ~@13", X: "c4@3 ~@8 eb4@3 ~@2",
  Y: "~@5 eb4@3 ~@3 f4@3 ~@2", Z: "g4@3 ~@2 g4@3 f4@3 g4@2 ab4@3", AA: "f4@3 ~@2 f4@3 eb4@3 f4@2 g4@3",
  AB: "eb4@3 ~@13", AC: "~@11 g4@5", AD: "g4@5 bb4@5 ~ ab4@5", AE: "g4@5 eb4@5 ~ g4@5", AF: "ab4@5 g4@5 ~ eb4@5",
  AG: "c4@5 d4@5 ~ eb4@5", AH: "ab4", AI: "g4@5 f4@5 ~ e4@5", AJ: "f4@5 eb4@5 ~ f4@5", AK: "eb4@11 bb3@5",
  AL: "d4@11 g4@5", AM: "eb4@11 g4@5", AN: "g4@11 bb4@5", AO: "eb5@5 d5@5 ~ c5@5", AP: "bb4@5 g4@5 ~ bb4@5",
  AQ: "d5@5 c5@5 ~ bb4@5", AR: "ab4@5 eb4@5 ~ g4@5", AS: "ab4@5 g4@5 ~ ab4@5", AT: "bb4@11 g4@5",
  AU: "d4@5 eb4@5 ~ f4@5", AV: "g4@5 ab4@5 ~ g4@5", AW: "f4@5 eb4@5 ~ d4@5", AX: "eb4@11 ~@5",
})).s("gm_english_horn").gain(0.4)

// other · oboe
const oboe = note(`<
  ~@126 A B A C D E F G H I H I J K L M N ~@39 O P Q R S T U V W@2 X Y Z AA AB V@2 AC F AD X AE N V AF AG AH AI AF AG AH
  AI AJ AK AL AM AN
>`.pickRestart({
  A: "c5@11 eb4@5", B: "eb4@5 d4@5 ~ eb4@5", C: "eb4@5 db5@5 ~ c5@5", D: "c5@11 bb4@5", E: "a4@11 bb4@5",
  F: "f5@11 eb5@5", G: "db5@5 c5@5 ~ b4@5", H: "c5@3 b4@2 c5 ~@2 f5 ~@2 eb5 ~ c5 ~@2",
  I: "ab4@3 g4@2 ab4 ~@2 db5 ~@2 c5 ~ ab4 ~@2", J: "f4@3 e4@2 f4 ~@2 db5 ~@2 bb4 ~ ab4 ~@2",
  K: "f4@3 e4@2 f4 ~@2 g4 ~@2 ab4 ~ bb4 ~@2", L: "f4@3 g4@2 ab4 ~@2 bb4 ~@2 c5 ~ d5 ~@2",
  M: "eb5@3 f5@2 eb5 ~@2 d5 ~@2 eb5 ~ f5 ~@2", N: "eb5@11 d5@5", O: "~@5 b4@11", P: "c5", Q: "g4@11 f4@5", R: "eb4",
  S: "eb4@5 eb4@5 ~ g4@5", T: "c5@5 g4@5 ~ c5@5", U: "eb5@11 f5@5", V: "eb5", W: "d5", X: "ab4", Y: "g4",
  Z: "g4@5 f4@5 ~ g4@5", AA: "b4@5 g4@5 ~ b4@5", AB: "d5@5 f5@5 ~ f5@5", AC: "g5", AD: "d5@11 c5@5", AE: "f5",
  AF: "~@5 c5@3 ~@3 d5@3 ~@2", AG: "eb5@3 ~@2 eb5@3 d5@3 eb5@2 f5@3", AH: "d5@3 ~@2 d5@3 c5@3 d5@2 eb5@3",
  AI: "c5@3 ~@8 eb5@3 ~@2", AJ: "~@5 eb5@3 ~@3 f5@3 ~@2", AK: "g5@3 ~@2 g5@3 f5@3 g5@2 ab5@3",
  AL: "f5@3 ~@2 f5@3 eb5@3 f5@2 g5@3", AM: "eb5@3 ~@8 g5@5", AN: "c6@5 ~@11",
})).s("gm_oboe").gain(0.4)

// other · oboe · soft notes
const oboe_soft = note("<~@143 A@4 ~@16 B C D E F G H I J K L I J K L I J K M ~@37>".pickRestart({
  A: "~@5 eb4@3 ~@3 eb4@3 ~@2", B: "eb5", C: "d5@11 c5@5", D: "bb4@11 ab4@5", E: "f4", F: "d5", G: "c5@11 bb4@5",
  H: "bb4", I: "~@5 c5@3 ~@3 d5@3 ~@2", J: "eb5@3 ~@2 eb5@3 d5@3 eb5@2 f5@3", K: "d5@3 ~@2 d5@3 c5@3 d5@2 eb5@3",
  L: "c5@3 ~@8 eb5@3 ~@2", M: "c5@3 ~@2 eb5@3 ~@3 eb5@3 ~@2",
})).s("gm_oboe").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A@14 B@4 A@2 C@2 A@2 D@2 C E C D C E C D C E C D C@10 F@8 C@4 A@2 D@2 C E C D C E C D C E C D G H C@4 I@22 A D I J K L
  M N M O P Q R S M N M T U V W X Y Z Y Z AA AB AA AC Y Z Y AD AE AF AG AH AI ~@4 AJ AK AL AM AN AO AJ AP@2 AQ AR AS AT
  AU AV AJ C@2 A@2 D@2 C E C D C E C D C E C D A AW AX@6 AY@8 AX@2 C@2 A@2 D@2 C E C D C E C D C E C D AZ BA
>`.pickRestart({
  A: "~@5 c4@3 ~@3 c4@3 ~@2", B: "~@5 b3@3 ~@3 b3@3 ~@2", C: "~@5 eb4@3 ~@3 eb4@3 ~@2", D: "~@5 d4@3 ~@3 d4@3 ~@2",
  E: "~@5 c4@3 ~@3 d4@3 ~@2", F: "~@5 f4@3 ~@3 f4@3 ~@2", G: "c4@3 ~@2 g3@3 ~@3 eb3@3 ~@2", H: "c3@3 ~@8 bb3@5",
  I: "~@5 bb3@3 ~@3 bb3@3 ~@2", J: "~@5 ab3@3 ~@3 ab3@3 ~@2", K: "bb3@5 ~@11", L: "eb3@5 ~@11", M: "eb4@11 ab3@5",
  N: "ab3@5 ab3@11", O: "ab3@5 f4@5 ~ eb4@5", P: "eb4@11 db4@5", Q: "c4@11 db4@5", R: "g4@11 g4@5",
  S: "f4@5 eb4@5 ~ d4@5", T: "ab3@5 ab3@5 ~ bb3@5", U: "db4@11 eb4@5", V: "eb4@11 eb4@5", W: "f4@11 f4@5",
  X: "g4@11 eb4@5", Y: "ab2@5 ab3@3 ~@3 ab3@3 ~@2", Z: "eb3@5 ab3@3 ~@3 ab3@3 ~@2", AA: "bb2@5 bb3@3 ~@3 bb3@3 ~@2",
  AB: "f3@5 c4@3 ~@3 db4@3 ~@2", AC: "f3@5 g3@3 ~@3 g3@3 ~@2", AD: "eb3@5 ab3@3 ~@3 bb3@3 ~@2",
  AE: "db3@5 ab3@3 ~@3 ab3@3 ~@2", AF: "c3@5 ab3@3 ~@3 ab3@3 ~@2", AG: "bb2@5 ab3@3 ~@3 ab3@3 ~@2", AH: "eb3",
  AI: "bb3", AJ: "g4", AK: "eb4@11 d4@5", AL: "c4", AM: "c4@5 c4@5 ~ d4@5", AN: "eb4@5 c4@5 ~ eb4@5", AO: "g4@11 ab4@5",
  AP: "f4", AQ: "d4@11 c4@5", AR: "b3", AS: "b3@5 g3@5 ~ b3@5", AT: "d4@5 b3@5 ~ d4@5", AU: "f4@5 g4@5 ~ ab4@5",
  AV: "gb4", AW: "~@5 eb4@5 ~ d4@5", AX: "~@5 eb3 ~@2 g3 ~@2 c4 ~ eb4 ~@2", AY: "~@5 f3 ~@2 ab3 ~@2 d4 ~ f4 ~@2",
  AZ: "~@11 b3@5", BA: "c4@5 ~@11",
})).s("gm_french_horn").gain(0.4)

stack(flute, flute_2, english_horn, oboe, oboe_soft, french_horn)

More by Dmitri Shostakovich