Strudelify

HAPPY XMAS IN SOL

John Lennon and Yoko Ono

KeyG majorTempo92 bpm
0:00/0:00
// HAPPY XMAS IN SOL — John Lennon and Yoko Ono
// 92 bpm, 12/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/8 at bar 1, 12/8 at bar 2) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5332521; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/6)

// 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 J K V W B C D E F G H I J K L X N O P Y>".pickRestart({
  A: "~@9 [b3,g4] [c4,a4] [d4,b4]", // Em F G
  B: "[b3,g4] [g3,b3]!2 ~ [b3,d4]!2 ~ [g3,b3] [g3,b3,d4] [b3,g4] [c4,a4] [d4,b4], g2@23 ~, ~ d4@2 a3@3 c4@2 ~@4", // Em G Bm G Em F G
  C: "~ [c4,e4]!2 ~ [a3,c4,e4]!2 ~ [e3,a3] [a3,c4,e4] a4 b4 [e4,a4,c5], a2@23 ~, a4@3 b3@3 d4@2 ~ [c4,e4]@2 ~", // C Am A5 Am C
  D: "[c4,e4,b4]@2 [c4,e4]@2 [c4,e4]@2 [c4,f#4]@2 [c4,f#4]@2 [c4,f#4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2 d4@2 [c4,f#4,b4]@2 [f#4,b4,d5]@2 b4 a4, d2@23 ~, ~ a4@2 ~@8 [c4,f#4]", // Cmaj7 C Cdim C B Bm Cdim
  E: "[g3,b3,g4]@2 ~ e4 [g3,b3,d4]@2 ~@2 [b3,d4]@2 [b3,d4]@2 ~@2 [g3,b3]@2 [b3,d4,g4]@2 [g2,e5]@2 [a2,e5]@2 [b2,f4,b4,e5]@2, g2@17 ~@7, ~ [g3,b3] ~ a3@3 c4@2 ~ [f4,b4]@2 ~", // G Bm G C A5 E G Fdim
  F: "[e4,g4,d5]@2 [e4,g4]@2 [e4,g4]@2 [e3,g3,b3]@2 [e3,g3,b3]@2 ~ g2 [g3,c4]@2 [g3,c4]@2 [c4,e4,g4]@2 c5@2 d5@2 [c3,g4,c5,e5]@2, c3@5 [e3,g3,b3] c3@3 [c3,e4,g4]@2 ~, ~ c5@2 d4@2 ~ f4@2 ~@4", // Em7 Em C5 C Em C
  G: "[f4,a4]@2 [f4,a4]@2 [f4,a4]@2 [f4,a4]@2 [f4,a4]@2 ~ a2 [f4,a4,e5]@2 [f4,a4]@2 [f4,a4]@2 d5@2 e5@2 [d3,a4,d5,f5]@2, d3@5 [f4,a4] d3@3 [d3,f4,a4]@2 ~, d5 c#5 ~@2", // F Fmaj7 F Dm F Dm
  H: "[g4,b4,e5]@2 [g4,b4]@2 [g4,b4]@2 [d4,g4]@2 [d4,g4]@2 ~ d2 [d4,g4]@2 [d4,g4]@2 [b3,d4,g4]@2 [g2,e5]@2 [a2,g5]@2 [b2,f4,b4,e5]@2, g2@5 [d4,g4] g2@3 ~@3, ~ d5@2 b4@3 a4@2 ~ [f4,b4]@2 ~", // Em G G5 G C A7 E G5 …
  I: "[e4,g4,c5]@2 ~ a4 [e4,g4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2 ~ g2 [g3,c4,f4]@2 [g3,c4,f4]@2 c4@2 [c3,a4]@2 [g2,a4]@2 a4!2, c3@5 [g3,c4,e4] c3@3 ~@2 [c2,a#3,e4], ~ [e4,g4] ~@7 [a#3,e4]@2 ~", // C Em C Csus4 F Gsus2 C C7 …
  J: "g4@2 ~@2 [a3,c4]@2 [a3,c4]@2 [a3,c4]@2 ~ c2 [a3,c4]@2 [a3,c4]@2 f4!2 [a3,f4]@2 [a#3,g4]@2 [f2,c4,a4]@2, f2@6 f2@5 ~ f2@6 f2@4 ~@2, [a3,c4]@2 ~@3 [a3,c4] ~@2 [a3,c4] ~@3, ~@2 f4@9 ~@13", // Am Dm D# F Am
  K: "[b3,d4]@2 [b3,d4]@2 [b3,d4]@2 [b3,d4]@2 [b3,d4]@2 ~ d2 [b3,d4]@2 [b3,d4]@2 [b3,d4,g4]@2 [g2,b3,d4,g4]@2 [f2,a3,c4,f4]@2 [e2,g3,b3,e4]@2, g4@5 [b3,d4] ~@6, g2@6 g2@5 ~ g2@6 ~@6", // Bm G F Em Bm
  L: "[f3,a3,d4] [f3,a3]!2 [d2,f3,a3] [a1,f3,a3] [d2,f3,a3] [f3,a3]!2 [f3,a3,d4] d4 c4 [f2,f3,a3,c4], d2@3 ~@3 f2@3 [f2,f3,a3]@2 ~, ~@2 d4@9 ~@13", // Dm F Dm F Dm F
  M: "[e3,g3]!5 [c2,c3,e3,g3] [f#3,a3,d4]!3 [b3,g4] [c4,a4] [d4,b4], c4@11 ~@13, [c2,c3]@3 [c2,c3]@2 ~ [d2,d3]@3 [d2,d3]@3", // Em C D Em F G C D
  N: "[b3,d4]!6 [c4,e4]!3 [b3,d4]!3, g2@11 ~ [g2,a4]@6 [g2,g4]@6, g4 f#4 ~@2", // Bm C Bm Gsus2 G
  O: "[c4,e4]!12, a2@11 ~ [a2,b4]@6 [a2,a4]@6, a4 g#4 ~@2", // C Asus2 A
  P: "[a3,c4]!6 [g3,c4]!3 [a3,c4]!3, [d2,d3]@11 ~ [d2,d3,e4]@6 [d2,d3]@4 ~@2, g4 f#4 ~ f#4", // Am C5 Am D Dsus2 D
  Q: "[b3,d4]!3 [a3,c4]!3 [c4,e4]!3 [g2,b3,d4] [a2,b3,d4] [b2,b3,d4], g2@11 ~ [g2,a4]@6 ~@6, g4 f#4 ~ g4", // Bm Am C G Bm7 Bm Gsus2
  R: "[e4,g4]!6 [f4,a4]!3 [e4,g4]!3, [c2,c3]@11 ~ [c2,c3,d5]@6 [c2,c3,c5]@6, c5 b4 ~@2", // Em F Em C Csus2 C
  S: "[f4,a4]!12, [d2,d3]@11 ~ [d2,d3,e5]@6 [d2,d3,d5]@6, d5 c#5 ~@2", // F D Dsus2 D
  T: "[f4,a4]!3 [f4,g4]!3 [c4,f4]!3 [d4,f4]!3, g2@11 ~ [g2,a4]@6 [g2,b4]@6, c5 b4 ~@2", // F Fsus2 F5 Dm Gsus2 G
  U: "[e4,g4]@2 [e4,g4]@2 [e4,g4]@2 [d4,f4]@2 [d4,f4]@2 [d4,f4]@2 [f4,a4,d5]@2 [f4,a4]@2 [c2,c3,c4]@2 [c3,a4]@2 [g2,a4]@2 a4!2, [c2,c3]@11 ~ [c2,c3]@4 ~@6 [c2,a#3,e4]@2, c5@3 b4@3 ~@3 [a#3,e4]@2 ~", // Em Dm F C F Gsus2 C C7 …
  V: "[f3,a3]!3 [d2,f3,a3] [a1,f3,a3] [d2,f3,a3] [f3,a3]!2 [f3,a3,d4] d4 c4 [f2,f3,a3,c4], d4@11 ~@13, d2@3 ~@3 f2@3 [f2,f3,a3]@2 ~", // F Dm F Dm F
  W: "[e3,g3]!5 [c2,c3,e3,g3] [f#3,a3]!2 [f#3,a3,d4] b4!2 [c4,f#4,b4], c4@11 ~@7 [c4,f#4]@4 ~@2, [c2,c3]@3 [c2,c3]@2 ~ [d2,d3]@3 [d2,d3]@3", // Em C F#m D B Cdim C D
  X: "[e3,g3]!5 [c2,c3,e3,g3] [f#3,a3]!5 [d2,d3,f#3,a3], c4@11 ~ d4@11 ~, [c2,c3]@3 [c2,c3]@2 ~ [d2,d3]@3 [d2,d3]@2 ~", // Em C F#m D C D
  Y: "[b3,d4]!3 [a3,c4]!3 [c4,e4]!3 [g2,b3,d4,g4]@3, g2@11 ~ [g2,a4]@6 ~@6, g4 f#4 ~@2", // Bm Am C G Gsus2
})).s("gm_piano").gain(0.3)

stack(piano)