Strudelify

Der Freischütz Op.77

Weber

KeyB♭ majorTempo240 bpm
0:00/0:00
// Der Freischütz Op.77 — Weber
// 240 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1325771; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(240/4)

// 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 · french horn · "Horn in F"
const french_horn = note(`<
  A@2 B C D E F G H I J K D E F G H I L M N O P Q N R S T U@2 V@2 W X V@2 W X Y@2 Z C V@2 W X V@2 W X Y@2 Z C AA AB AC
  AD AE E F AF AG I AH C AI@2 V@2 W X V@2 W X Y@2 Z AJ
>`.pickRestart({
  A: "[bb3,g4]@2 eb3 g3 [f4,bb4]@4, ~@4 eb4 ~ g4 ~@9", B: "g4@2 eb4!3 ~ eb4 ~", C: "eb4@3 bb3",
  D: "[bb3,eb4]@4 [bb3,eb4] [bb3,f4] [bb3,g4] [bb3,ab4]", E: "[eb4,bb4]@4 g4 ~ g4 ~", F: "f4@2 bb4 ~ f4@2 bb4 ~",
  G: "[bb3,g4] [ab3,ab4] [bb3,g4] [d4,f4] eb4@2 bb3@2", H: "[bb3,eb4]@4 eb4 [d4,f4] [c4,g4] [bb3,ab4]",
  I: "[bb3,bb4]@4 g4 ~ g4 ~", J: "[eb3,f4]@2 [eb3,eb4] [eb3,f4] [eb3,g4]@2 f4@2", K: "[bb3,eb4]@3 bb3",
  L: "f4@2 [g4,bb4]@2 [g4,bb4] ~ [eb4,a4] ~", M: "bb4@3 f4", N: "g4@4 g4 ~ g4 ~", O: "eb4@4 eb4 ~ eb4 ~",
  P: "ab4@4 ab4 ~ ab4 ~", Q: "f4@4 f4 ~ f4 ~", R: "ab4@4 g4 ~ g4 ~",
  S: "[bb3,f4]@2 [bb3,eb4] [bb3,f4] [bb3,g4] ~ [bb3,f4] ~", T: "[g3,eb4]@3 bb4", U: "bb4@2 bb4!2 bb4@2 bb4!2",
  V: "[bb3,eb4]@4 bb3 ~ [eb4,g4] ~", W: "bb4 [d4,ab4] [d4,f4]@2 bb4 [d4,ab4] [d4,f4]@2",
  X: "bb4 [d4,ab4] f4 bb4@2 [d4,ab4] [d4,f4]@2, ~ d4 ~@2", Y: "[bb3,g4]@2 [bb3,eb4] [bb3,g4] [d4,bb4]@4",
  Z: "[eb4,g4]@2 eb4!2 eb4@2 eb4!2", AA: "[bb3,eb4]@4 [bb3,g4] ~ [bb3,g4] ~", AB: "[bb3,eb4]@4 [bb3,g4] ~ [c4,ab4] ~",
  AC: "[bb3,g4]@2 [bb3,eb4]!3 ~ [bb3,g4]@2", AD: "[bb3,f4]@3 bb3", AE: "eb4@4 [bb3,eb4] [g3,f4] [bb3,g4] [g3,ab4]",
  AF: "[bb3,g4] [bb3,ab4] [bb3,g4] [bb3,f4] [g3,eb4]@2 bb3@2", AG: "eb4@4 eb4 [d4,f4] [c4,g4] [bb3,ab4]",
  AH: "ab4@2 f4@2 [g4,bb4] [f4,ab4] [d4,g4] [f4,ab4]", AI: "bb3@2 bb3!2 bb3@2 bb3!2", AJ: "[bb3,eb4]",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  A@2 B C D B E F D B G C D B E F D B H I J K L M N O P Q R@2 S@2 T@2 S@2 T@2 U V W X S@2 T@2 S@2 T@2 U V W X N Y Z AA D
  B E AB D B AC AD R@2 S@2 T@2 S@2 T@2 U V W X
>`.pickRestart({
  A: "eb3@2 bb3!2", B: "eb3@2 eb3!3 ~ eb3 ~", C: "eb3@3 ~", D: "eb3 bb3", E: "bb3 ~ bb3 ~ bb3 ~ bb3 ~",
  F: "eb3 bb3 eb3 ~", G: "g3@2 g3!2 g3@2 g3@2", H: "bb3@4 f3 ~ f3 ~", I: "bb3@2 f3!2 bb3@2 ~@2",
  J: "g3@2 d3!2 g3 ~ g3 ~", K: "c4@2 g3!2 c4 ~ c4 ~", L: "f3@2 c4!2 f3 ~ f3 ~", M: "bb3@2 bb3!3 ~ bb3 ~",
  N: "eb3@2 bb3!2 eb3 ~ bb3 ~", O: "ab3@2 ab3@2 eb3 ~ eb3 ~", P: "bb3@4 bb3 ~ bb3 ~", Q: "eb3@2 bb3!2 eb3@2 bb2@2",
  R: "bb2@2 bb2!2 bb2@2 bb2!2", S: "eb3@4 eb3 ~ eb3 ~", T: "bb2!4", U: "eb3@2 eb3!2 bb2@4", V: "eb3@2 eb3!2 bb3@4",
  W: "eb3@2 eb3!2 eb3@2 eb3!2", X: "eb3", Y: "eb3@2 bb3!2 eb3 ~ c4 ~", Z: "eb3@2 eb3!3 ~ eb3@2", AA: "bb3@3 ~",
  AB: "eb3 bb3 g3 ~", AC: "bb3!4", AD: "eb3@3 bb2",
})).s("gm_french_horn").gain(0.3)

stack(french_horn, french_horn_2)