Strudelify

die wacht am rhein

Karl Wilhelm

KeyB♭ majorTempo120 bpm
0:00/0:00
// die wacht am rhein — Karl Wilhelm
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/70561; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trombone
const trombone = note(`<
  ~@2 A B C D E F G H I J C K L M N O P Q R ~ A B C D E F G H I J C K L M N O P Q S
>`.pickRestart({
  A: "~@2 d3!2", B: "g3 f3 eb3 g3", C: "f3@3 f3 f3@2 ~@2", D: "f3@6 f3@2 f3@3 f3 f3@3 f3", E: "f3@2 ~ f3",
  F: "f3@3 f3 f3@3 f3 f3@4 e3@4", G: "f3 ~", H: "eb3@3 d3 c3@2 c3@2", I: "d3@3 d3 d3@2 ~@2", J: "f3@3 f3 f3@2 f3@2",
  K: "d3@2 d3!2", L: "eb3@3 eb3 f3@2 f3@2", M: "g3!2", N: "gb3@3 ~", O: "bb3@2 a3 g3", P: "f3@3 f3 f3@2 g3@2",
  Q: "f3 eb3", R: "d3 ~", S: "d3@3 ~",
})).s("gm_trombone").gain(0.48)

// other · trombone
const trombone_2 = note(`<
  A B C D E F G H I J K L M N O P Q N R S T B C D E F G H I J K L M N O P Q N R S U
>`.pickRestart({
  A: "~@3 f3", B: "bb2@3 d3 f3@2 f3@2", C: "d3@3 f3 bb3@2 bb3@2", D: "g3 b3 c4!2", E: "d4@3 c4 c4@2 f3@2",
  F: "bb3@6 bb3@2 a3@3 a3 ab3@3 ab3", G: "a3@2 ~ c4", H: "d4@3 d4 d4@3 d4 c4@4 bb3@4", I: "a3@2 ~ f3",
  J: "a3@3 bb3 f3@2 f3@2", K: "f3@3 bb3 bb3@2 d4@2", L: "c4@3 bb3 a3@2 a3@2", M: "bb3@3 a3 bb3@2 ~@2", N: "bb3@2 bb3!2",
  O: "bb3@3 c4 bb3@2 bb3@2", P: "g3!2", Q: "a3@3 ~", R: "bb3@3 bb3 bb3@2 bb3@2", S: "bb3 [f3,a3]", T: "[f3,bb3]@2 ~ f3",
  U: "[f3,bb3]@3 ~", // Bb5
})).s("gm_trombone").gain(0.32)

// bass · trombone · "Bass Trombone"
const bass = note("<~@2 A B C D E F G H I J K L M N O P Q R S ~ A B C D E F G H I J K L M N O P Q R T>".pickRestart({
  A: "~@2 bb2 g3", B: "eb3 d3 c3 eb3", C: "f3@3 f3 f3@2 ~@2", D: "bb2@6 bb2@2 c3@3 c3 d3@3 d3", E: "c3@2 ~ c3",
  F: "bb2@3 bb2 a2@3 g2 c3@4 c3@4", G: "f2 ~", H: "f3@3 f3 ~@4", I: "bb2@3 bb2 bb2@2 bb3@2", J: "a3@3 bb3 f3@2 f3@2",
  K: "bb3@3 f3 d3@2 ~@2", L: "bb2@2 bb2!2", M: "eb3@3 c3 d3@2 d3@2", N: "d3 eb3", O: "d3@3 ~", P: "g3@2 f3 eb3",
  Q: "d3@3 bb2 d3@2 eb3@2", R: "f3 f2", S: "bb2 ~", T: "bb2@3 ~",
})).s("gm_trombone").gain(0.35)

stack(trombone, trombone_2, bass)