Strudelify

Octavia

Marcus Warner

KeyF majorTempo88 bpm
0:00/0:00
// Octavia — Marcus Warner
// 88 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 1) are rendered on a constant 3/4 grid of one bar per cycle
// note: ch 1 "Flute" named as a pipe, played on flute (its acoustic bass patch is not one); ch 3 "Horn in F" named as a brass, played on brass section (its violin patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5952568; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 144 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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 · brass section · "Horn in F"
const brass_section = note(`<
  ~@9 A B C B D B E F G H G I J H K L G ~@15 A B C B D B E F G ~@16 M@3 N M@3 O P Q P R P S T U ~@2 V W V X Y Z ~@5 AA@5
  ~@5 AB@3 AC@3 ~@8 AD@2 AE@2 AF AG F AH M@3 N M@3 O Q AI AJ R P S AK AL ~
>`.pickRestart({
  A: "~@10 a4 c5", B: "d5@3 e5 f5@2 e5@3 d5 c5@2", C: "d5@4 c5@2 a4@4 a4 c5", D: "d5@2 f5@4 g5@4 a4 c5",
  E: "a5@2 g5@2 f5@2 d5@4 a4 c5", F: "d5@3 e5 f5@2 e5@2 d5@2 c5@2", G: "d5", H: "a4 c5", I: "a4!2", J: "g4", K: "d5 c5",
  L: "f5 g5", M: "f4 g4 a4 bb4 c5@2 f4 g4 a4 bb4 c5@2", N: "f4 g4 a4 bb4 c5@2 c5 a4 g4 f4 d4@2",
  O: "f4 g4 a4 bb4 c5@2 f4 g4 a4 bb4 d5@2", P: "~ g4 a4 bb4 c5@2 [f4,g4] g4 a4 bb4 c5@2, f4 ~",
  Q: "~ g4 a4 bb4 c5@2 f4 g4 a4 bb4 c5@2, f4@3 a4 ~@2", R: "f4 g4 a4 bb4 c5@2 c5 a4 g4 f4 d4@2, d4 f4@2 g4 ~@2",
  S: "~ g4 a4 bb4 [c5,d5]@2 f4 g4 a4 bb4 c5@2, f4 c5 ~ f5 d5@2", // Csus2
  T: "f4 g4 a4 bb4 c5@2 f4 g4 a4 bb4 c5@2, a4 ~@2 c5@2 ~", U: "f4 g4 a4 bb4 [c4,c5]@2 f4 g4 a4 bb4 d5@2, d4!2 ~ d4@2 ~",
  V: "f4 c4", W: "d4", X: "d4 c4", Y: "d4 e4", Z: "f4", AA: "g4/5", AB: "[~ d5@4 f5]/3", AC: "[g5@3 a5@2 c6]/3",
  AD: "[~@4 a4 c5 d5@18]/2", AE: "[~@4 a4 c5 d5@12 ~@6]/2", AF: "~@4 a4!2 a4@4 d4@2", AG: "a4@3 d4@3 d4@4 a4 c5",
  AH: "e5", AI: "f4 g4 a4 bb4 c5@2 [f4,g4] g4 a4 bb4 c5@2, ~ c5 ~@2 f4@2",
  AJ: "f4 g4 a4 bb4 c5@2 [f4,g4] g4 a4 bb4 c5@2, c5 ~@2", // Fsus2
  AK: "f4 g4 a4 bb4 c5@2 f4 g4 a4 bb4 [f4,c5]@2, d5 c5 ~ a4 g4 ~", AL: "f4 g4 a4 bb4 c5@2 ~@6, d4 ~",
})).s("gm_brass_section").gain(0.22)

// other · tremolo strings · "Violoncello 1"
const tremolo_strings = note(`<
  A B C B D B E F G@2 ~@16 H I H J H K L M B C B D B E F N O P O@4 Q R S T U V S W U R S T U V S X Y Z S T U V S W U N S
  T U V S W U N AA AB AC AD AE AF AD AB AG AH AI AJ AK AL@2 AM AN AO AP AQ AR AS AT AU@2 AV AW@3 B C B D B E F AX AB A
  AB ~@2 A F Z S T U V S W AY N S T U V S X Y AZ@2
>`.pickRestart({
  A: "~@10 a2 c3", B: "d3@3 e3 f3@2 e3@3 d3 c3@2", C: "d3@4 c3@2 a2@4 a2 c3", D: "d3@2 f3@4 g3@4 a2 c3",
  E: "a3@2 g3@2 f3@2 d3@4 a2 c3", F: "d3@3 e3 f3@2 e3@2 d3@2 c3@2", G: "d3/2", H: "d4 a3 d4 c4 a3 c4",
  I: "d4 bb3 d4 c4 a3 c4", J: "d4 bb3 d4 c4 g3 c4", K: "d4 a3 d4 c4 g3 bb3", L: "f3 d3 f3 g3 f3 g3",
  M: "a3@2 f3@2 d3@2 d3@2 ~@2 a2 c3", N: "d3!2 c3 d3@2 ~", O: "d3!3 c3!3", P: "d3!3 a2!3", Q: "bb2!3 c3!3",
  R: "d3!2 c3 d3 ~@2", S: "f3 c4@2 a3@3", T: "f3 c4@2 g3 f3@2", U: "f3 c4@2 a3 g3 f3", V: "d3 f3@2 g3@3",
  W: "f3 c4 d4 a3 g3@2", X: "f3 c4 d4 f4 d4@2", Y: "d4 c4@2 a3 g3 f3", Z: "e3", AA: "f3 c3", AB: "d3", AC: "a2",
  AD: "bb2 c3", AE: "a2 c3", AF: "bb2 a2", AG: "~ bb3 g3 bb3 g3@2", AH: "~ bb3@2 ~ g3@2", AI: "~ bb3@2 ~ g3 bb3",
  AJ: "g3 bb3 g3!2 f3 g3", AK: "f3 g3 a3 g3 g3@2", AL: "bb3@2 ~ g3@2 ~", AM: "bb3@2 a3 bb3 d4 bb3",
  AN: "g3 f3 g3@2 g3 f3", AO: "g3 g3@5", AP: "~@2 c4 d4 c4 d4", AQ: "d4", AR: "d4@6 c4 d4 g4@2 ~@2",
  AS: "c4@2 d4@3 c4 d4@2 bb3@2 g3@2", AT: "a3 bb3 a3 g3 f3 d3", AU: "[c4 d4@3 c4@2 d4@16 c4 d4]/2",
  AV: "g4 ~ c4 d4 f4 d4", AW: "[g3@2 f3@2 g3@28 ~@2 a2 c3]/3", AX: "d3@10 a2 c3", AY: "a3 c4@2 a3 g3 f3",
  AZ: "[d3!2 c3 d3@9]/2",
})).s("gm_tremolo_strings").gain(0.3)

// other · cello · "Violoncello 2"
const cello = note(`<
  ~ A B A C B D E F E A B A C B D E F G H I F A@2 J F C K C L C J L M B N B O B D O P A B A Q A@3 F ~@16 L A L C L R L S
  L A L C L R L S ~@29 A B A C A B E F ~@8 T U V W T X Y Z T U V W T AA AB AC@2
>`.pickRestart({
  A: "d3 c3", B: "d3 a2", C: "d3 e3", D: "bb2 g2", E: "a2 c3", F: "d3", G: "d3 bb2", H: "a2", I: "f3 c3", J: "f3 g3",
  K: "f3!2", L: "f3 e3", M: "d3@2 ~", N: "bb2 a2", O: "bb2 c3", P: "d3!2", Q: "d3 g3", R: "d3 f3", S: "d4!2",
  T: "f3 c4@2 a3@3", U: "f3 c4@2 g3 f3@2", V: "f3 c4@2 a3 g3 f3", W: "d3 f3@2 g3@3", X: "f3 c4 d4 a3 g3@2",
  Y: "a3 c4@2 a3 g3 f3", Z: "d3!2 c3 d3@2 ~", AA: "f3 c4 d4 f4 d4@2", AB: "d4 c4@2 a3 g3 f3", AC: "[d3!2 c3 d3@9]/2",
})).s("gm_cello").gain(0.2)

// bass · contrabass
const bass = note(`<
  ~@18 A B C D A E D F ~@8 G H G I J K L M G H G I J K L M ~@8 N A N D N O P Q ~@34 R S@2 T@4 E U@3 V W V X V W Y Z AA
  AB AC D AC D AD ~@9 AE AF O AG AH AI AJ AK ~
>`.pickRestart({
  A: "a2 g2", B: "a2", C: "bb2 a2", D: "bb2 c3", E: "bb2 g2", F: "g2", G: "d2!3 c2!3", H: "d2!3 a1!3", I: "d2!3 f2!3",
  J: "d2!3 a2!3", K: "bb2!3 g2!3", L: "bb1!3 c2!3", M: "d2!2 c2 d2 ~@2", N: "f2 c3", O: "c3 g2", P: "g2 f2", Q: "e2",
  R: "g2 bb2", S: "g2/2", T: "[f2 g2@3]/2", U: "g2/3", V: "d2 c2", W: "d2 a1", X: "d2 e2", Y: "a1 c2", Z: "d2",
  AA: "~ a2", AB: "bb2", AC: "d3 a2", AD: "d3", AE: "f2 a2", AF: "~ c3@2 g2 f2@2", AG: "d2 f2@2 g2@3", AH: "f2 g2",
  AI: "f2 c3 d3 f3 d3@2", AJ: "d3 c3@2 a2 g2 f2", AK: "d2 ~",
})).s("gm_contrabass").gain(0.25)

stack(brass_section, tremolo_strings, cello, bass)