Strudelify

William Tell Overture

Gioachino Rossini

KeyD majorTempo120 bpm
0:00/0:00
// William Tell Overture — Gioachino Rossini
// 120 bpm, 2/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5843958; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/2)

// 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 · flute
const flute = note(`<
  ~@4 A@2 B C D B E@3 F G@3 ~ H I H J H I K L M N O P M Q R S T H U V T H W X Y Z AA AB Y Z AC AD AE AF AG AH ~@3 AI AE
  AF AG AH ~@4 H I H J H I K L M N O P M AJ AK AJ AL@2 AM@4 AN@2 AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC
>`.pickRestart({
  A: "f#5@4 ~@2 f#5!2", B: "f#5 e5 d5 e5", C: "f#5 a5 g5 f#5", D: "e5 f#5 e5 g5", E: "e5@2 f#5!2 e5@2 f#5@2",
  F: "e5@2 e5!2 e5@2 e5@2", G: "[e5@17 ~@7]/3", H: "d5 ~ d5 ~", I: "d5!3 ~", J: "e5!2 a5 ~", K: "e5!3 ~",
  L: "d5@2 d5@2 d5@2 a4!2", M: "a4@2 a4!2 a4@2 a4!2", N: "d5@2 e5@2 f#5@2 a4!2", O: "a4@2 a4!2 d5@2 f#5!2",
  P: "e5@2 c#5@2 a4@2 a4!2", Q: "d5@2 e5@2 f#5@2 d5 f#5", R: "a5@9 ~ g5@2 f#5@2 e5@2", S: "d5 f#5 d5 ~",
  T: "d5@2 d5!2 d5@2 d5!2", U: "f#5 ~ d5!2", V: "d5@2 e5@2 d5@2 d5!2", W: "d5 ~ c#6 b5", X: "a5@2 g#5@2 a5@2 f#5!2",
  Y: "f#5@2 f#5!2 f#5@2 f#5!2", Z: "f#5 b5 f#5 b5", AA: "f#5 b5 f#5 e5", AB: "d5@2 c#5@2 b4@2 f#5!2",
  AC: "f#5 b5 a5 g#5", AD: "a5@2 g#5@2 a5@2 e5!2", AE: "e5@2 e5!2 e5@2 f#5@2", AF: "g5 e5@2 g5", AG: "f#5 d5@2 f#5",
  AH: "e5@11 ~@5", AI: "~@6 e5!2", AJ: "f#5 g5 a5 ~", AK: "d5 e5 f#5 ~", AL: "[c#6@15 ~]/2", AM: "f#5 g5 f#5 g5",
  AN: "f#5@2 f#5!2", AO: "f#5@2 d5!2", AP: "d5@2 d5!2", AQ: "~@2 d5!2 d5@2 d5@2", AR: "d5@2 a4!2 a4@2 a4@2",
  AS: "a4@2 f#4!2 f#4@2 f#4@2", AT: "f#4@2 d4!2 d4@2 d4@2", AU: "d4 a4 d5 a4", AV: "f#4 d5 a4 f#4", AW: "d5 a4 d5 a4",
  AX: "f#5 d5 a5 f#5", AY: "d5@2 ~@4 f#5!2", AZ: "a5!4", BA: "a5@4 ~@3 f#5", BB: "f#5@4 ~@3 d4", BC: "d4@15 ~",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_2 = note(`<
  ~@4 A@2 B C D E F@3 G H@3 ~ I J I K I J L J I J I K I J L J M N O P M N Q R M N S P M N Q T ~@7 U V W X Y V W X Z I J
  I K I J L J I J I K I AA AB AA AC@2 AD@4 AE@2 AF AG AH AI AJ AK AL AM AN AM AO AP AQ AR AS
>`.pickRestart({
  A: "d5@4 ~@2 d5!2", B: "d5 a4 f#4 a4", C: "d5 f#5 e5 d5", D: "a4 d5 a4 e5", E: "d5 a4 f#4 d5",
  F: "a4@2 d5!2 a4@2 d5@2", G: "a4@2 a4!2 a4@2 a4@2", H: "[c#5@17 ~@7]/3", I: "a4 ~ a4 ~", J: "a4!3 ~",
  K: "c#5 a4 c#5 ~", L: "c#5!3 ~", M: "b4@2 b4!2 b4@2 b4!2", N: "b4 ~ b4 ~", O: "d5 ~ b4 ~", P: "d5@2 e5@2 d5@2 b4!2",
  Q: "b4 ~ e5!2", R: "e5@2 f5@2 c#5@2 d5 b4", S: "d5 ~ a4 ~", T: "e5 f5 a4 ~", U: "~@6 a4!2", V: "a4@2 a4!2 a4@2 a4 d5",
  W: "e5 a4@2 e5", X: "d5 f#4@2 d5", Y: "c#5@2 c#5!2 c#5@2 a4!2", Z: "a4@11 ~@5", AA: "f#4 g4 a4 ~", AB: "d4 e4 f#4 ~",
  AC: "[g5@15 ~]/2", AD: "a4!4", AE: "d5@2 d5!2", AF: "d5@2 a4!2", AG: "a4@2 a4!2", AH: "~@2 d5!2 d5@2 d5@2",
  AI: "d5@2 a4!2 a4@2 a4@2", AJ: "a4@2 f#4!2 f#4@2 f#4@2", AK: "f#4@2 d4!2 d4@2 d4@2", AL: "d4 a4 d4 a4",
  AM: "f#4 d5 a4 f#4", AN: "d5 a4 d4 a4", AO: "d5@2 ~@4 f#5!2", AP: "f#5!4", AQ: "f#5@4 ~@3 a5", AR: "a5@4 ~@3 a4",
  AS: "a4@15 ~",
})).s("gm_flute").gain(0.3)

// other · flute · soft notes
const flute_soft = note("<~@49 A B C D E B C D F ~@47>".pickRestart({
  A: "~@6 a4!2", B: "a4@2 a4!2 a4@2 a4 d5", C: "e5 a4@2 e5", D: "d5 f#4@2 d5", E: "c#5@2 c#5!2 c#5@2 a4!2",
  F: "a4@11 ~@5",
})).s("gm_flute").gain(0.15)

stack(flute, flute_2, flute_soft)