Strudelify

Academic Festival Overture Op.80

Dr. Martin Orlob

KeyB♭ majorTempo120 bpm
0:00/0:00
// Academic Festival Overture Op.80 — Dr. Martin Orlob
// 120 bpm, 3/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/883561; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 21 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · trumpet · "B♭ Trumpet 1/2"
const trumpet = note("<A B@2 C D E F G H E F G H I J I J K L M N>".pickRestart({
  A: "[f4,f5]@5 ~@3 [f4,f5]!2 ~ [f4,f5]@3 [f4,f5]@2", // F
  B: "[eb4,f4,eb5,f5]@5 ~@3 [eb4,f4,eb5,f5]!2 ~ [eb4,f4,eb5,f5]@3 [eb4,f4,eb5,f5]@2", // Ebsus2
  C: "[eb4,f4,eb5,f5]@5 [eb4,f4,eb5,f5]@5 ~ [eb4,f4,eb5,f5]@5", D: "[eb4,f4,eb5,f5]",
  E: "[f4,bb4]@4 [d4,f4] [d4,f4]@5 ~ [f4,bb4]@5", F: "[eb4,g4]@4 [eb4,g4] [eb4,g4]@11",
  G: "[f4,a4]@4 [f4,bb4] [f4,c5]@5 ~ [f4,a4]@5", H: "[f4,bb4]@3 [f4,d5]@2 [f4,bb4]@11",
  I: "[f4,a4]@4 [f4,bb4] [f4,c5]@5 ~ [f4,c5]@5", J: "d5@3 bb4@2 [f4,c5]@5 ~ [f4,c5]@5, f4@5 ~@11",
  K: "[f4,bb4]@4 [f4,a4] [eb4,g4]@3 ~ [g4,eb5]@2 [b4,d5]@3 [g4,c5]@2", L: "[bb4,d5]@5 [a4,c5]@5 ~ [g4,bb4]@5",
  M: "[f4,bb4]@4 [f4,a4] [eb4,g4]@3 ~ [g4,eb5]@2 [f4,d5]@3 [eb4,c5]@2", N: "[bb4,f5]@5 [eb4,a4]@5 ~ [f4,bb4]@5",
})).s("gm_trumpet").gain(0.4)

// other · french horn · "Horn in F"
const french_horn = note("<A B@2 C D E F G H E F G H I J I J K L M N>".pickRestart({
  A: "f4@5 ~@3 f4!2 ~ f4@3 f4@2", B: "c4@5 ~@3 c4!2 ~ c4@3 c4@2", C: "c4@5 c4@5 ~ c4@5", D: "c4",
  E: "d4@4 bb3 bb3@5 ~ bb3@5", F: "bb3@4 bb3 bb3@11", G: "c4@4 c4 c4@5 ~ c4@5", H: "d4@3 f4@2 d4@11",
  I: "f3@4 bb3 c4@5 ~ c4@5", J: "d4@3 bb3@2 a3@5 ~ a3@5", K: "d4@4 d4 bb3@3 ~ eb4@2 f4@3 bb3@2", L: "f4@5 eb4@5 ~ d4@5",
  M: "d4@4 d4 bb3@3 ~ eb4@2 d4@3 c4@2", N: "d4@5 c4@5 ~ bb3@5",
})).s("gm_french_horn").gain(0.4)

// bass · tuba
const bass = note("<A B C D E F G H I F G H J H K H K L M L N>".pickRestart({
  A: "f3@3 e3@2 eb3@3 ~ d3@2 c3@3 bb2@2", B: "a2@3 g2@2 f2@3 ~ eb2@2 d2@3 c2@2", C: "bb1@3 a1@2 g1@3 ~ f1@2 g1@3 a1@2",
  D: "bb1@3 c2@2 d2@3 ~ eb2@2 f2@3 g2@2", E: "a2", F: "bb1@4 bb1 bb1@5 ~ d2@5", G: "eb2@4 eb2 eb2@11",
  H: "f2@4 f2 f2@5 ~ f2@5", I: "bb1@5 [bb1,bb2]@3 ~ [f1,f2]@2 [g1,g2]@3 [a1,a2]@2", J: "bb1@5 bb1@3 ~ bb1@2 c2@3 d2@2",
  K: "bb1@3 d2@2 f2@5 ~ f2@5", L: "d2@4 d2 eb2@3 ~ c2@2 d2@3 eb2@2", M: "f2@5 gb2@5 ~ g2@5", N: "f2@5 f2@5 ~ bb1@5",
})).s("gm_tuba").gain(0.4)

stack(trumpet, french_horn, bass)