Strudelify
KeyA♭ majorTempo110 bpm
0:00/0:00
// Low Brass Trio — Connor Jordan and Rocco Ritter
// 110 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 28) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5913068; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 31 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · tuba · "Euphonium"
const tuba = note("<~@4 A B C D E F G H I J K L@2 M N O P Q R S T U V W X Y Z>".pickRestart({
  A: "f3 c3 ab3 c3", B: "f3 db4 c4 bb3", C: "f3 ab3", D: "f3@3 ~", E: "db3 f3 c3 bb2 c3 ~ db3@2",
  F: "f3 g3 c4 ab3 bb3 ab3 g3 eb3", G: "bb2@2 bb3@2 ab3@2 bb3 ab3", H: "db3 eb3 f3 eb3 ab3@2 g3@2",
  I: "f3 eb3 db3 c3 db3 ~@3", J: "db3!2 f3 bb2 ~@2 c3@2", K: "~ db3@2 bb2 c3@3 ab2", L: "bb2!2 ab2 g2 f2@2 ~@2",
  M: "~ f3@2 g3 ab3@2 f3 ~", N: "~@2 ab3!2 g3@2 f3@2 g3@4 c3@2 ~@2", O: "~ g3@2 ab3 bb3@2 g3 ~",
  P: "~@2 bb3!2 ab3@2 g3@2 f3@4 ~@4", Q: "~ f3@2 f4 eb4@2 eb4 ~", R: "~@2 eb4!2 db4 c4 bb3 db4 c4@4 f3@2 ~@2",
  S: "~@2 db4!2 bb3!2 c4!2 f3@4 ~@2 ab3@2", T: "~@2 db4@2 bb3@2 db4@2 db4 bb3 ab3 g3 f3@2 g3@2",
  U: "ab3@2 bb3@2 c4 db4 eb4 f4 bb4@2 g4@2 ab4@2 eb4@2", V: "f4 db4 bb3 db4 eb4!2 bb3@2", W: "ab3 c4 f3 c3 eb3@2 eb3@2",
  X: "eb3@2 eb3@2 bb3 db3 ab3 g3", Y: "f3@2 eb3@2 db3!2 db3@2 eb3!2 eb3@2 db3!2 db3@2",
  Z: "eb3 db3 c3 db3 g3 f3 c3 eb3 eb3@4 ab3@4",
})).s("gm_tuba").gain(0.37)

// bass · tuba
const bass = note("<~@3 A B C D E F G H I J K L ~@2 M N O P Q R S T U V W X Y Z>".pickRestart({
  A: "~@3 c2", B: "f2@3 f2", C: "db2@3 db2", D: "bb1@3 c2", E: "db2@3 ~", F: "f2@3 g2 ab2@3 f2",
  G: "ab2!2 g2 f2 g2@2 c2@2", H: "g2@3 ab2 bb2@3 g2", I: "bb2!2 ab2 g2 f2@2 ~@2", J: "f2@2 ab2@2 eb2@2 f2!2",
  K: "g2!2 db2 eb2 c2@2 f2@2", L: "~ f2@2 db2 eb2@3 bb1", M: "~@4 ab2!2 g2!2 ab2@2 ~@2 ab2@4",
  N: "~ f2 ~ f2 eb2 f2 c2@2", O: "~ c3@2 ~ db3 c3 db3 c3", P: "c3 db3 bb2 c3 c3@2 c3@2 ~@2 c3@2 bb2@2 ab2@2",
  Q: "~ bb2 ab2 g2 ~ ab2 g2 f2", R: "~ db2!2 ab2 ~ ab2 f2!2", S: "~ db2!2 c2 db2 bb1 c2 ab1",
  T: "~ bb1 c2 eb2 f2!2 ab2@2", U: "bb2@4 c3 bb2!3 db3 c3!3 db3 eb3 f3 g3", V: "ab3!2 g3@2 ab3@2 g3@2",
  W: "eb3 g3 db3 ab2 g2 f2 eb2 bb2", X: "c2 g2 eb2 c3 eb2 ab2 f2 ab2", Y: "ab2 g2 ab2@2 ab2 ~@2 ab2",
  Z: "g2@2 g2 ~@2 c2 ~@2",
})).s("gm_tuba").gain(0.39)

stack(tuba, bass)