Strudelify

last christmas

Wham!

KeyF majorTempo120 bpm
0:00/0:00
// last christmas — Wham!
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5872392; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

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

// other · flute
const flute = note(`<
  A B A B C D E F G H I J K L M N O@2 P ~ Q ~ R ~ S T U ~ V W R ~ X Y ~ G H I J K L M N A B A B C D E F Z
>`.pickRestart({
  A: "g5 ~ g5!2 f5 ~ f5!2", B: "e5!3 f5@2 f5!2 ~", C: "a5 ~ a5!2 g5 ~ g5!2", D: "a5!3 g5@2 g5!2 ~",
  E: "f5 ~ f5!2 e5 ~ e5!2", F: "d5!3 e5@2 e5!2 ~", G: "g5@3 g5@2 f5@2 c5", H: "g5!2 a5 f5@3 c5!2",
  I: "g5!2 a5@2 f5@3 f5", J: "e5 f5 e5 d5@3 ~@2", K: "a5@3 g5@4 d5", L: "a5 bb5 a5 g5@3 ~ f5",
  M: "e5 f5 e5 e5@2 f5@2 e5", N: "e5 c5@3 ~@4", O: "[a4,c5]@15 ~", P: "[d5,f5]@15 ~", Q: "[bb4,d5]@15 ~",
  R: "[e5,g5]@2 [e5,g5]!2 ~@4", S: "f5@11 ~@3 f5@2", T: "e5 f5 e5 f5 e5@2 f5@2", U: "g5@2 f5 e5@2 f5 g5 e5",
  V: "a5 g5 f5 g5@2 f5!2 a5", W: "a5 g5 f5 g5 ~@4", X: "[f5,a5]!2 ~ [f5,a5] ~ [f5,a5]!2 ~", Y: "[e5,g5]@15 ~",
  Z: "[a4,c5] ~", // Am
})).s("gm_flute").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B 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 L AC N G H I J K L M N A B A B C D E F AD
>`.pickRestart({
  A: "a4", B: "a4!2", C: "bb4", D: "bb4!2", E: "c5", F: "c5 c4", G: "g4@3 g4@2 f4@2 c4", H: "g4!2 a4 f4@3 c4@2",
  I: "g4!2 a4@2 f4@3 f4", J: "e4 f4 e4 d4 d4@2 ~@2", K: "a4@3 g4@4 d4", L: "a4 bb4 a4 g4@3 ~ f4",
  M: "e4 f4 e4 e4@2 f4@2 e4", N: "e4 c4@3 ~@4", O: "~@2 g4@2 g4 f4@2 f4", P: "c5@3 a4@2 g4 f4@2", Q: "~ g4!4 f4 f4@2",
  R: "d5 d5@2 a4@2 g4@2 f4", S: "f4 ~ a4 d4 f4 g4@2 ~", T: "a4!3 d4 f4 g4@2 ~", U: "e4@2 e4!3 e4@2 d4",
  V: "f4 e4 d4 f4@2 e4@2 ~", W: "[a4,c5]@6 [a4,c5]!2", X: "[a4,c5]", Y: "a4 g4 f4 g4@2 f4!2 a4",
  Z: "a4 g4 f4 g4 ~ f4!2 e4", AA: "f4@2 e4 f4@2 e4 f4 e4", AB: "f4 e4 f4 a4 g4@2 ~@2", AC: "e4 f4 e4 e4@3 f4 e4",
  AD: "c4 ~",
})).s("gm_alto_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B C D E F G@2 H I J K L M N ~ A@2 O ~ E ~ P Q R S T S U ~ V W M X Y H I J K L M N ~ A B C D E F G@2 Z
>`.pickRestart({
  A: "f4", B: "f4!2", C: "d4", D: "d4!2", E: "g4", F: "g4!2", G: "c4", H: "g4@3 g4@2 f4@2 c4", I: "g4!2 a4 f4@3 c4!2",
  J: "g4!2 a4@2 f4@3 f4", K: "e4 f4 e4 d4@3 ~@2", L: "a4@3 g4@4 d4", M: "a4 bb4 a4 g4@3 ~ f4",
  N: "e4 f4 e4 e4@2 f4@2 e4", O: "bb4", P: "e4@2 e4!3 e4@2 d4", Q: "f4 e4 d4 f4@2 e4@2 ~", R: "f4@6 ~ f4",
  S: "e4 f4 e4 f4 e4@2 f4@2", T: "g4@2 f4 e4@2 f4 g4 e4", U: "a4 g4 f4 g4@2 f4!2 a4", V: "f4@2 e4 f4@2 e4 f4 e4",
  W: "f4 e4 f4 a4 g4@2 ~@2", X: "e4 f4 e4 e4@3 f4 e4", Y: "e4 c4@3 ~@4", Z: "f4 ~",
})).s("gm_trumpet").gain(0.3)

stack(flute, alto_sax, trumpet)

More by Wham!