Strudelify

Symphony No.4 Op.36

Tchaikovsky

KeyF majorTempo144 bpm
0:00/0:00
// Symphony No.4 Op.36 — Tchaikovsky
// 144 bpm, 2/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: Transcription provider: pdmx. https://musescore.com/score/5382830; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Violin I"
const pizzicato_strings = note(`<
  A B C@2 D E F G A B C@2 D E H I J K L M J K L M N O P Q R O S T U V W H X Y Z AA AB AC AD AE AB AC AD AE AF AG AH AI
  AF AG AH AI AJ ~@2 AK AJ ~@2 AL AM AN AO AP AQ AR AS AT AU AV AW ~ A B C@2 D E F G A B C AX F AY AZ BA F BB BC BD BE
  BF BG BH BI BJ ~ BK ~ BL BM BK ~ BL BM BN BO BP BQ BR BS BT A BU BV BW ~@11 BX@2 BY@2
>`.pickRestart({
  A: "f4 e4 d4 c4", B: "d4 e4 f4 a4", C: "c5 ~ c5 d5", D: "c5 d5 c5 d5", E: "c5 d5 c5 f5", F: "e5 d5 c5 bb4",
  G: "a4 g4 f4 e4", H: "e5 d5 c5 b4", I: "a4 b4 [a4,e5] ~", J: "a4!4", K: "bb4!4", L: "c5!2 bb4!2",
  M: "a4!2 [a4,e5] a4", N: "~ g5 ~ bb4", O: "~ c5 ~ c4", P: "~ f4 ~ a4", Q: "~ c5 ~ f5", R: "~ g5 ~ g4", S: "~ a4 ~ c5",
  T: "~ [c5,f5] ~ [a4,a5]", U: "~ a5 ab5 ab4", V: "~ a4 ab4 ab3", W: "~ b4 c5 d5", X: "~ c6 a5 eb5", Y: "~ c5 a4 eb4",
  Z: "~ c5 d5 eb5", AA: "e5 eb5 d5 c5", AB: "~ c6 a5 e5", AC: "~ [eb4,c5] [e4,a4] e4", AD: "~ c4 ~ a4",
  AE: "~ c5 ~ [a4,a5]", AF: "f5!4", AG: "gb5!4", AH: "ab5!2 gb5!2", AI: "f5!2 c6 f5", AJ: "g5!2 d6 g5",
  AK: "~@2 eb5 b5", AL: "~@2 eb5 c6", AM: "db6 ab5 db6 ab5", AN: "~@3 g4", AO: "c5 g5 c6 g5", AP: "~@3 gb4",
  AQ: "b4 gb5 b5 ~", AR: "~ e5 a5 ~", AS: "~ d5 g5 ~", AT: "~ c5 f5 ~", AU: "~ a4 c5 ~", AV: "~ f4 a4 ~",
  AW: "~ c4 f4 ~", AX: "c5 ~ c5 f5", AY: "a4 g4 f4 ~", AZ: "~@2 f4 db5", BA: "~ db6 c6 f5", BB: "a4 g4 gb4 ~",
  BC: "~@2 eb4 c5", BD: "~ eb6 d6 ~", BE: "~@2 db4 bb4", BF: "~ db6 c6 ~", BG: "~@2 bb3 g4", BH: "~ bb5 a5 ~",
  BI: "~ g5 f5 ~", BJ: "~ eb5 d5 ~", BK: "~ c5 g5 c5", BL: "~@3 c5", BM: "f5 e5 d5 c5", BN: "gb5 ~@2 c5",
  BO: "gb5 eb5 db5 c5", BP: "f5 ~@2 f5", BQ: "db5 ~@2 db5", BR: "bb4 ~@2 bb4", BS: "g4 e4!3", BT: "f4 ~@2 c4",
  BU: "gb4 ~@2 c4", BV: "gb4 eb4 db4 c4", BW: "f4 ~@3", BX: "[~@7 eb5@5 eb5@4]/2", BY: "[~@3 eb5@10 e5@10 ~@9]/2",
})).s("gm_pizzicato_strings").gain(0.3).pan(0.1)

// other · pizzicato strings · "Violin I" · soft notes
const pizzicato_strings_soft = note("<~@121 A B C D ~@2 E F G ~ H I ~@4>".pickRestart({
  A: "~@3 f4", B: "db4 ~@2 db4", C: "bb3 ~@2 bb3", D: "g3!4", E: "~@2 g5 c6", F: "f5 ~ g4 c5", G: "f4 ~@3",
  H: "~ a4 c5 f5", I: "a5@5 ~@11",
})).s("gm_pizzicato_strings").gain(0.15).pan(0.1)

// other · pizzicato strings · "Violin II"
const pizzicato_strings_2 = note(`<
  A B C@2 D E F G A B C@2 D E F H I J K I@2 J K I L M N O P M Q R S ~ T U V W X Y Z AA AB AC Z AA AB AC AD AE AF AG AD
  AE AF AG AH AI ~ AJ AH AI ~ AJ AK AL AM AN AO AP AQ AR AS@2 AT AU A B C@2 D E F G A B C AV F AW AX AY F AZ BA BB BC BD
  BE BF BG BH BI BJ BK BL BM BJ BK BL BM BN BM BO BP BQ BR BS BT BU BT BV BW ~@3 BX BY BZ CA ~@3 CB@2 CC@2
>`.pickRestart({
  A: "c4!2 a3!2", B: "a3 c4!2 f4", C: "~ c5 [f4,a4]!2", D: "[f4,a4]!4", E: "[f4,a4]!3 c5", F: "c5 a4!2 f4",
  G: "f4 d4!2 c4", H: "e4 f4 e4 ~", I: "e4!4", J: "f4!4", K: "g4!2 f4!2", L: "~ bb4 ~ g4", M: "~ bb4 ~ bb3",
  N: "~ a3 ~ f4", O: "~ f4 ~ [f4,a4]", P: "~ d5 ~ d4", Q: "~ c4 ~ f4", R: "~ f4 ~ c5", S: "~ d5!2 d4", T: "~ ab4 a4 b4",
  U: "c5 b4 a4 ab4", V: "~ a5 c5!2", W: "~ a4 c4!2", X: "~ a4 b4 c5", Y: "c5!2 b4 a4", Z: "~ c5!3", AA: "~ c4!3",
  AB: "~ a3 ~ e4", AC: "~ a4 ~ c5", AD: "c5!4", AE: "db5!4", AF: "eb5!2 db5!2", AG: "c5!2 f5 c5", AH: "[g4,d5] ~@2 b4",
  AI: "eb5 b4 ~@2", AJ: "~ c5!2 eb5", AK: "[db5,ab5] ~@2 f4", AL: "b4 f4 ~ d4", AM: "g4 ~@2 e4", AN: "bb4 e4 ~ db4",
  AO: "gb4 ~@2 e4", AP: "a4 ~@2 d4", AQ: "g4 ~@2 c4", AR: "f4 ~@2 b3", AS: "c4 ~@2 b3", AT: "c4 ~@2 g3", AU: "c4 ~@3",
  AV: "~ c5 [f4,a4] c5", AW: "f4 d4 db4 ~", AX: "~@3 db5", AY: "ab5 ~ [f4,c5,a5] c5", AZ: "f4 d4 eb4 ~", BA: "~@3 c5",
  BB: "gb5 gb4 g4 ~", BC: "~@3 bb4", BD: "e5 e4 f4 ~", BE: "~@3 g4", BF: "db5 e5 f5 ~", BG: "~ e5 d5 ~",
  BH: "~ c5 b4 ~", BI: "~@3 f4", BJ: "f4 ~@2 e4", BK: "a4 e4 ~@2", BL: "~@3 a4", BM: "a4!4", BN: "a4 ~@2 a4",
  BO: "bb4 ~@2 bb4", BP: "f4 ~@2 f4", BQ: "e4 ~@2 e4", BR: "db4 bb3 c4 db4", BS: "c4 ~@2 a3", BT: "a3!4",
  BU: "a3 ~@2 a3", BV: "bb3 ~@2 bb3", BW: "bb3 ~@3", BX: "~@2 g4 c5", BY: "f4 ~ f5 e5", BZ: "f5 ~ f4 e4", CA: "f4 ~@3",
  CB: "[~@7 a4@5 a4@4]/2", CC: "[~@3 a4@10 a4@10 ~@9]/2",
})).s("gm_pizzicato_strings").gain(0.25).pan(0.9)

// other · pizzicato strings · "Violoncello"
const pizzicato_strings_3 = note(`<
  A B C@2 D E F G A B C@2 D E F H I J K L I J K L M N O P Q R S T U V W X Y Z AA AB AC@2 AD AE AC@2 AD AE AF AG AH AI AF
  AG AH AI AJ AK AL AM AJ AK AL AM AJ AN AM AO AP AQ AR AS@3 AT AU A B C@2 D E F G A B C AV F AW AX AY F AZ BA BB BC BD
  BE BF BG BH BI BJ BK BL BM BJ BK BL BM BN BO BP AS BP BQ BR BS BT BU BP AS BP BQ BV AJ ~@2 BW BX ~@2 BY@2 BZ@2
>`.pickRestart({
  A: "f2 a2 d3 f3", B: "d3 c3 a2 f2", C: "~@2 [f3,a3] [d3,a3]", D: "[f3,a3] [d3,a3] [f3,a3] [d3,a3]",
  E: "[f3,a3] [d3,a3] [f3,a3] a3", F: "c4 f3 a3 d3", G: "f3 bb2 d3 c3", H: "a3 d3 a3 a2", I: "~ a3 ~ g3",
  J: "~ f3 ~ d3", K: "~ a2 ~ d3", L: "~ e3 ~ a3", M: "db4 d4 db4 d4", N: "eb4 e4 eb4 e4", O: "f4 e4 d4 c4",
  P: "bb3 a3 g3 f3", Q: "e3 f3 e3 f3", R: "d3 e3 d3 e3", S: "f3 e3 d3 c3", T: "bb2 a2 g2 f2", U: "e2 ~@3",
  V: "~ b3!2 b2", W: "~ b3 a3 ab3", X: "gb3 ab3 a3 b3", Y: "~ a4 c4!2", Z: "~ a3 c3!2", AA: "~ c4 b3 a3",
  AB: "e3 a3 b3 c4", AC: "e2 f2 e2 e3", AD: "e2 e3 d3 c3", AE: "b2 a2 g2 f2", AF: "~ f4 ~ eb4", AG: "~ db4 ~ bb3",
  AH: "~ f3 ~ bb3", AI: "~ c4 ~ f4", AJ: "f3 ~@3", AK: "~@3 f3", AL: "b3 eb3 ~ eb3", AM: "c4 ~@3", AN: "~@3 b3",
  AO: "~@3 bb3", AP: "b3 ~@2 ab3", AQ: "a3 ~@2 gb3", AR: "g3 ~@2 e3", AS: "f3 ~@2 f3", AT: "f3 ~@2 b2",
  AU: "c3 g2 c3 c2", AV: "~@2 [f3,a3] a3", AW: "f3 bb2 b2 ~", AX: "b2 ab3 ~@2", AY: "~@2 [c3,f3,a3] a3",
  AZ: "f3 bb2 c3 ~", BA: "a2 gb3 ~@2", BB: "~ a3 bb3 ~", BC: "g2 e3 ~@2", BD: "~ g3 a3 ~", BE: "e2 db3 ~@2",
  BF: "~ g3 f3 ~", BG: "~ db3 d3 f3", BH: "a3 a2 bb2 d3", BI: "f3 bb3 d4 g3", BJ: "g3 ~@3", BK: "~@3 bb2",
  BL: "e3 a2 ~ f3", BM: "f3!4", BN: "eb3 ~@2 a3", BO: "eb3 gb3 f3 eb3", BP: "db3 ~@2 db3", BQ: "bb2 db3 c3 bb2",
  BR: "a2 ~@2 c3", BS: "c3!4", BT: "c3 ~@2 eb3", BU: "c3 gb3 f3 eb3", BV: "a2 ~ f3 e3", BW: "~ c2 f2 a2", BX: "c3 ~@3",
  BY: "[~@7 f3@5 f3@4]/2", BZ: "[~@3 f3@10 e3@10 ~@9]/2",
})).s("gm_pizzicato_strings").gain(0.3).pan(0.8)

// bass · pizzicato strings · "Contrabass"
const bass = note(`<
  ~@4 A B C D ~@4 A B C E F G H I ~ G H I J K L M N O P Q R@8 S@2 T U S@2 T U ~@8 V ~ W X V ~ W X V Y Z AA AB AC AD AE
  AF@3 AG ~@4 A B C D ~@5 AH AI AJ AK AL AM AN AO AP AQ ~@3 AR AK ~ AS ~ AK ~ AS ~ AT ~ AT@4 ~@16 AU@2 AV@2
>`.pickRestart({
  A: "~ d2 f2 d2", B: "f2 d2 f2 a2", C: "c3 f2 a2 d2", D: "f2 bb1 d2 ~", E: "a2 d2 a2 ~", F: "~@3 g2", G: "~ f2 ~ d2",
  H: "~ a1 ~ d2", I: "~ e2 ~ a2", J: "db3 d3 db3 d3", K: "eb3 e3 eb3 e3", L: "f3 e3 d3 c3", M: "bb2 a2 g2 f2",
  N: "e2 f2 e2 f2", O: "d2 e2 d2 e2", P: "f2 e2 d2 c2", Q: "bb1 a1 g1 f1", R: "e1 f1 e1 f1", S: "e1 f1 e1 e2",
  T: "e1 e2 d2 c2", U: "b1 a1 g1 f1", V: "f2 ~@3", W: "~ g2 d3 c3", X: "bb2 ab2 g2 gb2", Y: "~@3 f3", Z: "e3 ~@3",
  AA: "~@3 e3", AB: "eb3 ~@2 d3", AC: "db3 ~@2 c3", AD: "b2 ~@2 bb2", AE: "a2 ~@2 d2", AF: "c2 ~@2 d2", AG: "c2 ~@3",
  AH: "~@3 db2", AI: "b2 ~@3", AJ: "~@2 f2 a2", AK: "c3 ~@3", AL: "~@3 c2", AM: "a2 ~@3", AN: "~@3 bb1", AO: "g2 ~@3",
  AP: "~@3 g1", AQ: "e2 ~@3", AR: "~@3 d3", AS: "~ c2 f2 f1", AT: "~ f1 f2 ~", AU: "[~@7 f2@5 f2@4]/2",
  AV: "[~@3 f2@10 e2@10 ~@9]/2",
})).s("gm_pizzicato_strings").gain(0.31).pan(0.6)

// bass · pizzicato strings · "Contrabass" · soft notes
const bass_soft = note(`<
  A B C@2 D ~@2 E A B C@2 D ~@2 F G ~@3 H ~@55 A B C@2 D ~@2 E A B C I J ~@28 K ~ L ~ L@4 M@4 N ~@7
>`.pickRestart({
  A: "f1 a1 d2 f2", B: "d2 c2 a1 f1", C: "~@2 f2 d2", D: "f2 ~@3", E: "~@3 c2", F: "~@3 a1", G: "~ a2 ~@2",
  H: "~ a2 ~ g2", I: "~@2 f2 a2", J: "c3 ~@3", K: "~ f1 f2 f1", L: "~ f1 f2 ~", M: "f1 db2 ~ c2", N: "f1 ~@3",
})).s("gm_pizzicato_strings").gain(0.21).pan(0.6)

stack(pizzicato_strings, pizzicato_strings_soft, pizzicato_strings_2, pizzicato_strings_3, bass, bass_soft)

More by Tchaikovsky