Strudelify

Blue Christmas

Elvis Presley

KeyC majorTempo85 bpm
0:00/0:00
// Blue Christmas — Elvis Presley
// 85 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 7 "Guitar  (BB)" named as a guitar, played on electric guitar clean (its vibraphone patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 8 "Voices" voice oohs (copy of ch 1 "Harmonica" harmonica)
// note: Full arrangement: all 69 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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.

// bass · acoustic bass · "Bass    (BB)"
const bass = note(`<
  A B C D A@2 D@4 A@2 E@2 C@4 F G A@2 D@4 A@2 E@2 C H D@2 A D A@2 D@4 A@2 E@2 C@4 F G A@2 D@4 A@2 E@2 C H D@2 A I J
>`.pickRestart({
  A: "f2@11 ~ f2@10 c2@2", B: "d2@11 ~ d2@10 a2@2", C: "g2@11 ~ g2@10 d2@2", D: "c2@11 ~ c2@10 g2@2",
  E: "c2@11 ~ d2@11 ~", F: "c2@11 ~ f2@6 c2@6", G: "g2@11 ~ c2@11 ~", H: "f2@11 ~ f2@10 b1@2", I: "f2@3 c2",
  J: "f2@13 ~@11",
})).s("gm_acoustic_bass").gain(0.24)

// chords · piano · "Piano   (BB)"
const piano = note(`<
  A B C D E F D G H@2 A I J K L@2 M N O P E F Q R Q R A I K J S T D G E D E F Q R Q R U@2 V W L@2 X@2 Y Z A I D G H@2 A
  I AA AB S AC H@2 A AD@2
>`.pickRestart({
  A: "~@11 a3, a4, f2@11 ~, ~ a3@2 f4@2 a3@2 c4@2 f4@3, ~ c4!2 f4 a3 c4",
  B: "~@11 f3, f4, d2@11 ~, ~ f3@2 d4@2 f3@2 a3@2 d4@3, ~ a3!2 d4 f3 a3",
  C: "~@5 g3 ~@2 a#3 ~@2 g3, g2!2, ~ g3@4 ~@2 g3@3 ~@2, ~ a#3!2 ~@2 a#3, ~ f4 ~ f4",
  D: "~@11 g3, c2 c3, c4!2 e4!2, ~ g3@3 g3@3 c4@2 ~ c4@2, ~@2 e3@3 e3@2 ~ g3@3 ~",
  E: "~@11 c4, f2 f3, f4!2 a4!2, ~ c4@3 c4@3 f4@2 ~ f4@2, ~@2 a3@3 a3@2 ~ c4@3 ~",
  F: "~@5 a3 ~@5 c4, f2@6 ~@2 c4@3 ~, f4!2 a4!2, ~ c4@2 ~ c4@2 ~ f4@3 f4@2, ~ a3 ~ f3@3",
  G: "~@5 e3 ~@5 g3, c2@6 ~@2 g3@3 ~, c4!2 e4!2, ~ g3@2 ~ g3@2 ~ c4@3 c4@2, ~ e3 ~ c3@3",
  H: "[~@5 e3 ~@2 g3 ~@14 e3, c2@3 ~@2 g3 ~ g3!2 c3@3, ~ e3@2 a#3@3 ~ e3@2 a#3@3 ~@3 a#3@2 ~@3 g3@2 g3@2, ~ g3!2 c3@3 c2@3 ~@3, ~@11 e3@2 e3@2 ~@2 e3@2 e3@2 a#3@2 ~]/2",
  I: "~@11 a3, [f2,a4], ~ a3@3 ~ a3@2 ~ a3@2 ~@2, ~@2 c4@2 c4@2 ~ c4@2 ~ c4@2, ~@3 f4@2 ~ f4@2 ~ f4@3", // F
  J: "~@5 d#3 ~@5 f#3, c2 d2, c4!2 d4!2, ~ g3@3 g3@2 ~ a3@3 a3@2, ~@2 d#3@3 ~@3 f#3@3 ~",
  K: "~@5 d#3 ~@5 f#3, c2 d2, ~ d#3@2 c4@3 ~@2 a3@2 a3@2, ~@2 g3@2 g3@2 ~ f#3@2 c4@3",
  L: "[~@5 a#3 ~@2 d4 ~@2 a#3@2 ~@10 a#3, g2 g2@2 g2, ~ a#3@4 ~@2 a#3@3 ~@3 a#3@4 a#3@2 a#3@4 ~, ~ d4!2 ~@2 d4 ~ d4!2 ~ d4!2, ~@3 a#4@3 ~@3 a#4@6 a#4@4 ~@2 a#4@3]/2",
  M: "~@11 b3, b4, g2@11 ~, ~ b3@2 f4@2 b3@2 d4@2 f4@3, ~ d4!2 f4 b3 d4",
  N: "~@11 b3, [g2,b4], ~ b3@3 ~ b3@2 ~ b3@2 ~@2, ~@2 d4@2 d4@2 ~ d4@2 ~ d4@2, ~@3 f4@2 ~ f4@2 ~ f4@3", // G
  O: "~@5 e3 ~@2 c4 ~@2 f#3, c2@2 [f2,a4] [c2,d#4], ~ e3@2 a#3@3 ~ a3@2 ~@3, ~ g3!2 ~@2 d#3", // F Cm
  P: "~@5 a#3 ~@5 e3, g2 c2, ~ a#3@4 ~@2 e3@2 a#3@3, ~ d4!2 ~ g3!2, ~ a#4 ~@2",
  Q: "~@11 e3, e4, c2@11 ~, ~ e3@2 a#3@2 e3@2 g3@2 a#3@3, ~ g3!2 a#3 e3 g3",
  R: "~@11 e3, [c2,e4], ~ e3@3 ~ e3@2 ~ e3@2 ~@2, ~@2 g3@2 g3@2 ~ g3@2 ~ g3@2, ~@3 a#3@2 ~ a#3@2 ~ a#3@3", // C
  S: "~@11 d4, g2!2, g4!2 a#4!2, ~ d4@3 d4@3 g4@2 ~ g4@2, ~@2 a#3@3 a#3@2 ~ d4@3 ~",
  T: "~@5 f3 ~@2 g#3 ~@2 f3, f2!2, ~ f3@4 ~@2 f3@3 ~@2, ~ g#3!2 ~@2 g#3, ~ d4 ~ d4",
  U: "[~@5 a3 ~@2 c4 ~@2 a3@2 ~@10 a3, f2 f2@2 f2, ~ a3@4 ~@2 a3@3 ~@3 a3@4 a3@2 a3@4 ~, ~ c4!2 ~@2 c4 ~ c4!2 ~ c4!2, ~@3 a4@3 ~@3 a4@6 a4@4 ~@2 a4@3]/2",
  V: "~@5 d#3 ~@5 f#3, [c2,d#4] d2, ~ d#3@3 ~@8, ~@2 g3@2 g3@2 ~ f#3@2 c4@3, ~@3 c4@2 ~@3 a3@2 a3@2", // Cm
  W: "~@5 d#3 ~@5 f#3, [c2,d#4] d2, ~ d#3@3 ~@4 f#3@3 ~, ~@2 g3@2 g3@2 ~ a3@3 a3@2, ~@3 c4@2 ~ d4@3 d4@3", // Cm
  X: "[~@5 g3 ~@2 b3 ~@2 g3@2 ~@10 g3, g2 g2@2 g2, ~ g3@4 ~@2 g3@3 ~@3 g3@4 g3@2 g3@4 ~, ~ b3!2 ~@2 b3 ~ b3!2 ~ b3!2, ~@3 f4@3 ~@3 f4@6 f4@4 ~@2 f4@3]/2",
  Y: "~@5 e3 ~@2 c4 ~@2 f#3, c2@2 [f2,a4] c2, c4!2 ~@2, ~ g3@3 g3@2 ~ a3@2 ~@3, ~@2 e3@3 ~@5 d#3@2", // F
  Z: "~@5 a#3 ~@5 e3, g2 [c2,e4], g4@3 g4@3 ~@3 a#3@2 ~, ~ d4@3 d4@2 ~@2 g3@2 g3@2, ~@2 a#3@3 ~@2 e3@3 ~@2", // C
  AA: "~@5 d#3 ~@5 f#3, c2 d2, ~ d#3@2 c4@3 d4@3 d4@3, ~@2 g3@2 g3@2 ~ a3@3 a3@2, ~@8 f#3@3 ~",
  AB: "~@5 d#3 ~@5 f#3, [c2,d#4] [d2,f#4], ~ d#3@3 ~@5 c4@2 ~, ~@2 g3@2 g3@2 ~ f#3@3 ~@2, ~@3 c4@2 ~@3 a3@2 a3@2", // Cm D
  AC: "~@11 b3, f2 f3, f4!2 g#4!2, ~ b3@3 b3@3 f4@2 ~ f4@2, ~@2 g#3@3 g#3@2 ~ b3@3 ~",
  AD: "[~@22 f4@2 [a4,c5,f5]@17 ~@7, f2@5 ~, ~ a3@4 a3@5 a4@2 ~@12, ~@2 c4@2 c4@3 f4@2 c5@3 ~@12, ~@3 f4@3 a4@2 c4@4 ~@12]/2", // F
})).s("gm_piano").gain(0.33)

// chords · electric guitar clean · "Guitar  (BB)"
const electric_guitar_clean = note(`<
  A B C D E F G H G H I J K@2 L M N O P Q I J G H R S I J T K U V R S I G I J G H G H E F W K X Y Z AA AB Q I J G H R S
  E F AC K X V R S A AD AE
>`.pickRestart({
  A: "a4@3 ~@2 a3@7, f4, a3@5 ~@7, c4 c4@2, ~ a4@3", B: "a4@3 ~@2 a3@7, f4, a3@5 ~@7, d4 d4@2, ~ a4@3",
  C: "[g3,a#3,d4,f4]@7 ~", D: "e4@9 ~@2 g3, [g3,a#3]@11 ~, c4@5 c4, ~@3 e4", E: "~@2 a3@9 ~, [f4,a4]@11 ~, ~ c4@10 ~",
  F: "~ a3@5, [f4,a4], ~ c4@11", G: "[g3,a#3,c4,e4]@7 ~", H: "[g3,a#3,c4,e4]", I: "[a3,c4,f4,a4]@7 ~",
  J: "[a3,c4,f4,a4]", K: "[g3,c4,d#4,g4]@3 ~ a3@2, ~ [d4,f#4], ~@7 c4@5", L: "~@2 a#3@9 ~, [g4,a#4]@11 ~, ~ d4@10 ~",
  M: "~ a#3@5, [g4,a#4], ~ d4@11", N: "[g3,b3,d4,f4]@7 ~", O: "[g3,b3,d4,f4]",
  P: "~@2 g3@4 [a3,c4,f4,a4]@3 ~@2 f#3, [c4,e4]@2 ~ [c4,d#4], ~ a#3@5 ~@4 a3@2", // F C Cm
  Q: "~ a#3@2 [g3,a#3,c4,e4]@3, [g4,a#4] ~, ~ d4@5 ~@6", R: "~@2 g3@9 ~, [c4,e4]@11 ~, ~ a#3@10 ~",
  S: "~ g3@5, [c4,e4], ~ a#3@11", T: "~ g3@2 ~ a3@2, [d#4,g4] [d4,f#4], ~ c4@5 ~ c4@5", U: "~ [d4,g4]@5, a#4, ~ a#3@11",
  V: "d4@3 ~@2 f3@7, b3, f3@5 ~@7, g#3 g#3@2, ~ d4@3", W: "~ g3@2 [a3,c4,d4,f#4]@3, [d#4,g4] ~, ~ c4@5 ~@6",
  X: "[a#3,d4,g4,a#4]@7 ~", Y: "[a#3,d4,g4,a#4]", Z: "~@2 g3@9 ~, [d4,f4]@11 ~, ~ b3@10 ~",
  AA: "~ g3@5, [d4,f4], ~ b3@11", AB: "~@2 g3@4 ~@2 a3 ~@2 f#3, [c4,e4]@6 [f4,a4]@3 ~ a3@2, ~ a#3@5 ~ c4@2 [c4,d#4]@3",
  AC: "[g3,c4,d#4,g4] [a3,c4,d4,f#4]", AD: "[a4,f5] [f4,a4,f5]", AE: "[a4,f5]@5 ~@3",
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · string ensemble 1 · "Strings (BB)"
const string_ensemble_1 = note("<~@67 A@2>".pickRestart({
  A: "[[f5,c6]@3 ~]/2", // F5
})).s("gm_string_ensemble_1").gain(0.08)

// drums · kick
const kick = s("bd").struct("<[x!2]!67 [x ~@4 x!2 ~@5] x>").gain(0.25)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~@5 x ~@6]!67 ~@2>").gain(0.1)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!67 ~@2>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@67 [~ x ~ x] ~>").gain(0.2)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@3 A@2 B A@6 B@2 A B@2 A@2 B A B A B A@2 B A@6 B A B A@4 B@3 A B A@2 B A B@3 A@2 B@2 A B@3 A@2 B@3 A B ~
>`.pickRestart({
  A: "x!11 ~", B: "x!12",
})).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~@3 A@2 ~ A@6 ~@2 A ~@2 A@2 ~ A ~ A ~ A@2 ~ A@6 ~ A ~ A@4 ~@3 A ~ A@2 ~ A ~@3 A@2 ~@2 A ~@3 A@2 ~@3 A ~ B
>`.pickRestart({
  A: "~@11 x", B: "x",
})).gain(0.15)

stack(bass, piano, electric_guitar_clean, string_ensemble_1, kick, kick_soft, rim, snare, hihat, open_hat)

More by Elvis Presley