Strudelify

Gabriel's Oboe - for Sax Choir

Sean Ohmann

KeyB♭ majorTempo64 bpm
0:00/0:00
// Gabriel's Oboe - for Sax Choir — Sean Ohmann
// 64 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 21, 4/4 at bar 23, 6/4 at bar 25, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5897812; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 32 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(64/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.

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@2 A B C D E F G H I@2 J K L B M N O P Q R@2 S@2 T ~@2 U V@3>".pickRestart({
  A: "~@6 f4@2 bb4@2 c5 bb4 a4@2 bb4 a4", B: "g4@5 bb4 a4 g4", C: "f4 eb4 f4@12 f4@2",
  D: "bb4@2 f4@2 f4@2 d4@2 d4 f4 bb4 d5 f5@4", E: "f5@4 eb5@4 eb5@2 d5@2 d5@28 c5@3 d5 ~ c5 d5 ~",
  F: "bb4@4 ~ g4 bb4 eb5", G: "eb5@3 d5@3 d5@14 bb4@2 g5@2", H: "g5@7 f5", I: "f5/2",
  J: "bb3 c4 d4 eb4 f4 g4 f4@2 eb4@2 d4 f4 f4@12", K: "bb4@3 c5@3 bb4@3 a4@3 bb4@4 a4@4 g4@2 f4@2 g4@6 f4@6 f4@12",
  L: "f4@4 ~@2 f4@2 bb4@2 c5 bb4 a4@2 bb4 a4", M: "f4@2 eb4@2 f4@17 f4@3", N: "d4 bb4 bb4@4 ~ f4",
  O: "d4@4 f4@4 bb4@4 bb4@6 bb4@3 c5@3 bb4@18 a4@3 bb4@3", P: "g4@7 f4 eb4@4 g4@2 g4@2",
  Q: "bb4 c5 bb4 a4 bb4 a4 g4 f4 g4 f4 g4 a4 bb4@2 d5@2",
  R: "[bb4@60 bb4@3 a4@3 g4@3 f4@3 g4@3 f4@3 eb4@3 d4@3 eb4 f4 ~ g4 a4 ~ bb4@3 f4 g4 ~]/2",
  S: "[a4 bb4 ~ c5@3 g4 a4 ~ bb4 c5 ~ bb4@24 a4@24 ~@6 d4@6 gb4@6 a4@6 c5@4 bb4@4 a4@4]/2", T: "bb4 ~", U: "~@3 eb4",
  V: "[e4 gb4 a4 bb4@8 ~]/3",
})).s("gm_alto_sax").gain(0.25)

// other · alto sax · "Alto Saxophone"
const alto_sax_2 = note("<~@12 A B C D E F G H I J@2 K@2 L ~@2 M N@3>".pickRestart({
  A: "bb3 c4 d4 eb4 f4 g4 f4@2 eb4@2 d4 f4 f4@12", B: "bb4@3 c5@3 bb4@3 a4@3 bb4@4 a4@4 g4@2 f4@2 g4@6 f4@6 f4@12",
  C: "f4@4 ~@2 f4@2 bb4@2 c5 bb4 a4@2 bb4 a4", D: "g4@5 bb4 a4 g4", E: "f4@2 eb4@2 f4@17 f4@3", F: "d4 bb4 bb4@4 ~ f4",
  G: "d4@4 f4@4 bb4@4 bb4@6 bb4@3 c5@3 bb4@18 a4@3 bb4@3", H: "g4@7 f4 eb4@4 g4@2 g4@2",
  I: "bb4 c5 bb4 a4 bb4 a4 g4 f4 g4 f4 g4 a4 bb4@2 g4@2",
  J: "[g4@36 a4@24 bb4@3 a4@3 g4@3 f4@3 g4@3 f4@3 eb4@3 d4@3 eb4 f4 ~ g4 a4 ~ bb4@3 f4 g4 ~]/2",
  K: "[a4 bb4 ~ c5@3 g4 a4 ~ bb4 c5 ~ bb4@24 a4@24 ~@6 a3@6 d4@6 gb4@6 a4@4 g4@4 gb4@4]/2", L: "g4 ~",
  M: "~ gb4 e4 eb4", N: "[e4 gb4 e4 f4@8 ~]/3",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@12 A B C D E F G H I J@2 K L M N@2 O P@3>".pickRestart({
  A: "~@12 f3 g3 a3 bb3 c4 d4 eb4@3 c4@3", B: "d4@3 eb4@3 d4@3 c4@3 d4@4 c4@4 bb3@2 a3@2 bb3@12 c4@6 d4@6",
  C: "c4@4 ~@2 c4@2 d4@2 eb4 d4 c4@2 d4 c4", D: "d4", E: "eb4 d4 c4 bb3 c4 bb3 a3 bb3 c4@8",
  F: "d4 eb4 d4@2 d4 eb4 d4@2", G: "d4@2 f4@2 f4 eb4 d4@18", H: "eb4 d4 eb4!2", I: "eb4 d4@3 d4@2 d4@2",
  J: "[f4 eb4@4 d4 f4!2]/2", K: "eb4 d4 f4@6", L: "d4 d4@3", M: "d4@2 d4 eb4", N: "[d4 c4@4 ~@2 bb3]/2",
  O: "c4 bb3 ab3 g3", P: "[g3 b3 a3 bb3@8 ~]/3",
})).s("gm_tenor_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax_2 = note("<~@12 A B C D E F G H I J@2 K@2 L@3 M N@3>".pickRestart({
  A: "~@12 f3 g3 a3 bb3 c4 d4 a3@3 f3@3", B: "f3 eb3", C: "f3@2 ~ f3 f3@4", D: "g3@5 g3 a3 g3", E: "f3",
  F: "f3@4 f3@2 g3 a3", G: "g3 f3", H: "g3!4", I: "f3!2 g3 f3", J: "[g3@5 bb3 d4 eb4]/2", K: "[bb3 c4@4 a3@3]/2",
  L: "[bb3@2 bb3 bb3@2 bb3@2 a3@2 ~@2 bb3]/3", M: "ab3 gb3 e3 eb3", N: "[e3 gb3 e3 f3@8 ~]/3",
})).s("gm_tenor_sax").gain(0.25)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<~@12 A B C@2 D E F G H I@4 J@3 K L@3>".pickRestart({
  A: "~@12 a2 g2 f2 eb2", B: "d2 eb2", C: "[f2@2 ~ eb2 d2@8 d3@4]/2", D: "eb3 d3 c3 bb2 c3 bb2 a2 g2 f2@8",
  E: "bb2@5 f2 d2 bb2 a2@5 f2 d2 a2", F: "g2@4 f2 bb2 f2 d2", G: "eb2 g2 bb2 eb3", H: "bb2 a2 g2 f2",
  I: "[eb2@10 d2@4 eb2@4 f2@8 gb2@3 c3 bb2 a2]/4", J: "[g2@2 f2 eb2@2 f2@4 ~@3]/3", K: "~@3 eb3",
  L: "[c3 b2 a2 bb2@8 ~]/3",
})).s("gm_baritone_sax").gain(0.3)

stack(alto_sax, alto_sax_2, tenor_sax, tenor_sax_2, baritone_sax)