Strudelify
KeyC majorTempo120 bpm
0:00/0:00
// The first Nowel — Shepherd-carol (Hirten-Weihnachtslied)
// 120 bpm, 3/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2, 2/4 at bar 9, 1/4 at bar 9, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/495436; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 33 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

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

// other · alto sax · "Stimme 2"
const alto_sax = note("<A B C D E D F G H B C D E D F G I ~@16>".pickRestart({
  A: "~@11 e4@2 d4@3", B: "c4@8 d4@3 e4@2 f4@3", C: "g4@11 f4@5", D: "e4@5 g4@5 ~ f4@5", E: "e4@11 c4@2 d4@3",
  F: "g4@5 f4@5 ~ g4@5", G: "e4@5 e4@5 ~ d4@5", H: "c4@11 e4@2 d4@3", I: "c4@11 ~@5",
})).s("gm_alto_sax").gain(0.48).pan(0.7)

// other · alto sax · "Alt"
const alto_sax_2 = note("<~@16 A B C D E F G H I B C D E F G H J>".pickRestart({
  A: "~@11 b3@5", B: "g3@11 c4@5", C: "b3@11 e4@5", D: "f4@11 f4@5", E: "e4@11 g4@5", F: "e4@5 e4@5 ~ f4@5",
  G: "e4@11 d4@5", H: "c4@5 e4@5 ~ d4@5", I: "c4@11 b3@5", J: "c4@11 ~@5",
})).s("gm_alto_sax").gain(0.48).pan(0.7)

// other · tenor sax · "Tenor"
const tenor_sax = note("<~@16 A B C D E F G C H B C D E F G C I>".pickRestart({
  A: "~@11 g3@2 f3@3", B: "e3@11 a3@5", C: "g3@11 g3@5", D: "a3@8 b3@3 c4@2 d4@3", E: "e4@11 d4@5",
  F: "c4@5 c4@5 ~ c4@5", G: "c4@11 f3@5", H: "g3@11 g3@2 f3@3", I: "g3@11 ~@5",
})).s("gm_tenor_sax").gain(0.48).pan(0.3)

// bass · baritone sax · "Bass"
const bass = note("<~@16 A B C D E F G H I B C D E F G H J>".pickRestart({
  A: "~@11 g2@5", B: "c3@11 a2@5", C: "e3@11 c3@5", D: "f3@8 g3@3 a3@2 b3@3", E: "c4@11 b3@5", F: "a3@5 g3@5 ~ f3@5",
  G: "c4@5 c3@5 ~ d3@5", H: "e3@3 f3@2 g3@5 ~ g2@5", I: "c3@11 g2@5", J: "c3@11 ~@5",
})).s("gm_baritone_sax").gain(0.48).pan(0.7)

stack(alto_sax, alto_sax_2, tenor_sax, bass)