Strudelify

Niedersachsenlied

Herman Grote

KeyF majorTempo120 bpm
0:00/0:00
// Niedersachsenlied — Herman Grote
// 120 bpm, 4/4, key F 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/855216; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 29 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, 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 · trumpet · "Bb Trumpet"
const trumpet = note("<A B C D E B C D F G H I J K L M N O P Q L R S O P Q L R F>".pickRestart({
  A: "~@12 f4@3 f4", B: "[f4,bb4] f4 [d4,g4] d4", C: "[c4,f4]@2 c4@2 ~@2 c4 d4",
  D: "[c4,eb4]@3 [c4,f4] [a4,d5]@3 [eb4,c5]", E: "[f4,bb4]@8 ~@4 f4@3 f4", F: "[f4,bb4]@3 ~",
  G: "[bb4,d5]@3 [bb4,d5] [bb4,d5]@3 [bb4,d5]", H: "[d5,f5] [f4,d5] [eb4,c5] [d4,bb4]", I: "[g4,c5]@3 d5 [g4,c5]@3 g4",
  J: "[g4,c5] ~", K: "[a4,c5]@4 [a4,c5]@3 [a4,c5]", L: "[a4,d5] [a4,c5] [f4,a4] [eb4,f4]",
  M: "[f4,bb4]@3 [f4,a4] [f4,bb4]@3 [bb4,d5]", N: "[c5,f5] ~", O: "[d4,f4]@4 [d4,g4]@3 [d4,a4]",
  P: "[f4,c5] [f4,bb4] [f4,a4] [f4,bb4]", Q: "[eb4,g4]@4 [g4,eb5]@3 [g4,d5]",
  R: "[bb4,d5]@2 eb5 d5 c5 bb4 [a4,c5]@2, ~ bb4 g4 ~", S: "[f4,bb4] ~@3",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Horn F"
const french_horn = note("<A B C D E B C D F G H I J K L M N O P Q L R S O P Q L R F>".pickRestart({
  A: "~@12 f4@3 f4", B: "d4 f4 bb3 d4", C: "a3@2 c4@2 ~@2 c4 d4", D: "a3@3 a3 f4@3 eb4", E: "d4@8 ~@4 f4@3 f4",
  F: "d4@3 ~", G: "f4@3 f4 f4@3 f4", H: "f4!2 eb4 d4", I: "g4!2", J: "e4 ~", K: "f4@4 f4@3 f4", L: "f4!4",
  M: "d4@3 eb4 d4@3 g3", N: "a3 ~", O: "f4@4 g4@3 a4", P: "d4!4", Q: "g4@4 eb4@3 eb4", R: "f4@2 g4@2 e4@2 f4 eb4",
  S: "d4 ~@3",
})).s("gm_french_horn").gain(0.3)

// bass · tuba · "C Tuba"
const bass = note("<A B C D E B C D F G@2 H I J@2 K L M@2 N O P Q M@2 N O P Q>".pickRestart({
  A: "~@12 f2@3 f2", B: "bb2 f2 g2 d2", C: "f2!3 ~", D: "c3 f2!3", E: "bb2 a2 g2 f2", F: "bb2@4 f2@3 f2 bb2@4 ~@4",
  G: "bb2 f2 bb2 f2", H: "eb2 c2 eb2 g2", I: "[c2,c3] [bb1,bb2] [a1,a2] [g1,g2]", J: "[f1,f2] c2 [f1,f2] c2",
  K: "[bb1,bb2] [c2,c3] [bb1,bb2] [g1,g2]", L: "f2 eb2 d2 c2", M: "bb1 f2 bb1 f2", N: "eb2 d2 c2 bb1",
  O: "[f1,f2] [c2,c3] [f1,f2]!2", P: "[bb1,bb2] [c2,c3]", Q: "[bb1,bb2]@4 f2@3 f2 bb1@4 ~@4",
})).s("gm_tuba").gain(0.3)

stack(trumpet, french_horn, bass)