Strudelify

O Holy Night

Lunaki Shirayu

KeyD majorTempo75 bpm
0:00/0:00
// O Holy Night — Lunaki Shirayu
// 75 bpm, 12/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (6/8 at bar 1, 12/8 at bar 2, 6/8 at bar 4, 12/8 at bar 4, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5887806; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 29 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/6)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · violin
const violin = note("<A@2 B C ~@4 D E F G H I J K L M N O P Q R S T U V W X>".pickRestart({
  A: "[~@3 d5@5 a4@4]/2", B: "b3@8 ~ g4@3", C: "g4 ~", D: "~@6 f#4@3 f#4@2 a4", E: "a4@5 a4 b4@2 b4 g4@2 b4",
  F: "d5@6 a4@2 a4 g#4@2 f#4", G: "c#5@3 a4@2 b4 c#5@3 d5@2 c#5", H: "f#4@6 ~@5 c#4", I: "c#4 d4 e4 c#4",
  J: "d4@2 c#4 f#4@2 a3 d4@3 f#4@2 f#4", K: "c#4 d4 a3 d4", L: "d4@2 d4 a4@2 d4 f#4@3 c#5 d5 e5", M: "f#5@9 e5@2 d5",
  N: "e5@3 a5", O: "b5@8 b5 c#6 b5 c#6", P: "d6@6 d6@3 ~@2 f#5", Q: "d6@6 c#6@5 f#5", R: "a5@9 a5@2 g5",
  S: "f#5@8 e5 f#5@2 e5", T: "f#5@3 a5", U: "c#6@9 ~@2 c#5", V: "a5@3 e5", W: "d5@6 c#5@3 d5@2 e5", X: "f#5",
})).s("gm_violin").gain(0.3)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@3
  [~@6 d4 f#4 a4 d5 a4 f#4]
  [d4 f#4 a4 d5 a4 f#4 d4 f#4 a4 d5 a4 f#4]
  [g3 b3 d4 g4 d4 b3 d4 f#4 a4 d5 a4 f#4]
  [d4 f#4 a4 d5 a4 f#4 d4 f#4 a4 d5 a4 f#4]
  [a3 c#4 e4 g4 e4 c#4 d4 f#4 a4 d5 a4 f#4]
  ~@21
>`).s("gm_pizzicato_strings").gain(0.25)

// other · viola
const viola = note("<A@2 B C ~@8 D E F E G H I J H K L K M N O P Q>".pickRestart({
  A: "[~@12 f#3@2 a3@2 d4@2 a4@2 d4@2 e4@6 d5 [d5,e5] c#5 [c#5,d5] a4@2 e4@2 d4@2 c#4@10]/2", // Dsus2 Dmaj7
  B: "f#3@2 b3@2 d4@2 a4@2 d4@2 e4@6 d5 c#5 a4@2 e4@2 d4@2", C: "c#4 ~", D: "~@11 a3", E: "a3 b3 e3 a3",
  F: "b3@2 a3 d4@2 f#3 b3@3 a3@2 a3", G: "b3@2 a3 d4@2 f#3 a3@6", H: "~ f#3 b3 d4 b3 f#3 ~ f#3 b3 d4 b3 f#3",
  I: "~ c#4 f#4 a4 f#4 c#4 ~ c#4 f#4 a4 f#4 c#4", J: "~ g3 b3 e4 b3 g3 ~ g3 b3 e4 b3 g3",
  K: "~ f#3 a3 d4 a3 f#3 ~ c#4 e4 a4 e4 c#4", L: "~ f#3 a3 d4 a3 f#3 ~ b3 d4 g4 d4 b3",
  M: "~ f#3 a3 d4 a3 f#3 ~ f#3 a3 d4 a3 f#3", N: "~ c#4 e4 a4 e4 c#4 ~ c#4 e4 a4 e4 c#4", O: "b3", P: "a4@6 e4@5 c#4",
  Q: "a4",
})).s("gm_viola").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_2 = note("<~@3 A B C B D B E B F G ~@16>".pickRestart({
  A: "~@6 d3 a3 d4 f#4 d4 a3", B: "d3 a3 d4 f#4 d4 a3 d3 a3 d4 f#4 d4 a3", C: "g3 d4 g4 b4 d4 b3 d3 a3 d4 f#4 d4 a3",
  D: "a3 e4 a4 c#5 a4 e4 d3 a3 d4 f#4 d4 a3", E: "d3 a3 d4 f#4 d4 a3 g3 d4 g4 b4 g4 d4",
  F: "f#3 c#4 f#4 a4 f#4 c#4 f#3 c#4 f#4 a4 f#4 c#4", G: "b3 f#4 b4 d5 b4 f#4 b3 f#4 b4 d5 ~@2",
})).s("gm_pizzicato_strings").gain(0.25)

// other · cello
const cello = note("<A@2 B C D E F G H I H J K ~@4 L M N L O P O Q R S O H>".pickRestart({
  A: "[~@3 f#4@5 c#4@4]/2", B: "d4@8 ~ b3@3", C: "b3 ~", D: "f#3@3 f#3@2 f#3 a3@5 a3", E: "b3@2 b3 g3@2 b3 d4@6",
  F: "a3@2 a3 f#3@2 e3 d3@3 f#3@2 g3", G: "a3@3 g3@2 e3 d3@6", H: "d3", I: "d3 g3", J: "f#3", K: "b2", L: "b2!2",
  M: "f#3!2", N: "e3!2", O: "d3 a2", P: "d3 g2", Q: "d3!2", R: "a2!2", S: "[b2,d3]",
})).s("gm_cello").gain(0.25)

// other · pizzicato strings
const pizzicato_strings_3 = note(`<
  ~@13
  [a2 c#3 e3 a3 e3 c#3 a2 c#3 e3 a3 e3 c#3]
  [d3 f#3 a3 d4 a3 f#3 d3 f#3 a3 d4 a3 f#3]
  [a2 c#3 e3 a3 e3 c#3 a2 c#3 e3 a3 e3 c#3]
  [d3 f#3 a3 d4 a3 f#3 d3 f#3 a3 d4@3]
  ~@12
>`).s("gm_pizzicato_strings").gain(0.25)

stack(violin, pizzicato_strings, viola, pizzicato_strings_2, cello, pizzicato_strings_3)