Strudelify

Andante et Vivace- Tuba Quartet

Stephen Lendor

KeyB♭ majorTempo96 bpm
0:00/0:00
// Andante et Vivace- Tuba Quartet — Stephen Lendor
// 96 bpm, 4/4, key Bb 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 (3/4 at bar 1, 4/4 at bar 14) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1728571; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 35 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/4)

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

// bass · tuba · "Bb Tuba"
const bass = note("<A B C@2 D E F ~@2 G H@3 I J K L M N O P Q M R@2 S T@3 U@2 V W@3>".pickRestart({
  A: "~ g2 bb2 d3", B: "c3@2 d3 c3", C: "[bb2 a2 g2@3 gb2@2 a2]/2", D: "bb2 a2 g2 eb3", E: "d3 c3 a2 eb3",
  F: "c3@3 d3 d3@12", G: "~@6 g2 a2", H: "[bb2@2 bb2 g2@2 g2 gb2 gb2@2 g2@3]/3", I: "g2@2 bb2@2 d3@2 c3 bb2",
  J: "a2@2 c3@2 d3@2 c3 bb2", K: "g2@5 gb2 g2 bb2", L: "bb2@4 a2@3 g2", M: "g2", N: "g2 ~@3", O: "~@2 g2 ~",
  P: "~@2 gb2 ~", Q: "~@2 g2 a2", R: "[bb2@17 bb2@2 bb2@2 g2@2 bb2@2 c3@2 bb2@2 a2@2 g2@2 ~@13 bb2@4 ~@14]/2",
  S: "~@3 bb2@2 bb2@2 ~@2 f2@2 bb2@8 ~@13",
  T: "[~@6 c3@2 bb2@2 c3@2 ~ f2@2 c3@2 f2@2 c3@2 ~@2 bb2@2 a2@2 bb2@2 eb2@2 eb2@2 bb2@2 eb2@2 ~@15 bb2!2 bb2@4 bb2@4 ~ c3@4 d3@4 ~@4 bb2@2 c3@2 ~@4 c3@2 ~ bb2@2 ~@4 d3@2 f3@2]/3",
  U: "[d3@2 bb2@2 c3@2 d3@2 ~@5 bb2@2 a2@2 ~@4 c3@2 bb2@2 ~@4 bb2@2 a2@2 ~@2 f2@2 ~ d2@2 bb1@2 bb1@4 d2@4 f2@4 bb2@4 ~@6]/2",
  V: "~@11 bb1@2 bb1@2 c2@2 d2@2 eb2@2 ~ f2@2 g2@2 a2@2 bb2@4",
  W: "[f2@4 bb2@4 f2@4 ~ bb2@4 f2@4 bb2@4 f2@4 bb2@8 ~@9 f2@8 ~@9 bb1@17 ~@16]/3",
})).s("gm_tuba").gain(0.25)

// bass · tuba · "Bb Tuba"
const bass_2 = note("<A B C@2 D E F ~@3 G@3 H I J K ~ L M N O@2 P Q R S ~@4 T U@3>".pickRestart({
  A: "~ g2 f2 g2", B: "eb2@2 d3 c3", C: "[bb2 a2 d2@3 gb2@3]/2", D: "g2 f2 eb2 a2", E: "g2 f2 g2 gb2",
  F: "f2@3 g2 g2@12", G: "[bb2@2 bb2 g2@2 g2 gb2 gb2@2 bb1@3]/3", H: "d2!3 f2", I: "eb2@2 g2@2 g2@2 a2 bb2",
  J: "eb2@3 g2", K: "g2 a2", L: "~ g2 bb2 d3", M: "c3 bb2@7", N: "a2 a2@7", O: "bb2/2",
  P: "~@4 f2@13 bb2@4 g2@4 f2@4 g2@3", Q: "~@5 f2@4 ~@7", R: "~@3 bb2@2 bb2@2 ~@2 f2@2 bb2@8 ~@3 bb2@2 ~@4 eb2@2 ~@2",
  S: "eb2 ~@15", T: "~@13 bb1@2 c2@2 d2@2 eb2@2 ~ f2@2 g2@2 a2@2 bb2@4",
  U: "[f2@4 bb2@4 f2@4 ~ bb2@4 f2@4 bb2@4 f2@4 bb2@8 ~@9 f2@8 ~@9 bb1@17 ~@16]/3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Bb Tuba" · soft notes
const bass_soft = note("<~@25 A B C@2 D@2 E ~@3>".pickRestart({
  A: "~@12 a2 bb2 ~ bb2", B: "~ bb2 ~@14", C: "[~@22 bb1@4 bb1@4 ~ c2@4 d2@4 ~@4 bb2@2 ~@6 c3@2 ~@7 g2@2 ~@2]/2",
  D: "[~@4 c3@2 ~@7 d2@2 ~@6 g2@2 ~@6 bb2@2 a2@2 ~@2 f2@2 ~ d2@2 bb1@2 bb1@4 d2@4 f2@4 bb2@4 ~@6]/2",
  E: "~@11 bb1@2 ~@19",
})).s("gm_tuba").gain(0.2)

// bass · tuba · "Bb Tuba"
const bass_3 = note("<A B C@2 ~@2 D E F G H@3 I J K L ~ M N O P@2 Q R S T@3 U@3 V@3>".pickRestart({
  A: "~ g2 d2 g2", B: "g2@4 d2@2 c2 eb2", C: "[d2 f2 g2@3 c2@3]/2", D: "~@6 g2 a2", E: "bb2 d3 c3 bb2",
  F: "d3 g2 bb2@2", G: "a2 g2@3", H: "[bb2@2 bb2 c3@2 c3 d2 d2@2 d2@3]/3", I: "g2!3 f2", J: "c2@2 eb2@2 e2@2 f2 g2",
  K: "c2 g2@2 eb2", L: "eb2 d2", M: "~ g2 bb2 d3", N: "d3 d3@7", O: "c3 gb2@7", P: "g2/2",
  Q: "~@8 d2@8 ~ bb1@4 g2@4 f2@4 g2@3", R: "~@6 d2@13 ~@13",
  S: "~@3 bb2@2 bb2@2 ~@2 f2@2 bb2@8 ~@3 bb2@2 a2@2 bb2@2 eb2@2 bb2@2",
  T: "[eb2@2 bb2@2 ~@19 bb2@2 a2@2 bb2@2 eb2@2 eb2@2 bb2@2 eb2@2 ~@17 bb1@4 bb1@4 ~ c2@4 d2 db2 c2 b1 bb1@2 bb1@2 ~@2 f1@2 bb1@2 bb1@2 ~@3 f2@2 bb1@2 bb1@2 ~@2 f1@2]/3",
  U: "[bb1@2 bb1@2 ~@2 f2@2 bb1@2 bb1@2 ~@3 f1@2 bb1@2 bb1@2 ~@2 f2@2 bb1@2 bb1@2 ~@2 f1@2 bb1@2 bb1@2 ~@3 f2@2 ~@16 bb2@4 ~ g2@4 eb2@4 bb1@4 bb1@2 bb1@2 c2@2 d2@2 eb2@2 ~ f2@2 g2@2 a2@2 bb2@4]/3",
  V: "[f2@4 bb2@4 f2@4 ~ bb2@4 f2@4 bb2@4 f2@4 bb2@8 ~@9 f2@8 ~@9 bb1@17 ~@16]/3",
})).s("gm_tuba").gain(0.4)

// bass · tuba · "Bb Tuba"
const bass_4 = note("<A B C@2 ~@2 D E F G H@3 I J K L M N O P Q R S T@2 U V@2 W@3 X@3>".pickRestart({
  A: "~ g2 d2 bb1", B: "c2@4 d2@2 c2 a1", C: "[d2!2 bb1@3 a1@3]/2", D: "~@6 g2!2", E: "g2 bb2 g2!2",
  F: "g2@2 bb2@2 g2@2 f2 eb2", G: "c2 c2@3", H: "[bb1@2 bb1 c2@2 c2 d2 d2@2 g1@3]/3", I: "bb1!3 a1",
  J: "a1@2 c2@2 d2@2 d2 c2", K: "eb2 c2", L: "c2 bb1", M: "~ bb2", N: "d3", O: "~@2 g2 ~", P: "~@2 gb2 ~",
  Q: "~@2 g2!2", R: "g1", S: "~@13 bb1@4 bb1@4 g1@4 d2@4 g2@3",
  T: "[~ bb1@17 bb1@2 bb1@2 c2@2 d2@2 eb2@2 ~ f2@2 g2@2 a2@2 bb2@2 bb2@2 ~@2 f2@2 bb2@8 ~@13]/2",
  U: "~@6 c3@2 bb2@2 c3@2 ~ f2@2 c3@2 f2@2 c3@2 ~@11",
  V: "[~@6 c3@2 f2@2 f2@2 f2@2 f2@2 a2@2 bb2@2 ~@2 bb1@4 bb1@4 ~ c2@4 d2 db2 c2 b1 bb1@2 bb1@2 ~@2 f1@2 bb1@2 bb1@2 ~@3 f2@2 bb1@2 bb1@2 ~@2 f1@2]/2",
  W: "[bb1@2 bb1@2 ~@2 f2@2 bb1@2 bb1@2 ~@3 f1@2 bb1@2 bb1@2 ~@2 f2@2 bb1@2 bb1@2 ~@2 f1@2 bb1@2 bb1@2 ~@3 f2@2 ~@16 bb2@4 ~ g2@4 eb2@4 bb1@4 bb1@2 bb1@2 c2@2 d2@2 eb2@2 ~ f2@2 g2@2 a2@2 bb2@4]/3",
  X: "[f2@4 bb2@4 f2@4 ~ bb2@4 f2@4 bb2@4 f2@4 bb2@8 ~@9 f2@8 ~@9 bb1@17 ~@16]/3",
})).s("gm_tuba").gain(0.4)

stack(bass, bass_2, bass_soft, bass_3, bass_4)