Strudelify

Symphony No.2

Gustav Mahler

KeyD♭ majorTempo80 bpm
0:00/0:00
// Symphony No.2 — Gustav Mahler
// 80 bpm, 4/4, key Db 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, 2/2 at bar 90) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5930120; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 103 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · trombone
const trombone = note(`<
  ~@14 A B C D@2 ~@2 E@2 F G H I J K L M N O P O Q R ~ S T ~@13 U V W X Y Z AA AB AC AD AE AF O AG AH ~@3 U V ~ AI AJ@2
  AK AL AM AN AO AP AQ AR AS AT@2 ~ AU AV AW AX AY AZ BA@2 BB@2 BC@2 BD BE
>`.pickRestart({
  A: "db4!2", B: "eb4 b3", C: "d4 eb4 db4 c4", D: "[c4@3 b3]/2", E: "[g2@6 ~ g3]/2", F: "c4 d4", G: "e4@4 ~@2 g3 c4",
  H: "e4@2 d4 c4 d4@3 e4", I: "e4@16 ~@8 g3@3 c4@2 g3@3", J: "f4 d4", K: "e4@16 ~@8 c4@3 g3@2 c4@3", L: "f4 ab4",
  M: "c5 ~", N: "~@3 g3", O: "d4 eb4", P: "d4@16 ~@8 g3@3 d3@2 g3@3", Q: "d4@16 ~@8 d4@3 g3@2 d4@3", R: "g4 ~",
  S: "c4@6 eb4 db4", T: "c4@3 ~", U: "db4 c4", V: "db4 bb3", W: "eb4@2 db4 b3 db4@2 gb3@2", X: "b3 bb3", Y: "c4 bb3",
  Z: "c4 f4", AA: "eb4 ab4 g4 f4", AB: "c5", AC: "f4 g4", AD: "f4@2 ~ ab3", AE: "f4 gb4", AF: "f4 ~", AG: "f4@2 g4 f4",
  AH: "f4 ~@3", AI: "bb3 db4", AJ: "[f3@5 ~ bb3 db4]/2", AK: "f4@3 ~", AL: "bb3@4 db4@2 ~ f3 bb3@4 db4@2 ~ f4",
  AM: "bb4 a4", AN: "ab4 g4", AO: "gb4 db4", AP: "c4", AQ: "f3", AR: "e3", AS: "db3@4 c3@3 db3", AT: "g2/2",
  AU: "~@12 c4@2 db4@9 c4@2 b3@2 ~ ab3@4, ~@11 b3@2 ~@14 c4@2 ~@3",
  AV: "f3@4 ~@3 b3@2 c4@2 db4@5 c4@2 b3@2 ~ f4@2 ab4@2 c5@4 ~@3, ~@10 c4 ~@5",
  AW: "~@2 ab3@2 ~ c4@2 db4@7 ~@2 ab3@2 bb3@2 ~ db4@4 ~@7, ~@2 bb3 ~@7 c4 ~@5",
  AX: "ab3@4 db4@8 c4@2 bb3@2 c4@2 db4@3 g3@4 ~@3 g3@4",
  AY: "db4@9 c4@2 ~ c4@2 db4@4 d4@4 ~@3 db4@2 ~ eb4@4, ~@11 bb3@2 ~@14 d4@2 ~@3",
  AZ: "e4@4 ~@3 ab3@2 eb4@2 eb4@3 e4@4 ~@3 g3@2 e4@2 f4@7",
  BA: "[~@2 e4@2 ~ e4@2 f4@4 c4@4 ~@3 e4@2 ~ gb4@8 f4@2 ~ f4@2 gb4@2 ~ c4@2 ~@4 gb4@2 ~ c4@2 ~@4 gb4@2 ~ c4@2 ~@4 gb4@2 ~, ~@4 d4@2 ~@14 f4@2 ~@9 e4@2 ~@31]/2",
  BB: "[c4@2 ~@5 gb4@4 ~@2 c4@2 ~@4 gb4@4 ~@2 c4@2 ~@4 gb4@16 ~ f4 ~ e4 ~ eb4 ~ d4 ~ db4@2 ~ db3@2 ~@3]/2",
  BC: "[~@16 b4@6 ~ a4@4 b4@2 gb4@12 ~@12 e4@6 d4@5]/2", BD: "e4 b3@6 ~@6 b3@3", BE: "a3@5 b3@2 bb2@25",
})).s("gm_trombone").gain(0.45)

// other · trombone · soft notes
const trombone_soft = note("<A B C D E F G H I J K L ~ M ~@5 N ~@19 O P ~@4 Q R S T ~@54>".pickRestart({
  A: "db4 c4", B: "db4 bb3", C: "eb4@2 db4 b3 db4@2 gb3@2", D: "b3 bb3", E: "c4 bb3", F: "c4 f4", G: "eb4 ab4 g4 f4",
  H: "c4@3 ~", I: "f4 g4", J: "f4@4 ~@2 c4 eb4", K: "ab4 g4 f4@2", L: "eb4 ~", M: "~@2 b3 c4", N: "c4 ~@3",
  O: "~@6 eb4 db4", P: "c4", Q: "ab3 g3", R: "ab3 eb3", S: "b3@4 ~@4 bb3@2 ~@4 b3 ~ gb3@16",
  T: "eb4@4 ~@4 d4@2 ~@4 eb4 ~ bb3@16",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_2 = note(`<
  ~@14 A B C D@3 ~ E@2 F G H G I G I G J K@2 L@2 M ~ N O ~@21 P Q R S ~ T U ~ V W X ~ Y Z AA@2 AB AC AD AE AF AG AH AI
  AH AJ@2 ~ AK AL ~ AM AN AO AP@2 AQ@2 AR@2 AS AT
>`.pickRestart({
  A: "f3 gb3", B: "gb3 g3", C: "a3 bb3 ab3 a3", D: "[g3@3 ~]/3", E: "[g2@6 ~ g3]/2", F: "g3!2", G: "c4 ~",
  H: "c4@2 g3!2 g3@3 c4", I: "c4", J: "~@3 g3", K: "[g3@48 ~@8 g3@3 d3@2 g3@3]/2", L: "[g3@48 ~@8 d4@3 g3@2 d4@3]/2",
  M: "g4 ~", N: "c3@6 eb3 db3", O: "c3@3 ~", P: "f3 g3", Q: "f3 ~", R: "ab3 a3", S: "ab3 ~",
  T: "d4@2 ~ c4 bb3@2 ~ a3 g3@2 ~ f3 g3@2 ~ a3", U: "bb3 ~@7", V: "d3@2 ~ f3 bb3@2 ~ a3 g3@2 ~ f3 eb3@2 ~ d3",
  W: "eb3@2 ~ bb3 eb4@2 ~ d4 c4@2 ~ bb3 ab3@2 ~ gb3", X: "f3 ~@7", Y: "eb3 gb3 b2 e3", Z: "bb2 db3",
  AA: "[f2@5 ~ bb2 db3]/2", AB: "f3@3 ~", AC: "bb2@4 db3@2 ~ f2 bb2@4 db3@2 ~ f3", AD: "bb3 a3", AE: "ab3 g3",
  AF: "gb3 db3", AG: "c3", AH: "f2", AI: "e2", AJ: "e2/2",
  AK: "~@12 c3@2 db3@9 c3@2 b2@2 ~ ab2@4, ~@11 b2@2 ~@14 c3@2 ~@3",
  AL: "f2@4 ~@3 b2@2 c3@2 db3@5 c3@2 b2@2 ~ f3@2 ab3@2 c4@7, ~@10 c3 ~@5",
  AM: "ab3@4 db4@8 c4@2 bb3@2 c4@2 db4@3 g3@4 ~@3 g3@4",
  AN: "db4@9 c4@2 ~ c4@2 db4@4 d4@4 ~@3 db4@2 ~ eb4@4, ~@11 bb3@2 ~@14 d4@2 ~@3",
  AO: "e4@4 ~@3 ab3@2 eb4@2 eb4@3 e4@4 ~@3 g3@2 e4@2 f4@7",
  AP: "[~@2 e4@2 ~ e4@2 f4@4 c4@4 ~@3 e4@2 ~ gb4@8 f4@2 ~ f4@2 gb4@2 ~ c4@2 ~@4 gb4@2 ~ c4@2 ~@4 gb4@2 ~ c4@2 ~@4 gb4@2 ~, ~@4 d4@2 ~@14 f4@2 ~@9 e4@2 ~@31]/2",
  AQ: "[c4@2 ~@5 gb4@4 ~@2 c4@2 ~@4 gb4@4 ~@2 c4@2 ~@4 gb4@16 ~ f4 ~ e4 ~ eb4 ~ d4 ~ db4@2 ~ db3@2 ~@3]/2",
  AR: "[~@16 b3@6 ~ a3@4 b3@2 gb3@12 ~@12 e3@6 d3@5]/2", AS: "e3 b2@6 ~@6 b2@3", AT: "a2@5 b2@2 gb2@25",
})).s("gm_trombone").gain(0.45)

// other · trombone · soft notes
const trombone_soft_2 = note("<A B C D E F G H I J K L ~ M ~@25 N O P O ~@2 Q R S T ~@54>".pickRestart({
  A: "f3!2", B: "f3 db3", C: "gb3@2 gb3 eb3", D: "f3 gb3", E: "g3 f3", F: "eb3 f3", G: "g3 c4 bb3 ab3", H: "g3@3 ~",
  I: "f3 g3", J: "f3@4 ~@2 c3 eb3", K: "ab3 g3 f3@2", L: "eb3 ~", M: "~@3 f3", N: "~@6 eb3 db3", O: "c3", P: "g3",
  Q: "ab3 g3", R: "ab3 eb3", S: "b2@4 ~@4 bb2@2 ~@4 b2 ~ gb2@16", T: "eb3@4 ~@4 d3@2 ~@4 eb3 ~ bb2@16",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_3 = note(`<
  ~@13 A B C D ~@4 E@2 F G H G I G I G J K@2 L@2 M ~ N O ~@21 P Q R S T U V ~ W X Y ~ Z AA AB@2 AC AD AE AF AG AH AI AJ
  AI AK@2 ~ AL AM AN AO AP AQ AR@2 AS@2 AT@2 AU AV
>`.pickRestart({
  A: "~@3 f2", B: "bb2 gb2", C: "b2 g2", D: "d3 eb3 f3 gb3", E: "[c2@6 ~ g3]/2", F: "e3 f3", G: "g3 ~",
  H: "g3@2 f3 e3 f3@3 g3", I: "ab3 f3", J: "~@3 g3", K: "[f3@48 ~@8 g3@3 d3@2 g3@3]/2",
  L: "[f3@48 ~@8 d4@3 g3@2 d4@3]/2", M: "g4 ~", N: "c3@6 eb3 db3", O: "c3@3 ~", P: "f3 c3", Q: "f3 ~", R: "db3 gb2",
  S: "db3 ~", T: "bb3@2 ~ a3 g3@2 ~ f3 eb3@2 ~ d3 c3@2 ~ bb2", U: "d3@2 ~ c3 bb2@2 ~ a2 g2@2 ~ f2 g2@2 ~ a2",
  V: "bb2 ~@7", W: "d3@2 ~ f3 bb3@2 ~ a3 g3@2 ~ f3 eb3@2 ~ d3", X: "eb3@2 ~ bb3 eb4@2 ~ d4 c4@2 ~ bb3 ab3@2 ~ gb3",
  Y: "f3 ~@7", Z: "eb3 gb3 b2 e3", AA: "bb2 db3", AB: "[f2@5 ~ bb2 db3]/2", AC: "f3@3 ~",
  AD: "bb2@4 db3@2 ~ f2 bb2@4 db3@2 ~ f3", AE: "bb3 a3", AF: "ab3 g3", AG: "gb3 db3", AH: "c3", AI: "f2", AJ: "e2",
  AK: "e2/2", AL: "~@12 c3@2 db3@9 c3@2 b2@2 ~ ab2@4, ~@11 b2@2 ~@14 c3@2 ~@3",
  AM: "f2@4 ~@3 b2@2 c3@2 db3@5 c3@2 b2@2 ~ f3@2 ab3@2 c3@4 ~@3, ~@10 c3 ~@5",
  AN: "~@2 ab2@2 ~ c3@2 db3@4 ~@21, ~@2 bb2 ~@13", AO: "ab2@4 db3@8 c3@2 bb2@2 c3@2 db3@3 g2@4 ~@3 g2@4",
  AP: "db3@9 c3@2 ~ c3@2 db3@4 d3@4 ~@3 db3@2 ~ eb3@4, ~@11 bb2@2 ~@14 d3@2 ~@3",
  AQ: "e3@4 ~@3 ab2@2 eb3@2 eb3@3 e3@4 ~@3 g2@2 e3@2 f3@7",
  AR: "[~@2 e3@2 ~ e3@2 f3@4 c3@4 ~@3 e3@2 ~ gb3@8 f3@2 ~ f3@2 gb3@2 ~ c3@2 ~@4 gb3@2 ~ c3@2 ~@4 gb3@2 ~ c3@2 ~@4 gb3@2 ~, ~@4 d3@2 ~@14 f3@2 ~@9 e3@2 ~@31]/2",
  AS: "[c3@2 ~@5 gb3@4 ~@2 c3@2 ~@4 gb3@4 ~@2 c3@2 ~@4 gb3@16 ~ f3 ~ e3 ~ eb3 ~ d3 ~ db3@2 ~ db3@2 ~@3]/2",
  AT: "[~@16 b3@6 ~ a3@4 b3@2 gb3@12 ~@12 e3@6 d3@5]/2", AU: "e3 b2@6 ~@6 b2@3", AV: "a2@5 b2@2 gb2@25",
})).s("gm_trombone").gain(0.45)

// other · trombone · soft notes
const trombone_soft_3 = note("<A B C D E F G H I J K L M N ~@3 O@3 ~@19 P Q R S ~@2 T M U V ~@54>".pickRestart({
  A: "db3 f3", B: "db3 bb2", C: "eb3@2 bb2 b2", D: "db3 gb2", E: "c3 db3", F: "eb3 c3", G: "c3 ab2 eb3 db3",
  H: "c3@3 ~", I: "f3 c3", J: "f3 ~", K: "c3!2 c3@2", L: "c3 ~", M: "ab2 eb2", N: "c3 bb2 ab2 ~", O: "[g3@3 ~]/3",
  P: "~@6 eb3 db3", Q: "c3", R: "g2", S: "c2", T: "ab2 g2", U: "b2@4 ~@4 bb2@2 ~@4 b2 ~ gb2@16",
  V: "eb3@4 ~@4 d3@2 ~@4 eb3 ~ bb2@16",
})).s("gm_trombone").gain(0.15)

// bass · tuba
const bass = note(`<
  ~@13 A B C D E@2 ~@2 F@2 ~ G H G ~ G ~ I@2 J ~ J ~@3 K@2 L ~@8 M@4 ~@8 N O P Q R S T ~ U V W ~ X Y@4 Z@4 AA@3 Y@2 ~@2
  AB AC AD AE AF AG AH@2 AI@2 AJ@4
>`.pickRestart({
  A: "~@3 f1", B: "bb1 gb1", C: "b1 g1", D: "d2 eb2 f2 gb2", E: "g2/2", F: "[c2@3 ~]/2", G: "c2@3 ~", H: "~ g1",
  I: "[c3@3 ~]/2", J: "c2 ~", K: "c2 eb2", L: "c2 bb1", M: "db2/2", N: "f2 c2", O: "f2 ~", P: "db3 gb2", Q: "db3 ~",
  R: "bb2@2 ~ a2 g2@2 ~ f2 eb2@2 ~ d2 c2@2 ~ bb1", S: "d3@2 ~ c3 bb2@2 ~ a2 g2@2 ~ f2 g2@2 ~ a2", T: "bb2 ~@7",
  U: "d2@2 ~ f2 bb2@2 ~ a2 g2@2 ~ f2 eb2@2 ~ d2", V: "eb2@2 ~ bb2 eb3@2 ~ d3 c3@2 ~ bb2 ab2@2 ~ gb2", W: "f2 ~@7",
  X: "eb2 gb2 b1 e2", Y: "f1/2", Z: "f1/4", AA: "f1/3",
  AB: "~@12 c2@2 db2@9 c2@2 b1@2 ~ ab1@4, ~@11 b1@2 ~@14 c2@2 ~@3",
  AC: "f1@4 ~@3 b1@2 c2@2 db2@5 c2@2 b1@2 ~ f2@2 ab2@2 c3@7, ~@10 c2 ~@5",
  AD: "~@2 ab2@2 ~ c3@2 db3@4 ~@21, ~@2 bb2 ~@13", AE: "ab2@4 db3@8 c3@2 bb2@2 c3@2 db3@3 g2@4 ~@3 g2@4",
  AF: "db3@9 c3@2 ~ c3@2 db3@4 d3@4 ~@3 db3@2 ~ eb3@4, ~@11 bb2@2 ~@14 d3@2 ~@3",
  AG: "e3@4 ~@3 ab2@2 eb3@2 eb3@3 e3@4 ~@3 g2@2 e3@2 f3@7",
  AH: "[~@2 e3@2 ~ e3@2 f3@4 c3@4 ~@3 e3@2 ~ gb3@8 f3@2 ~ f3@2 gb3@2 ~ c3@2 ~@4 gb3@2 ~ c3@2 ~@4 gb3@2 ~ c3@2 ~@4 gb3@2 ~, ~@4 d3@2 ~@14 f3@2 ~@9 e3@2 ~@31]/2",
  AI: "[c3@2 ~@5 gb3@4 ~@2 c3@2 ~@4 gb3@4 ~@2 c3@2 ~@4 gb3@16 ~ f3 ~ e3 ~ eb3 ~ d3 ~ db3@2 ~ db2@2 ~@3]/2",
  AJ: "[~@8 db2@49 ~@7]/4",
})).s("gm_tuba").gain(0.45)

// bass · tuba · soft notes
const bass_soft = note("<A B C D E F G H I J K L M N ~@5 O ~@21 P Q@2 ~ R M ~@56>".pickRestart({
  A: "db2 f2", B: "db2 bb2", C: "eb2@2 bb1 b1", D: "db2 gb1", E: "e2 bb2", F: "ab2 f2", G: "c2 ab1 eb2 db2",
  H: "c2@3 ~", I: "f2 c2", J: "f2 ~", K: "ab2 g2 f2@2", L: "eb2 ~", M: "ab2 eb2", N: "c2 bb1 ab1 ~", O: "c3 ~@3",
  P: "c2 bb1", Q: "c2/2", R: "ab2 g2",
})).s("gm_tuba").gain(0.15)

stack(trombone, trombone_soft, trombone_2, trombone_soft_2, trombone_3, trombone_soft_3, bass, bass_soft)

More by Gustav Mahler