Strudelify

Sonata for four Trombones

Daniel Speer

KeyA minorTempo80 bpm
0:00/0:00
// Sonata for four Trombones — Daniel Speer
// 80 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5621004; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · trombone · "Alto Trombone"
const trombone = note(`<
  A B C D E F G H I J K L ~@3 M N O P Q R S T A B C D E F G H I J K L ~@3 M N O P Q R S T U V W X Y Z@2 AA AB AC AD AE
  AF AG AH AI AJ AK AL AH AI AM AN AO U V W X Y Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL AH AI AM AN AO
>`.pickRestart({
  A: "f4@2 f4!2 e4@4", B: "d4 f4 e4 g4 f4 a4 g4 a#4", C: "a4@3 g4 f4@2 f4@2 g4@2 f4@2 e4@4", D: "f4@3 g4 a4!3 g4",
  E: "a4 e4 f4!2 g4!2 a4!2", F: "g4@3 f4 e4@2 g4@2 f4@6 f4@2", G: "e4@4 e4@2 e4!2", H: "e4@4 c4 e4 d4 f4",
  I: "e4@2 g4@2 f4@2 a4@2 g4@3 f4 e4@2 e4@2", J: "f4 e4 d4!2 e4@4", K: "~@6 g4 f4 e4 f4 g4 e4 f4 g4 f4 e4",
  L: "d4@2 g4 f4 e4@3 d4 d4@4 ~@4", M: "~@10 f4 e4 d4 e4 f4 d4", N: "g4 a4 g4 f4 e4@6 f4@2 d4@2 d4@2",
  O: "e4@2 e4@2 a4@2 g4@2 f4@3 f4 e4@2 e4 d4", P: "c4 d4 e4 c4 f4 g4 f4 e4 d4@4 e4@2 e4 d4",
  Q: "c4@6 f4 e4 d4 e4 f4 d4 g4 a4 g4 f4", R: "e4!2 f4!2 e4@3 e4", S: "e4 f4!3 e4@2 f4@2", T: "f4 e4 f4@2",
  U: "~ f4!3 e4@3 f4", V: "g4 f4 e4 a4", W: "[a4,b4] a4 [a4,b4]!2 a4 [a4,b4] g4@2 a4@8",
  X: "~@2 a4 g4 f4@2 f4 e4 d4@2 g4 f4 e4@2 e4 d4", Y: "c4@3 d4 e4@2 e4@2 d4@6 d4@2",
  Z: "[e4@3 e4 f4@2 g4@3 g4 f4 e4 d4@3 d4]/2", AA: "e4@2 ~@3 f4 g4 d4", AB: "e4@4 ~@6 f4 e4 d4@2 d4 c4",
  AC: "a#3 d4!3 d4@4", AD: "~@2 e4@2 e4@2 d4 e4 f4@8", AE: "f4!4 e4@4", AF: "~@2 a4 g4 f4!4 g4@2 g4 f4 e4!4",
  AG: "f4@3 f4 g4@3 g4", AH: "a4@3 a4 f4!3 e4", AI: "f4@2 f4 e4 d4!4 g4@2 g4 f4 e4!4", AJ: "a4@6 f4 e4 d4!4 g4@2 g4 f4",
  AK: "e4@2 g4@2 g4@3 f#4 g4@2 g4 f4 e4!4", AL: "f4@2 f4 e4 d4!4 g4@6 g4@2",
  AM: "a4@2 a4 g4 f4@2 e4@2 f4@2 f4@2 g4@2 f4@2", AN: "e4 f4 g4 f4 e4@2 f4@2", AO: "e4 d4 e4@2 f#4@4",
})).s("gm_trombone").gain(0.3)

// other · trombone · "Tenor Trombone"
const trombone_2 = note(`<
  A B C D E ~ F G H I J K L M N O P Q R S T U@2 A B C D E ~ F G H I J K L M N O P Q R S T U@2 V W X Y Z AA AB AC AD AE
  AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS
>`.pickRestart({
  A: "a3@2 a3!2 a3@4", B: "~@4 d4!2 e4!2", C: "f4 a3!3 a#3 a3 g3@2", D: "a3@6 g3@2 f3@2 a3@2 a#3@3 a#3", E: "e3 ~@3",
  F: "~@4 a3@2 a3!2", G: "g#3@4 a3 c4 a#3 d4", H: "c4@2 e4@2 d4@2 f4@2 e4@3 d4 c4@2 c4@2", I: "d4 c4!2 b3 c4@4",
  J: "~@2 d4 c4 a#3 c4 d4 a#3 c4 d4 c4 a#3 a3@2 a3@2", K: "a#3!2 a3@2 a3!2 c4 a#3", L: "a3 c4 a#3 d4 a3!4",
  M: "g3@3 g3 f3 a3 g3 a#3", N: "a3@2 c4@2 a#3@2 d4@2 e4@3 d4 c4@2 c4@2", O: "a#3 a3 g3@2 a3@2 ~@2",
  P: "~@6 a3@2 a3 b3 c4 a3 a#3 c4 a#3 a3", Q: "g3!2 a3 c4!2 b3 c4@2", R: "~@10 a#3 a3 g3 a3 a#3 g3",
  S: "a3 a#3 a3 g3 f3@4 g3@4 g3@2 g3@2", T: "a3!4 g#3 a3!2 g#3", U: "[a3!4 g3@6 g3@2 a3@4]/2", V: "~ a3!3 a3@3 a3",
  W: "a#3!2 c#4 a3", X: "d4@3 d4 a3@4", Y: "~@7 g3", Z: "a3!2 g3 a3 g3@3 g3",
  AA: "g3@2 e4 d4 c4@2 c4 a#3 a3@2 d4 c4 a#3@2 a#3 a3", AB: "g3!2 a3 c4 c4@2 b3@2",
  AC: "c4@2 c4 b3 a3@2 a3 g3 f3@2 a#3 a3 g3@2 g3 f3", AD: "e3@2 a3@2 a3@2 a3 g3 f3@2 f3@2 f3@2 f3@2",
  AE: "g3@6 f#3@2 g3@2 b3@2 b3@2 a3 b3", AF: "c4@10 a3@2 a3@2 g3 a3", AG: "a3!4 a3@4", AH: "~@14 e4 d4",
  AI: "c4!4 f4@2 f4 e4 d4!4 e4@2 e4 d4", AJ: "c4!4 f4@2 f4 e4 d4@2 c4@2 a#3@4", AK: "a3@4 ~@10 g3!2",
  AL: "a3@2 c4 b3 a3!4 a#3@2 d4@2 d4!4", AM: "e4 a#3 c4 a3 b3@2 ~@2", AN: "~@2 f3@2 f3@2 f3@2 g3@2 a#3 a3 g3@2 c4 b3",
  AO: "a3!4 c4@2 c4@2 a#3@2 c4@2 g3@3 g3", AP: "c4 f3!3 g3@3 g3", AQ: "a3@3 a3 d4 c4 a#3 a3", AR: "a3@3 a3", AS: "a3!2",
})).s("gm_trombone").gain(0.3)

// other · trombone · "Tenor Trombone"
const trombone_3 = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V@2 A B C D E F G H I J K L M N O P Q R S T U V@2 W X Y Z AA AB AC AD AE AF
  AG AH AI AJ AK AL AM AN AO AK AP AQ AR@2 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AK AP AQ AR@2
>`.pickRestart({
  A: "d3@2 d3!2 a3@4", B: "d3 e3 d3 c3", C: "f3 f2 a#2 c3", D: "f3@3 e3 d3 c3 a#2@2", E: "a2 c3 a#2 d3 c3 e3 d3 f3",
  F: "e3@3 d3 c3@2 c3@2 c3@4 b2@4", G: "c3@4 a2@2 a2!2", H: "e3@2 a2 g2", I: "c3@2 d3 a#2 c3!4",
  J: "f3@4 g3@4 c3@2 c4 b3 a3 b3 c4 a3", K: "a#3 c4 a#3 a3 g3@4 c3@4 f3@4", L: "a#3 g3 a3@2 d3 f3 e3 g3",
  M: "f3@2 a3@2 g3@2 a#3@2 a3@3 g3 f3@2 f3@2", N: "f3 e3 f3 g3", O: "f3 g3 c3 f3", P: "a#2 c3 f3 a#2",
  Q: "g2@4 a2@2 a3 g3 f3 g3 a3 f3 g3 a3 g3 f3", R: "e3 c3 f3 e3 d3@2 c3@2", S: "f3@4 d3@4 g2@2 g3 f3 e3 f3 g3 e3",
  T: "f3 g3 f3 e3 d3@4 g3@4 e3@2 e3@2", U: "a3@2 d3!2 e3@4", V: "[a2 f2!3 c3@6 c3@2 f2@4]/2", W: "~ d3!3 a3@3 a3",
  X: "g3!2 a3!2", Y: "a#3@3 a#3 a3@4", Z: "a2 d3 g3 c3", AA: "f3@2 e3 f3 g3@3 g3",
  AB: "c3@2 c4 a#3 a3@2 a3 g3 f3@2 a#3 a3 g3@2 g3 f3", AC: "e3!2 f3 c3 g3@3 g3", AD: "c3 f3 a#2 g3",
  AE: "c3@2 a3 g3 f3@2 f3 e3 d3@2 d3 c3 a#2@2 a#2 a2", AF: "g2@2 g2@2 d3@3 d3 g2@8",
  AG: "~@2 c3@2 c3@2 c3!2 f3@2 f3@2 f3@2 f3@2", AH: "d3!4 a3@4", AI: "a2 d3 g2 c3",
  AJ: "f2@2 f3 e3 d3!4 g3@2 g3 f3 e3!4", AK: "a3@2 a3 g3 f3!4 a#3@2 a3@2 g3@3 g3", AL: "f3 a#2 g2 c3",
  AM: "a2@2 a3 g3 f3!4 a#3@2 a#3 a3 g3!4", AN: "c4@2 a#3@2 a3@3 a3 g3@4 c3@4", AO: "f3@4 a#2@4 g2@2 g3 f3 e3!4",
  AP: "f3@6 a#2 a2 g2!4 c3@2 c3 a#2", AQ: "a2!4 d3@2 c3@2 a#2@2 a2@2 g2@2 d3@2", AR: "[a2@3 a2 a2@6 a2@2 d3@4]/2",
})).s("gm_trombone").gain(0.3)

stack(trombone, trombone_2, trombone_3)