Strudelify
Waltz no. 2 cover art

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, A@4 for four bars: 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@2 X Y Z AA AB AC R AD AE AF W AG AH AI ~@8 N O
  P Q ~ AJ@2 AK AL AM@2 AN AO C AP AQ AR AS AT AU AV AW@2 AX AY AZ@2 BA BB AD@3 BC BD BE BF BG BH BI BH BJ AH BK BL BG
  BH BI BH BM BN BO BP BQ BR BS BR BS BT BU BT BV BR BS BR BS BW BX BY BZ AW ~@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 CA R S C T U V R W@2 X Y Z AA AB AC R AD AE AF W AG AH AI J K L M J K L M N O P CB CC
>`.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: "d5@11 c5@5", Y: "b4",
  Z: "b4@5 g4@5 ~ b4@5", AA: "d5@5 b4@5 ~ d5@5", AB: "f5@5 g5@5 ~ ab5@5", AC: "gb5", AD: "eb6", AE: "d6@11 c6@5",
  AF: "bb5@11 ab5@5", AG: "d6", AH: "c6@11 bb5@5", AI: "bb5@15 ~", AJ: "eb5", AK: "eb5@5 d5@5 ~ c5@5",
  AL: "bb4@5 g4@5 ~ bb4@5", AM: "d5", AN: "c5@5 bb4@5 ~ g4@5", AO: "eb4@5 f4@5 ~ g4@5", AP: "bb4",
  AQ: "bb4@5 ab4@5 ~ g4@5", AR: "f4@5 eb4@5 ~ f4@5", AS: "g4@11 bb4@5", AT: "f4@11 bb4@5", AU: "g5@11 bb5@5",
  AV: "eb6@11 f6@5", AW: "g6", AX: "g6@5 f6@5 ~ eb6@5", AY: "d6@5 bb5@5 ~ d6@5", AZ: "f6", BA: "f6@5 eb6@5 ~ d6@5",
  BB: "c6@5 g5@5 ~ bb5@5", BC: "f6@5 eb6@5 ~ f6@5", BD: "g6@11 eb6@5", BE: "bb5@5 c6@5 ~ d6@5",
  BF: "eb6@5 f6@5 ~ eb6@5", BG: "db6@5 c6@5 ~ b5@5", BH: "c6@11 eb5@5", BI: "eb5@5 d5@5 ~ eb5@5",
  BJ: "eb5@5 db6@5 ~ c6@5", BK: "a5@11 bb5@5", BL: "f6@11 eb6@5", BM: "eb5@5 f5@5 ~ g5@5", BN: "ab5@11 bb5@5",
  BO: "c6@10 ~ c6@5", BP: "d6@5 c6@5 ~ d6@5", BQ: "eb6@11 db6@5", BR: "c6@3 b5@2 c6 ~@2 f6 ~@2 eb6 ~ c6 ~@2",
  BS: "ab5@3 g5@2 ab5 ~@2 db6 ~@2 c6 ~ ab5 ~@2", BT: "eb5@3 d5@2 eb5 ~@2 g5 ~@2 bb5 ~ db6 ~@2",
  BU: "f6@3 eb6@2 db6 ~@2 bb5 ~@2 g5 ~ f5 ~@2", BV: "f6@3 eb6@2 db6 ~@2 bb5 ~@2 g5 ~ eb5 ~@2",
  BW: "f5@3 e5@2 f5 ~@2 db6 ~@2 bb5 ~ ab5 ~@2", BX: "f5@3 e5@2 f5 ~@2 g5 ~@2 ab5 ~ bb5 ~@2",
  BY: "f5@3 g5@2 ab5 ~@2 bb5 ~@2 c6 ~ d6 ~@2", BZ: "eb6@3 f6@2 eb6 ~@2 d6 ~@2 eb6 ~ f6 ~@2", CA: "~@5 g5@11",
  CB: "c6@3 ~@8 d6@5", CC: "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 Y AB AM AF AJ AK AJ AN AO AP AQ AM AR AS AR AT AU AV AW AX AR AS AR AY AZ BA
  BB BC Y C@4 A@6 L@8 C@6 B@2 C ~@8 H I J U BD BE BF BE BG@4 P Q@4 P BG BH BG BE BI BJ BK P BL BM ~@8 D E F BN BO
>`.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",
  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: "bb5@11 g5@5", AN: "c5@5 db5@5 ~ eb5@5", AO: "f5@11 g5@5", AP: "ab5@10 ~ ab5@5", AQ: "bb5@5 ab5@5 ~ bb5@5",
  AR: "c6@11 eb5@5", AS: "eb5@5 d5@5 ~ eb5@5", AT: "eb5@5 db6@5 ~ c6@5", AU: "c6@11 bb5@5", AV: "a5@11 bb5@5",
  AW: "f6@11 eb6@5", AX: "db6@5 c6@5 ~ b5@5", AY: "eb5@5 f5@5 ~ g5@5", AZ: "ab5@11 bb5@5", BA: "c6@11 c6@5",
  BB: "d6@5 c6@5 ~ d6@5", BC: "eb6@15 ~", BD: "~@5 g4@11", BE: "c5", BF: "c5@11 d5@5", BG: "g4", BH: "gb4",
  BI: "g4@11 g4@5", BJ: "f4@11 f4@5", BK: "c4@15 ~", BL: "d4@11 d4@5", BM: "eb4@15 ~", BN: "c5@3 ~@8 g5@5",
  BO: "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