Strudelify

Tannhäuser WWV 70

Richard Wagner

KeyB majorTempo60 bpm
0:00/0:00
// Tannhäuser WWV 70 — Richard Wagner
// 60 bpm, 3/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5869124; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/3)

// 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 · french horn · "Horn in F"
const french_horn = note(`<
  A B C D E F G H I J K L F M N O P Q R S T U V W P Q R S T U V X Y B@3 Z AA B C D E F G H I J K L F M N AB AC AD AE AF
  AG F AH AI AJ AK AL
>`.pickRestart({
  A: "~@2 b3", B: "b3@2 b3", C: "g#3@16 g#3@3 a3@2 b3@3", D: "b3 a3 e3", E: "f#3@2 a3", F: "a#3@2 a#3",
  G: "b3@16 b3@5 b3@3", H: "b3@4 g#3@4 b3@3 g#3", I: "g#3@4 f#3@4 b3@3 f#3", J: "f#3@2 g#3", K: "a3@8 e3@3 a3",
  L: "a3@2 g#3", M: "g#3 a3 b3", N: "c#4 c4 g#3", O: "f#3@2 a#3@3 f#3", P: "f#3@8 b2@3 b3", Q: "b3@8 a#3@3 a3",
  R: "a3@4 d3@4 d3@3 d4", S: "d4@8 c#4@3 c4", T: "c4@4 f3@4 f3@3 f4", U: "f4@8 e4@3 d#4", V: "d#4 b3!2", W: "a3@2 e3",
  X: "a3@2 f#3", Y: "g#3 f#3 b3", Z: "c#4", AA: "d#4@2 b3", AB: "f#3@8 a#3@13 f#3@3", AC: "f#3@16 ~@7 c#4",
  AD: "c#4@5 c4", AE: "c4@16 ~@7 e4", AF: "e4@5 d#4", AG: "d#4@2 c#4", AH: "g#3 b3!2", AI: "g#3@2 a3", AJ: "e3 c#3@2",
  AK: "f#3@2 f#3", AL: "e3",
})).s("gm_french_horn").gain(0.25)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  ~ A B C D E F G H I J I K L M N O P Q R S T U V W P Q R S T U V O X Y X Z AA A AB C D E F G H I J I K L M AC AD AE AF
  AG AH K L AI@2 AJ AK
>`.pickRestart({
  A: "g#3@2 e3", B: "e3@16 e3@5 e3@3", C: "e3!3", D: "c#3@2 f#3", E: "c#3@2 c#3", F: "f#3@16 d#3@3 e3@2 f#3@3",
  G: "e3@8 e3@3 e3", H: "d#3@8 b2@3 d#3", I: "d#3@2 e3", J: "f#3@8 e3@3 d#3", K: "g3@2 g3", L: "g#3 a3 f#3",
  M: "g#3 f#3 e3", N: "d#3@2 e3@3 d#3", O: "d#3@2 f#3", P: "g3 f#3@2", Q: "f#3 a3 c4", R: "a#3 a3@2", S: "a3 c4 d#4",
  T: "c#4 c4@2", U: "b3 a3 g#3", V: "e3@2 e3", W: "d#3 f#3 b3", X: "g#3@2 g#3", Y: "f#3@2 f#3", Z: "a#3", AA: "a3@2 b3",
  AB: "e3@16 e3@3 e3@2 e3@3", AC: "d#3@8 e3@8 e3@5 e3@3", AD: "d#3@16 ~@7 g#3", AE: "g#3@5 g#3", AF: "g#3@16 ~@7 b3",
  AG: "b3@5 b3", AH: "b3@2 g#3", AI: "e3/2", AJ: "e3@2 d#3 c#3 d#3@2", AK: "b2",
})).s("gm_french_horn").gain(0.2)

// other · french horn · "Horn in F"
const french_horn_3 = note(`<
  ~ A B C D@2 E F G H I J K L M N O P Q R S T U V W P Q R S T U X Y Z AA AB AC AD A B C D@2 E F G H I J K L M AE AF AG
  AH AI AJ AK L AL AM AA AN
>`.pickRestart({
  A: "e3@2 g#2", B: "c#3@16 b2@3 c#3@2 g#2@3", C: "g#2 a2 g#2", D: "f#2@2 f#2", E: "a2@16 a2@5 a2@3",
  F: "g#2@4 e2@4 g#2@3 e2", G: "b2@8 b2@3 a2", H: "a2@2 g#2", I: "f#2@8 g#2@3 f#2", J: "f#2@2 e2", K: "d#2@2 d#3",
  L: "e3 f#3 d#3", M: "c#3 d#3 e3", N: "f#3@2 f#2@3 b2", O: "b2@2 d3", P: "e3 d3 c#3", Q: "d3 f#3 a3", R: "g3 f3 e3",
  S: "f3 a3 c4", T: "a#3 g#3 g3", U: "f#3 f3 e3", V: "a2@2 c3", W: "b2 d#3 f#3", X: "a2@2 a2", Y: "b2@2 d#3",
  Z: "e3@2 e3", AA: "b2@2 b2", AB: "g#2@2 g#3", AC: "f#3", AD: "b2@2 b3", AE: "f#3@8 f#2@8 f#2@5 b2@3",
  AF: "b2@16 ~@7 c#3", AG: "c#3@5 g#2", AH: "g#2@16 ~@7 e3", AI: "e3@5 b2", AJ: "b2@2 c#3", AK: "d#3@2 d#3",
  AL: "c#3 b2 a2", AM: "g#2 a2 a#2", AN: "e2",
})).s("gm_french_horn").gain(0.2)

stack(french_horn, french_horn_2, french_horn_3)

More by Richard Wagner