Strudelify

Christmas Medley

pianolover868

KeyE majorTempo60 bpm
0:00/0:00
// Christmas Medley — pianolover868
// 60 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 4/4 at bar 3, 2/4 at bar 3, 4/4 at bar 6, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5869380; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 55 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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.

// chords · piano
const piano = note(`<
  A B@2 C D@2 E F G H@4 I@3 J@7 K L@2 M N O@2 P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ ~@2 AK AL
>`.pickRestart({
  A: "~@7 [d3,a3,f#4,d5]", // D
  B: "[[d3,d4,a4,c#5]@5 [g4,b4] [d3,d4,f#4,a4]@9 [g3,b3,e4,g4]@3 [a2,a3,d4,f#4]@6 [a2,a3]@3 g3@3 [d3,f#3,d4]@11 ~ [g3,d4,g4,b4]@11 ~ [a2,a3,g4,c#5]@11 ~ d4 d5 d4 [d4,d5] d5 d4 [d4,d5] d5 d4 [d4,d5] d5 d4 [d4,d5]@6 [d4,d5]@6 [d2,d3]@3 [a4,d5]@3, ~@24 [c#4,e4]@6 ~@36 [d2,d3]@23 ~@7]/2", // Dmaj7 G D Em D A D G …
  C: "[d2,d3]@3 [a4,d5]@3 [d2,d3]@3 [a4,d5]@3 [d2,d3]@3 [a4,d5]@3 [d2,d3]@3 [a4,d5]@3 [d2,d3]@3 [a4,d5]@3 [d2,d3]@3 [a4,d5]@3 [d2,d3]@3 [a4,d5]@3 d4 ~@2 d4 ~@2, ~@7 [d2,d3]", // D D5 D D5 D D5 D D5 …
  D: "[d4 ~@2 d4 ~ e4 [d2,a2,a3,a4]@3 [d2,a2,a3,a4]@3 [d2,a2,a3,a4]@3 ~@3 [e2,e3]@3 [e2,e3]@3 [e2,e3]@3 [e2,e3,c#4] ~ [f#2,f#3,d4] e4 ~@2 e4 ~@2 e4 ~@2 [f#4,f#5] ~ [e4,e5] [d4,d5]@3 [d5,d6]@6 [b4,b5]@3 a5@4 ~ g5 f#5@3 g5@3 [a2,d3,f#4,f#5]@6 [a2,c#3,e4,e5]@6 [d2,a2,d4,f#4,d5]@11 ~ d4@3 a4@3, [d2,d3]@6 ~@12 c#4 ~@2 c#4 ~@2 c#4 ~@5 [g2,g3]@9 ~@3 d3@23 ~@25 d3@6, ~@42 d2@11 ~ d2@11 ~@31]/2", // D5 E C#m D F# E D B …
  E: "a4 g4 f4 e4 a2@2 a#2@2 [g2,g4,a#4]@2 [e4,c5]@2 ~@2 a#3 f4, a2@6 d3@6 d4@11 ~@7 a2@11 ~ d3@6", // Gm C
  F: "f4@3 e4@3 d3@6 a2@6 [a#2,d4,d5]@6 [g2,f4,f5]@6 [a2,e3,a4,c#5,a5]@11 ~ [g2,d3,a#4,g5]@6, a2@6 d4@11 ~@31", // A# G7 A Gm
  G: "[f2,c3,a4,f5]@2 [f2,c3,a4,f5]@2 ~ [f3,a3,d4,g4] [a#2,a3,d4,a4]@2 [c3,g3,e4,g4]@2 [c3,a3,g4,a4]@2 [c3,g3,e4,g4]@2 [f3,a3,c4,a4]@2", // F Dm A#maj7 C Am7 C F
  H: "[a#4@3 a4@3 a4@3 g4@3 [d3,f4]@3 [c3,f3,e4]@3 ~@6 f5 ~ e5 d5@3 g5@11 ~ a4@6 c5@6 d5@3 c5@3 a4@3 g4@3 e4@6 ~@6 a#4@3 g4@3 a#4@3 d#5@3 ~@5 d6@12 ~@12 [a#3,d4,f4]@5 ~ f3@5 ~@6 [c4,d#4,f4]@5 ~ g3@5 ~@6 [a#3,d4,f4]@5 ~ [a#3,d4,f4]@5 ~ f3@5 g3@5 ~@12 f4@5, f3@6 d3@6 ~@6 [d2,a2,d4]@23 ~ [d2,a2]@23 ~ [d2,a2,d3]@23 ~ [a#2,d4]@4 a#5@13 ~@85, ~@66 f4@17 ~@9 [a#3,a#4]@16 ~@5 f3@11 ~ [a#3,d4,f4]@11 ~@6 [c4,d#4,f4]@11 ~@12 [c4,d#4,f4]@11 d4@11 ~@5, ~@72 d4@17 ~@2 [d#3,f4]@16 a#2@16 ~@2 a#2@16 ~ a#2@16 ~ a#2@16 ~ a#2@16, ~@93 [d#5,g5]@15 ~@22 g3@11 ~@6 f3@16 ~@19 f3@10]/4", // Dm Fmaj7 A# F7 A# D5 A# F7 …
  I: "[~ d#4@5 ~ g4@5 ~ d#4@5 ~@6 f3@5 ~ [g3,d#4]@5 ~@12 d4@5 ~@6 f3@5 ~ [g3,d#4]@5 ~ c3@11 g2@5 ~@7 [d#4,g4]@5 [g4,a#4]@5 ~ [f4,a4]@11 f4@5 ~ d4@11 ~ f4@5 [a#2,d#4]@6, ~ a#2@16 ~ a#2@16 ~ a#2@16 ~@2 a#2@16 ~@18 f2@16 ~ f2@16 ~ a#2@16 ~@7, ~@7 g3@11 d4@11 ~@6 d4@11 ~@7 d#4@11 ~@6 e4@16 ~@58, ~@41 f3@11 ~@92]/3", // Cm D# Gm F D#5
  J: "[g4@5 ~ d#4@5 d4@11 ~ d#4@5 ~ d4@11 d4@5 ~ d#3@5 d3@5 ~ [c3,d#4]@5 ~ f3@11 c3@5 ~@7 [d#4,g4]@5 [c4,d#4]@5 ~ [d4,f4]@11 ~@6 d2@5 ~ f#2@5 ~ [a2,d4]@5 d4@5 ~ e4@5 ~ [c3,d4,f#4]@5 ~ [a#2,a#3,d4,g4]@5 [c3,a#3,d4,g4]@5 ~ [d3,d4,f#4,a4]@5 ~ [d4,g4,a#4]@5 [d4,g4,a#4]@5 ~ [g4,a#4,d5]@5 ~ [f4,a4,c5]@5 ~ [g4,a#4]@5 [f4,a4]@5 ~ [e4,g4]@5 ~ a4@5 [a#3,g4]@5 ~ [a#3,f4]@5 ~ [a3,f4]@5 ~ [g3,f4]@5 [a3,f4]@16 ~@13 f4@5 ~ d#4@5 g4@5 ~ d#4@5 ~@6 f3@5 ~ [g3,d#4]@5 ~@12 d4@5 ~ d#3@5 ~ d3@5 [c3,d#4]@5, ~@11 a#2@16 ~@2 a#2@16 ~ d#4@11 ~@6 [c4,d#4]@16 ~ a#2@27 ~@7 d4@11 ~@6 d3@11 ~@24 g2@16 ~ c3@16 ~ c3@16 ~ c3@16 ~ f2@11 ~@6 a#2@16 ~@2 a#2@16 ~ a#2@16 ~ a#2@16 ~@17, ~@251 d4@11 ~@24 d4@11 ~@6 d4@11 ~@6 d#4@11 ~@5, ~@257 f3@11 ~@6 g3@11 ~@24 f3@11 ~@16]/7", // Cm D# Cm Dm D5 D7 Gm D …
  K: "~ f3@11 ~ c3@5 a#2@11 ~ f2@5 a#2@11 ~@2, ~ [c4,d#4]@16 ~ [d4,f4]@27 ~@3", // Cm Dm
  L: "[~@5 d5@5 c5@5 ~ d5@5 ~ c5@5 a#4@5 ~ c5@5 ~ c5@5 ~ b4@5 c5@5 ~ g4@5 ~ f4@5 g4@5 ~ f5@11 ~ g5@11, ~@5 [a#1,a#2,f4,a#4]@16 ~ [f1,f2,f4,a4]@16 ~ [c2,c3,e4,g4]@16 ~ [g1,g2,c4,e4]@16 ~ [c2,c3,g4,c5,e5]@22 ~]/2", // A#5 F C
  M: "[c2,c3,a4,c5,e5]@23 ~ g5@6 f5@6 e5@6 d5@6, ~@24 [d2,d3,a4]@23 ~, ~@4 d5@3 ~", // Am D5
  N: "[c2,c3,e4,g4,c5]@23 ~ [d4,f4,b4]@11 ~ [a4,c5]@6 [b4,d5]@6, ~@24 [g2,g3]@23 ~", // C Bdim Am Bm G
  O: "[c3@11 ~ [f3,a3]@11 ~ [e3,g3]@11 ~ [d3,f3]@11 ~ [c3,e3]@23 ~ [g2,c3]@23 ~, [e4,g4,c5]@91 ~@5]/2", // F Em Dm C C5 C
  P: "c5 g4 c5 e5 c5 g5 f5 c5 a5 f5 a4 f4, c2@11 ~ g2@11 ~ f2@11 ~ a2@11 ~",
  Q: "c4 g4 e4 g4 e4 g4 c5 g4 e5 g5 e5 c6, c2@11 ~ g2@11 ~ c2@11 ~ g2@11 ~",
  R: "c6 e5 g5!2 e5 f5!2 d5 b4 g4 f4 g4, e2@11 ~ g2@11 ~ d2@11 ~ g2@11 ~",
  S: "c4 g3 c4 e4 d4 e4 g4 e4 g4 c5 g4 d5, c2@11 ~ g2@11 ~ c2@11 ~ g2@11 ~",
  T: "e5 c5 g5 e5 c5 g5 a5 f5 c5 f5 c5 a4, c2@11 ~ g2@11 ~ f2@11 ~ g2@11 ~",
  U: "g4 e4 c4 g3 c4 e4 g4 e4 g4 f#4 d4 f#4, c2@11 ~ g2@11 ~ c2@11 ~ g2@11 ~",
  V: "e4 b4 g4!2 e5 b4!2 f#4 d#5 f#5 d#5 a4, e2@11 ~ e2@11 ~ b2@11 ~ f#2@11 ~",
  W: "e4 g4 e4 b4 g4 b4 e5 b4 e5 g5 e5 g5, e2@11 ~ g2@11 ~ b2@11 ~ e2@11 ~",
  X: "g5 d5 g5 d5 b4 d5 b4 g4 b4 g4 d5 g4, g2@11 ~ g2@11 ~ g2@11 ~ g2@11 ~",
  Y: "c4 e4 c4 g4 e4 g4 c5 g4 c5 e5 d5 c5, c2@11 ~ e2@11 ~ c2@11 ~ c2@11 ~",
  Z: "b4 g4 b4 a4 g4 a4 g4 f4 g4 e4 d4 e4, g2@11 ~ g2@11 ~ g2@11 ~ g2@11 ~",
  AA: "e4 c4 e4 g4 e4 g4 c5 g4 c5 e5 d5 c5, c2@11 ~ e2@11 ~ c3@11 ~ g2@11 ~",
  AB: "a5 e5 c5 a4 [c4,e4] c4 a5 e5 c5 a4 [c4,e4] c4 a5 e5 c5 a4 e4 ~ a1 c2 e2 a2 c3 e3, [a3,c4]@4 [a3,c4]@4 a3@4 [a3,c4]@4 [a3,c4]@4 a3@4 a3@23 ~, ~@24 c4@10 c4@13 ~", // C Am
  AC: "b5 g5 e5 b4 g4 e4 b5 g5 e5 b4 g4 e4 b5 g5 e5 b4 g4 ~ e2 g2 b2 ~ g3 b3, [e3,g3]@4 [e3,g3]@4 [e3,g3]@4 [e3,g3]@4 [e3,g3]@4 [e3,g3]@4 [e3,g3]@18 e3@5 ~, ~@34 e4@13 ~", // Em
  AD: "d6 a5 f5 d5 a4 f4 d6 a5 f5 d5 a4 f4 d6 a5 f5 d5 a4 f4 d2 f2 a2 d3 f3 a3, [f3,a3]@2 [f3,a3]@2 [f3,a3]@2 [f3,a3]@2 [f3,a3]@2 [f3,a3]@2 [f3,a3]@11 ~", // F
  AE: "a5@2 e5@2 c5@2 a4@2 [c4,e4]@2 c4@2 a5@2 e5@2 c5@2 a4@2 [c4,e4]@2 c4@2 e5@3 c5@3 a4@3 ~@3 a2@3 c3@3 e3@3 g3@3, [a3,c4]@4 [a3,c4]@4 a3@4 [a3,c4]@4 [a3,c4]@4 a3@4 [a3,c4]@23 ~, ~@33 e4@14 ~", // C Am
  AF: "[e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 f4@11 ~ d5@11 ~, g4@11 ~ e5@11 ~ [e3,c4]@23 ~", // C
  AG: "[e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 ~@4 [e3,c4]@4 [f3,a3]@23 ~, [g4,c5]@4 [e3,c4] ~@7, ~@18 [e5,g5]@17 ~@13", // C F C5 C Em
  AH: "[e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [e3,c4]@4 [g3,b3]@23 ~", AI: "[e3,c4]!12", AJ: "[g3,b3]!12",
  AK: "c3@11 ~ [f3,a3]@11 ~ [e3,g3]@11 ~ [d3,f3]@11 ~", AL: "[c2,c3,c4,e4,g4,c5]@23 ~",
})).s("gm_piano").gain(0.3)

stack(piano)