Strudelify

Symphony No.9 Op.95

J.S. Bach and Antonin Dvorak

KeyG majorTempo120 bpm
0:00/0:00
// Symphony No.9 Op.95 — J.S. Bach and Antonin Dvorak
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/30814; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// 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 · trumpet · "Bb Trumpet"
const trumpet = note(`<
  A B C D E F G H I J K L M L N O P Q R S T L U V W L U X Y Z AA O AB O AC AD AE AF AG AH AI AJ AK ~ AK ~ AK@2 AL AM AN
  AO AP ~@9 AQ Z AA AR AS AT AU AV AW AX L U V AY L U AZ BA BB BC ~ BD O
>`.pickRestart({
  A: "e5@4 e5 ~@3", B: "~ e5 d#5 e5", C: "f#5@4 f#5 e5 d#5 c5", D: "b4@4 a4@4 g4@3 f#4 g4@4", E: "e5 d5 c5 b4",
  F: "g5 f#5 e5 d5", G: "d#5", H: "e5 d#5 c5 b4", I: "e5 d#5", J: "c5 b4", K: "d#5@2 c#5 d#5", L: "e5@2 f#5 g5",
  M: "f#5@3 ~", N: "f#5@3 e5", O: "e5", P: "e5@4 d#5 c#5 d#5 e5", Q: "e5 f#5 c#5 b4!2 c5 d#5 e5",
  R: "e5 d#5 d5 c#5 c5 a4 f#4 b4", S: "b4 a4 g4 a4 b4 c#5 d#5 a4", T: "b4!2 c5 d#5 a4 b4 c5 d#5", U: "f#5@3 e5 e5@4",
  V: "e5@4 d5@2 b4 d5", W: "e5!2", X: "e5@4 g5 e5 ~ g5 b5@4 b4@4", Y: "g4@3 b4", Z: "g4 b4 f#4 b4", AA: "e4 g4 c5@2",
  AB: "b4@2 c#5 d#5", AC: "d#5 c#5 b4 a#4", AD: "e5 d#5 e5 b4", AE: "g4 a4!2 f#4", AF: "b4 d#5 g5 a5",
  AG: "f#5@2 b4 g4", AH: "c#5@2 b4!2", AI: "d5 f#5", AJ: "e5 c5 b4 f#4", AK: "d#4@3 e4", AL: "d#4@3 e4@2 d#4@3",
  AM: "e4 d#4 e4 d#4", AN: "e4@4 d#4@2 e4@2 d#4@2 e4@2 d#4 e4 d#4 e4",
  AO: "d#4 e4 d#4 e4 d#4 e4 d#4 e4 d#4 e4 d#4 e4 d#4 e4 d#4 e4", AP: "d#4@2 e4 ~", AQ: "~@3 b4",
  AR: "b4@2 c#5 d#5 e5@4", AS: "d#5 c#5 b4@2 a4@2 g4@2", AT: "f#4 e4 d#4 c4", AU: "d#4@2 e4 g4 a4 b4 a4 c5",
  AV: "b4 a4 g4 d#4", AW: "e4 g4 f#4 a4 g4 f#4 g4 f#4", AX: "e4 f#4 g4 a4 b4 c5 d#5@2", AY: "e5@3 e5", AZ: "e5@2 g5 e5",
  BA: "g5@2 b5@3 d#5@3", BB: "e5@2 f#5 g5 f#5 g5 e5@2", BC: "e5 b4", BD: "g4 a4 b4 c5 d#5 e5 d#5 f#5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet_2 = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X@2 V Y Z AA@2 AB AC AD AE AF AG AH AI AJ AK AL AM AN ~ AN ~ AN@2 AO AP
  AQ AR AS ~@4 AT AU AV AW AX AY@2 AZ BA BB BC BD BE BF BG BH BI BJ BK BH BI BL BM BN BO BP M BQ
>`.pickRestart({
  A: "b4@4 b4 a4 g4 f#4", B: "e4 d#4 b3@2 d#4@2 e4@2", C: "d#4 a3", D: "b3 d#4 e4 b3", E: "e4 f#4 g4 f#4",
  F: "d#4 f#4 g4 a4", G: "b4!2 a4 g4 f#4 e4 f#4@2", H: "e4@2 f#4 g4 f#4 g4 e4@2", I: "b4!2", J: "a4 g4", K: "f#4",
  L: "e4@4 e4 b3 c4 d#4", M: "e4 f#4 g4 a4 b4 a4 g4 f#4", N: "b4 a4 g4 f#4 e4 g4 f#4 e4",
  O: "f#4 a4 g4 f#4 g4 e4 g4 f#4", P: "g4 e4 a4 b4 a4 g4!2 b4", Q: "g4 e4 b3 c#4 d#4 e4 f#4 g4",
  R: "e4 d#4 c#4 d#4 e4 f#4 g4 a4", S: "g4 ~ g4 ~ a4 ~ b4 ~", T: "g4 ~ e4 ~ a4 ~ f#4 ~", U: "g4 ~ g4 ~ f#4 ~ g4 ~",
  V: "b4 ~", W: "d5@3 ~@5", X: "g5 ~", Y: "b4@3 ~@5", Z: "e5@2 b4 d#5", AA: "e5/2", AB: "e5 d5 e5@2", AC: "g4",
  AD: "g4@2 g#4 f#4", AE: "b4", AF: "f#4 g#4 f#4 d#4", AG: "b4@4 a4@4 g4@3 f#4 g4@4", AH: "e5 d5 c5 b4",
  AI: "g5@2 e5 d#5", AJ: "a4 b4 c5 b4 d#5@2 e5@2", AK: "a5@2 d#5 e5", AL: "a5 d#5", AM: "e5 f#5", AN: "f#5@3 g5",
  AO: "f#5@3 g5@2 f#5@3", AP: "g5 f#5 g5 f#5", AQ: "g5@4 f#5@2 g5@2 f#5@2 g5@2 f#5 g5 f#5 g5",
  AR: "f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5", AS: "f#5@2 g5 ~", AT: "~@3 b4", AU: "g4 b4 f#4 b4",
  AV: "e4 g4 c5@2", AW: "b4@2 c#5 d#5 e5@4", AX: "d#5 c#5 b4@2 a4@2 g4@2", AY: "[e4 d#4 g4 e4@3 d#4 e4]/2",
  AZ: "e4@2 g4 a4", BA: "e4 f#4 g4 a4", BB: "f#4 e4@3", BC: "d#4 e4 d#4 e4", BD: "f#5 e5 d#5 c5", BE: "d5 a4 d5 b4",
  BF: "e4 d#4 c#4 b3", BG: "c#4 d#4 e4 f#4", BH: "e4@2 f#4 g4", BI: "f#4@3 e4 e4@4", BJ: "e4@4 d4@2 b3 d4",
  BK: "e4@3 e4", BL: "e4@2 g4 e4", BM: "g4@2 e4@3 b4@3", BN: "~@4 a4@2 b4 c5", BO: "b4 c5 a4@2 b4@4",
  BP: "~@5 b3 c#4 d#4", BQ: "[g4,b4]",
})).s("gm_trumpet").gain(0.3)

stack(trumpet, trumpet_2)