Strudelify

jolly old saint nicholas

Kameron Landes

KeyB♭ majorTempo76 bpm
0:00/0:00
// jolly old saint nicholas — Kameron Landes
// 76 bpm, 2/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5837373; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 39 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(76/2)

// 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.

// chords · marimba · "Marimba 1"
const marimba = note("<A B C D E F G H A B C D E F I J ~@4 K L M L N O G H K L M L N O P Q R@2 S>".pickRestart({
  A: "g4!4", B: "f4!2 f4@2", C: "eb4!4", D: "g4", E: "c4!4", F: "bb3!2 eb4@2", G: "d4 eb4 f4 g4", H: "f4",
  I: "f4 eb4 f4 g4", J: "eb4", K: "[bb4,eb5]!8", L: "[g4,bb4]!8", M: "[eb4,g4]!8", N: "[c4,eb4]!8", O: "[bb3,eb4]!8",
  P: "f4 eb4", Q: "f4 g4", R: "eb4!8", S: "eb4 ~",
})).s("gm_marimba").gain(0.25)

// other · glockenspiel
const glockenspiel = note("<A B C B D E F G A B C B D E H I ~@4 J K L M N O F G J K L M N O P Q R S T>".pickRestart({
  A: "[bb6,eb7]", B: "[g6,bb6]", C: "[eb6,g6]", D: "[c6,eb6]", E: "[bb5,eb6]", F: "d6 eb6 f6 g6", G: "f6",
  H: "f6 eb6 f6 g6", I: "eb6", J: "g6!4", K: "f6!2 f6@2", L: "eb6!4", M: "g6", N: "c6!4", O: "bb5!2 eb6@2", P: "f6 eb6",
  Q: "f6 g6", R: "eb7 bb6 eb7 bb6", S: "eb7 bb6 eb7 d7", T: "eb7 ~",
})).s("gm_glockenspiel").gain(0.3)

// other · xylophone
const xylophone = note("<A B C D E F G H A B C D E F I J ~@4 K L M N O P G H K L M N O P Q R S@2 T>".pickRestart({
  A: "g5!4", B: "f5!2 f5@2", C: "eb5!4", D: "g5", E: "c5!4", F: "bb4!2 eb5@2", G: "d5 eb5 f5 g5", H: "f5",
  I: "f5 eb5 f5 g5", J: "eb5", K: "[bb5,eb6]!2", L: "[g5,bb5]!2", M: "[eb5,g5]!2", N: "[g5,bb5]", O: "[c5,eb5]!2",
  P: "[bb4,eb5]!2", Q: "f5 eb5", R: "f5 g5", S: "eb5!8", T: "eb5 ~",
})).s("gm_xylophone").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B A C A B A C A B A C A B A C A D A D E F E F E F E F E F E F E F@3 A D G
>`.pickRestart({
  A: "x ~ x!3 ~ x ~", B: "x!5 ~ x ~", C: "x!3 ~ x!4", D: "x!8", E: "x ~@2 x", F: "x!2", G: "x",
})).gain(0.25)

// drums · ride bell
const ride_bell = s("rd").struct("<~@20 A B A B A B A B A B A B A B ~@5>".pickRestart({
  A: "~ x!2 ~", B: "~ x ~ x",
})).gain(0.25)

// drums · triangle
const triangle = s("triangles:35").struct("<~@20 A@3 B A@3 B A@3 B A B@3 C@2 ~>".pickRestart({
  A: "x", B: "x!2", C: "x!8",
})).gain(3.46)

stack(marimba, glockenspiel, xylophone, high_tom, ride_bell, triangle)