Strudelify

we wish you a merry christmas

Traditional

KeyG majorTempo220 bpm
0:00/0:00
// we wish you a merry christmas — Traditional
// 220 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 1, 2/4 at bar 32, 1/4 at bar 33, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4847816; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(220/3)

// 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 · piano
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV
  AW AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AX
>`.pickRestart({
  A: "~@11 d4@3 ~@2", B: "g4@3 ~@2 g4@3 a4@3 g4@2 f#4@3", C: "e4@3 ~@2 e4@3 ~@3 e4@3 ~@2",
  D: "a4@3 ~@2 a4@3 b4@3 a4@2 g4@3", E: "f#4@3 ~@2 d4@3 ~@3 d4@3 ~@2", F: "b4@3 ~@2 b4@3 c5@3 b4@2 a4@3",
  G: "g4@3 ~@2 e4@3 ~@3 d4@2 d4@3", H: "e4@3 ~@2 a4@3 ~@3 f#4@3 ~@2", I: "g4@3 ~@2 a4@3 ~@3 a4@3 ~@2",
  J: "d5@3 ~@2 d5@3 e5@3 d5@2 c#5@3", K: "b4@3 ~@2 b4@3 ~@3 b4@3 ~@2", L: "e5@3 ~@2 e5@3 f#5@3 e5@2 d5@3",
  M: "c#5@3 ~@2 a4@3 ~@3 a4@3 ~@2", N: "f#5@3 ~@2 f#5@3 g5@3 f#5@2 e5@3", O: "d5@3 ~@2 b4@3 ~@3 a4@2 a4@3",
  P: "b4@3 ~@2 e5@3 ~@3 c#5@3 ~@2", Q: "d5@3 ~@2 d4@3 ~@3 d4@3 ~@2",
  R: "[d4,g4]@3 ~@2 [d4,g4]@3 [c4,a4]@3 [b3,g4]@2 [d4,f#4]@3", S: "[c4,e4]@3 ~@2 [g3,e4]@3 ~@3 [c4,e4]@3 ~@2",
  T: "[e4,a4]@3 ~@2 [e4,a4]@3 [d4,b4]@3 [c#4,a4]@2 [e4,g4]@3", U: "[d4,f#4]@3 ~@2 [a3,d4]@3 ~@3 [c4,d4]@3 ~@2",
  V: "[f#4,b4]@3 ~@2 [f#4,b4]@3 [e4,c5]@3 [d#4,b4]@2 [f#4,a4]@3", W: "[e4,g4]@3 ~@2 [b3,e4]@3 ~@3 [g3,d4]@2 [b3,d4]@3",
  X: "[c4,e4]@3 ~@2 [f#4,a4]@3 ~@3 [d4,f#4]@3 ~@2", Y: "[b3,g4]@3 ~@2 [e4,a4]@3 ~@3 [c#4,a4]@3 ~@2",
  Z: "[a4,d5]@3 ~@2 [a4,d5]@3 [g4,e5]@3 [f#4,d5]@2 [a4,c#5]@3", AA: "[g4,b4]@3 ~@2 [d4,b4]@3 ~@3 [g4,b4]@3 ~@2",
  AB: "[b4,e5]@3 ~@2 [b4,e5]@3 [a4,f#5]@3 [g#4,e5]@2 [b4,d5]@3", AC: "[a4,c#5]@3 ~@2 [e4,a4]@3 ~@3 [g4,a4]@3 ~@2",
  AD: "[c#5,f#5]@3 ~@2 [c#5,f#5]@3 [b4,g5]@3 [a#4,f#5]@2 [c#5,e5]@3", // F#5 Em D#m C#m
  AE: "[b4,d5]@3 ~@2 [f#4,b4]@3 ~@3 [d4,a4]@2 [f#4,a4]@3", AF: "[g4,b4]@3 ~@2 [c#5,e5]@3 ~@3 [a4,c#5]@3 ~@2",
  AG: "[f#4,d5]@3 ~@2 d4@3 ~@3 a4@3 ~@2", AH: "d5@3 ~@2 [d4,d5]@3 e4@3 [f#4,d5]@2 g4@3",
  AI: "a4 [a4,b4] b4 [a4,b4] a4 [a4,b4] b4 [a4,b4] a4 [a4,b4] b4 [a4,b4] a4 [a4,b4] b4 [a4,b4], c#5@10 ~ c#5@3 ~@2", // Asus2
  AJ: "[f#4,d5]@3 ~@2 [e4,c#5]@3 ~@3 [e4,b4]@3 ~@2", AK: "[e4,a4]@10 ~ e5@3 ~@2",
  AL: "f#5@5 e5@3 e5@3 d5@2 d5@3, [d4,a4]@15 ~", AM: "[a4,a5]@5 a4@3 ~@3 [c#4,e4,a4]@2 a4@3, c#4@5 ~@3",
  AN: "[d4,g4,b4]@3 ~@2 [c#4,e4,a4,e5]@3 ~@3 [c#4,e4,a4,c#5]@3 ~@2", AO: "[d4,f#4,a4,d5]@5 d4@3 ~@3 [c4,d4]@3 ~@2",
  AP: "[b3,d4,g4]@3 ~@2 [g3,b3,d4,g4]@3 a4@3 [g3,b3,d4,g4]@2 f#4@3", // G
  AQ: "[g3,c4,e4]@3 ~@2 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@3 ~@2", // C
  AR: "[a3,c#4,e4,a4]@3 ~@2 [a3,c#4,e4,a4]@3 b4@3 [a3,c#4,e4,a4]@2 g4@3", // A
  AS: "[a3,d4,f#4]@3 ~@2 [a3,d4]@3 ~@3 [a3,d4]@3 ~@2", // D D5
  AT: "[b3,d#4,f#4,b4]@3 ~@2 [b3,d#4,f#4,b4]@3 c5@3 [b3,d#4,f#4,b4]@2 a4@3", // B
  AU: "[b3,e4,g4]@3 ~@2 [b3,e4]@3 ~@3 [b3,d4]@2 [b3,d4]@3", // Em E5 Bm
  AV: "[g3,c4,e4]@3 ~@2 [a3,d4,f#4,a4]@3 ~@3 [a3,d4,f#4]@3 ~@2", AW: "[g3,b3,d4,g4]@3 ~@2 g3@3 ~@3 a4@3 ~@2",
  AX: "[g3,b3,d4,g4]@3 ~@2 g3@3 ~@8", // G
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note(`<
  ~@9 A B C D E F G H I J K L M N O P Q R S T U V W X ~ Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM ~ Y Z AA AB AC AD AE
  AF AG AH AI AJ AK AL AM
>`.pickRestart({
  A: "d4@3 ~@2 a4@3 g4@3 f#4@2 a4@3", B: "g4@3 ~@2 d4@3 ~@3 g4@3 ~@2", C: "e4@3 ~@2 b4@3 a4@3 g#4@2 b4@3",
  D: "a4@3 ~@2 e4@3 ~@3 g4@3 ~@2", E: "f#4@3 ~@2 c#5@3 b4@3 a#4@2 c#5@3", F: "b4@3 ~@2 f#4@3 ~@3 d4@2 f#4@3",
  G: "g4@3 ~@2 c#5@3 ~@3 a4@3 ~@2", H: "f#4@3 ~@2 a3@3 ~@3 d3@3 ~@2", I: "g3@3 ~@2 g3@3 a3@3 g3@2 f#3@3, g2@15 ~",
  J: "[c3,e3]@3 ~@2 e3@3 ~@3 e3@3 ~@2", K: "a3@3 ~@2 a3@3 b3@3 a3@2 g3@3, a2@15 ~",
  L: "[d3,f#3]@3 ~@2 d3@3 ~@3 d3@3 ~@2", M: "b3@3 ~@2 b3@3 c4@3 b3@2 a3@3, b2@15 ~",
  N: "[e3,g3]@3 ~@2 [e2,e3]@3 ~@3 [b2,d3]@2 d3@3", O: "[c3,e3]@3 ~@2 [d3,a3]@3 ~@3 [d2,f#3]@3 ~@2",
  P: "[g2,g3]@3 ~@2 [a2,a3]@3 ~@3 [a2,e3]@3 ~@2", Q: "[d2,d3,d4]@3 ~@2 [d2,d3,d4]@3 e4@3 [f#2,f#3,d4]@2 c#4@3",
  R: "[g2,g3,b3]@3 ~@2 [d2,d3,b3]@3 ~@3 [g1,g2,b3]@3 ~@2", S: "[e2,e3,e4]@3 ~@2 [e2,e3,e4]@3 f#4@3 [g#2,g#3,e4]@2 d4@3",
  T: "[a2,a3,c#4]@3 ~@2 [e2,e3,a3]@3 ~@3 [a1,a2,a3]@3 ~@2", // A A5 A
  U: "[f#2,f#3,f#4]@3 ~@2 [f#2,f#3,f#4]@3 g4@3 [a#2,a#3,f#4]@2 e4@3", // F# D#m
  V: "[b2,b3,d4]@3 ~@2 [f#2,f#3,b3]@3 ~@3 [a2,a3]@2 a3@3", W: "[g2,g3,b3]@3 ~@2 [a2,a3,e4]@3 ~@3 [a1,a2,c#4]@3 ~@2",
  X: "[d2,d3,d4]@3 ~@2 [d2,d3]@3 ~@8", Y: "~@5 e4@3 ~@3 c#4@3 ~@2", Z: "[b3,d4]@3 ~@2 a3@3 ~@3 g#3@3 ~@2",
  AA: "~@5 e3@3 ~@3 a2@3 ~@2, [a3,c#4]@5 ~@3", AB: "~@5 a3@3 ~@3 a3@3 ~@2, d3@15 ~",
  AC: "~@5 a3@3 ~@3 a3@3 ~@2, c#3@15 ~", AD: "[b2,g3]@3 ~@2 [a2,a3]@3 ~@3 [g2,a3]@3 ~@2",
  AE: "[f#2,a3]@5 [e2,f#3,a3]@3 ~@3 [d2,d3,f#3,a3]@3 ~@2", AF: "[g2,d3,g3]@3 ~@2 [g1,b2]@3 ~@3 [b1,d3]@3 ~@2",
  AG: "[c2,c3,e3]@3 ~@2 [e2,c3,e3]@3 ~@3 [g2,c3,e3]@3 ~@2", AH: "[a2,e3]@3 ~@2 [a1,c#3]@3 ~@3 [c#2,e3]@3 ~@2",
  AI: "[d2,d3,f#3]@3 ~@2 [f#2,d3,f#3]@3 ~@3 [a2,d3,f#3]@3 ~@2", AJ: "[b2,f#3]@3 ~@2 [b1,d#3]@3 ~@3 [d#2,f#3]@3 ~@2",
  AK: "[e2,e3,g3]@3 ~@2 [g2,e3,g3]@3 ~@3 [b2,d3,g3]@3 ~@2", AL: "[c2,c3,e3]@3 ~@2 [d2,d3,f#3]@3 ~@3 [d2,d3,f#3]@3 ~@2",
  AM: "[g2,d3]@3 ~@2 [g1,g2]@3 ~@8", // G5 G
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)

More by Traditional