Strudelify

Have Yourself a Merry Little Christmas for Brass Quintet

Ralph Blane & Hugh Martin

KeyD majorTempo72 bpm
0:00/0:00
// Have Yourself a Merry Little Christmas for Brass Quintet — Ralph Blane & Hugh Martin
// 72 bpm, 4/4, key D 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 (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5842013; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 43 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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.

// other · trumpet · "B♭ Trumpet 1"
const trumpet = note("<~@13 A B A C D E F ~ G H I J K L M N A B A N D O P Q R S T@4>".pickRestart({
  A: "c4 e4 g4 c5", B: "g4 f4 e4 d4 c4@2 d4@2", C: "g4", D: "e4 g4 c5 e5", E: "d5 c5 b4 a4 g#4@2 b4@2", F: "c5",
  G: "e5@2 e5@2 e5@2 d5 c5", H: "b4 c5 d5@4 c5 b4", I: "a4 b4 c5@4 b4@2", J: "b4@3 ~", K: "a4 g4 f#4@2",
  L: "g4@6 g4 a4", M: "b4 c5 d5@4 d4@2", N: "g4@3 ~", O: "f5 e5 d5 c5 b4@2 d5@2", P: "e5", Q: "~@3 e5",
  R: "e5 f4 a4 c5", S: "e5 d5 c5 b4 a4@2 b4@2", T: "[~@5 c5@8 d5@16 ~@3]/4",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Horn in F"
const french_horn = note("<~@9 A B C ~@5 D E F ~@5 G H I J K L K M N O P Q R S T@4>".pickRestart({
  A: "e3 g3 c4 e4", B: "d4 c4 b3 a3 g3@3 f3", C: "e3", D: "g3 c4 e4!2", E: "f4!2 d4 c4 b3@2 d4@2", F: "e4",
  G: "c4@2 c4@2 c4@2 b3 a3", H: "g3 a3 b3@4 g3 a3", I: "b3 c4 d4@4 d4@2", J: "c4@2 b3 ~", K: "c3 e3 g3 c4",
  L: "g3 f3 e3 d3 c3@2 d3@2", M: "g3@3 ~", N: "g3 c4 e4 g4", O: "f4!2 d4!2 e4@2 e4 d4", P: "a4", Q: "~@3 c4",
  R: "e4 c4 a3 f3", S: "c4!2 e4!2 d4@2 b3@2", T: "[~@5 d#4@8 f4@8 e4@8 ~@3]/4",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note("<~@5 A B A C ~@8 D E F ~@5 G H I J K L K J M N F O P Q R@4>".pickRestart({
  A: "c3 e3 g3 c4", B: "g3 f3 e3 d3 c3@2 d3@2", C: "g3", D: "e3 f3 g3 a3 b3@2 a3@2", E: "d3!2 f3 d3 e3@2 b3@2", F: "a3",
  G: "c4@2 c4@2 c4@2 b3 a3", H: "g3 f3 e3@2 d#3@2 g3 a3", I: "b3 a3 g3@4 d3@2", J: "g3@3 ~", K: "c3 e3 d3 g3",
  L: "g3 f3 e3 d3 c3@2 b2@2", M: "c3@2 c3 b2 a2@2 e3@2", N: "d3 e3 f3 g3 g#3@2 e3@2", O: "~@3 a3", P: "f3 a3 f3 e3",
  Q: "d3!2 a2!2 g2@2 g3@2", R: "[~@5 f3@8 f3@8 a3@8 ~@3]/4",
})).s("gm_trombone").gain(0.3)

// bass · tuba
const bass = note("<~@5 A B C D E F G H I J K L M N O P Q R S T U V W X I J K Y Z AA O AB AC AD AE@4>".pickRestart({
  A: "c3 e3 g3 c4", B: "g3 f3 e3 d3 c3@2 d3@2", C: "c3@2 e3@2 e3 d3 c3@2", D: "d3 f3", E: "e3!2 g3 e3",
  F: "f3 e3 d3 c3 b2@2 d3@2", G: "e3", H: "d2 a2 d3@2 g2 d3 g3@2", I: "c2 g2 c3 d3 e3@3 g3", J: "f3 d3",
  K: "c2 g2 e3 f3 g3@4", L: "d2 a2 f3@2 d3@4", M: "e3 d3 c3 b2 a2@2 d3@2", N: "a2 b2 c3 d3 e3@2 b2@2", O: "a2",
  P: "~@2 c2 e2", Q: "f2 c3 f3 g3 g#3@4", R: "e2 c3 g3 f3 d#3@4", S: "d2 a2 d3 e3 f3@2 g2@2", T: "e2 b2 e3 f#3 g3@4",
  U: "f#2 e3 a3 g3 f#3@2 b2@2", V: "e2 e3 d#2 d#3", W: "d2 d3 e3 f#3", X: "g3 d3 g2@2", Y: "d2 a2 d3 e3 f3@2 d3@2",
  Z: "c3@2 c3 b2 a2@2 c3@2", AA: "d3 e3 d3 c3 b2@2 e3@2", AB: "~@3 a3", AC: "f3 a3 f3 e3", AD: "d3!2 a2!2 g2@2 g3@2",
  AE: "[~@5 g#2@8 a#2@8 c3@4 c2@4 ~@3]/4",
})).s("gm_tuba").gain(0.3)

// chords · piano
const piano = note(`<
  A B C@3 D E F G H I J K L M N O P Q R S T U V W X Y Z AA L M N AB AC AD AE AF AG AH AI@4
>`.pickRestart({
  A: "~@3 e5", B: "~@2 [a3,c4,e4,f4]@2 ~@3 e3, [f2,g4,e5], [f3,c5]@5 g3@3, a4 [a3,c4], ~@2 [e4,f4,a4] [f3,e4,f4,a4,c5]",
  C: "[~@3 b4 ~@12 g3 f3 d#3 d3 [c3,g#3,c4,d#4,f4]@2 [d3,f3,g3,b3,d4]@2, [d3,f3,a3,c4,f4,a4]@2 [d3,f3,b3,d4]@3 e3 g3 c4 [d#4,f4,g#4,c5] [c4,d#4,f4,g#4] ~@2, c5@2 c5@2 g2@4 c5 g2@8 ~@7, ~ e5@7 ~@4 b4@22 ~@14, ~@2 d5@6 ~ a4@7 [c2,e4,g4,a4]@18 ~@14]/3", // Fm7 G7 Dm7 Bdim Fm7 Am7
  D: "c2 g2 c3 e3 [a3,c4,e4,g4]@2 [e4,g4,a4,c5]@2, [e3,g3,a3,c4] [g3,b3,d4,e4] g3@2", // Am7 Em7
  E: "[a3,c4,d4,g4] f4 e4 d4 [a3,c4]@2 ~ g2, f3@4 [g2,d3,f3]@3 ~, ~@3 [a3,b3,d4]", // Am7 Am G7 Bm7
  F: "c2 g2 c3 e3 [a3,c4,e4,g4]@2 [e4,g4,a4,c5]@2, [e3,g3,a3,c4] [g3,a3,c4,e4] g3@2", // Am7
  G: "[d3,a3,c4,d4,g4]@2 a3 c4 [g3,b3]@2 [a3,c4] [b3,d4], ~ d2 [g2,d3,f3]@2", // Dsus4 G Am Bm G7
  H: "c2 g2 c3 [b1,b2] [a1,a2,e4,g4,a4,c5]@2 [e3,a3,c4,g4,a4,c5,e5]@2, [g3,b3,d4,e4] [b3,d4,e4,g4] ~@2", // B Am7 Em7
  I: "[d2,f4,a4,d5] [a2,c5] [d3,b4] [f3,a4] g3@2 ~ f4, ~@4 [b3,d4,f4,g4]@3 ~, ~@3 g2", // Dm Am G F G7
  J: "[e2,d3]@2 b2@2 ~ g#4 b4 d5 a3@2 e3@2 ~@2 e5@2, [g#3,b3,e4]@2 e3@2 [g4,c#5,f5]@3 ~, ~@3 a2", // E7 E Gm7b5
  K: "[d2,d3] a2 [d3,b4,d5]@2 [g2,f3] d3 [g3,g4,b4]@2, [f4,a4,c5,e5] ~ [a4,c5] ~", // D G G7 G Fmaj7 Am
  L: "c2 g2 c3 d3 [a3,c4,e4,g4]@2 ~ g3, [e3,g3,a3,c4]@2 [g3,b3,d4,e4]@2 e3@3 ~, ~@3 [e4,g4,a4,c5]", // Am7 Em7 Am7
  M: "[a3,c4,d4,g4] f4 e4 d4 ~@3 g2, f3 [d3,f3], ~@2 [a3,c4] [b3,d4], ~@5 g2@2 ~", // Am7 Dm Am Bm
  N: "c2 g2 e3 f3 [a3,c4,e4,g4]@2 [e4,g4,a4,c5]@2, [e3,g3,a3,c4] [g3,b3,d4,e4] g3@2", // Am7 Em7
  O: "d2 a2 a3 c4 ~@2 [a3,c4] [b3,d4], [a3,c4,d4,g4] f3 [d3,f3]@2, ~@2 [g3,b3] ~, ~@5 g2@3", // Am Bm Am7 Dm G
  P: "[e2,e3] [d2,d3] [c2,c3] [b1,b2] [a1,a2,e4,g4,a4,c5]@2 [a2,a3,g4,a4,c5,e5]@2, [g3,b3,d4,e4] [b3,d4,e4,g4] ~@2", // E D C B Am7 Em7
  Q: "[f4,a4,d5] c5 b4 a4 [e2,e3,d4,g#4]@2 [g#2,g#3,d4,e4,b4]@2, [d3,a3,c4] ~", // Dm E7 D7
  R: "[a2,a3] e3 a3 b3 ~ e4 e5 d5, [e4,g4,a4,c5]@2 c4 b3", S: "c5 a#4 a4 a#4 [c2,g4]@2 [g4,c5] d5, [a#3,d4,e4]@2 ~ e2",
  T: "f2 c3 f3 g3 [f4,e5]@2 d5 c5, [a4,e5] [g4,e5] g#3@2", // Fmaj7 A5 C
  U: "[e2,b4] [c3,c5] g3 f3 ~@2 c5 b4, [e4,g4] [d#3,d#4,f#4], ~ d5@2 ~", // E5 C Em D#m
  V: "[d2,a4] [a2,b4] d3 e3 f3@2 [g2,f3,d#4,g4,b4]@2, [c4,f4]@11 ~@5, ~ c5@2 ~", // D5 Asus2 Gaug F5
  W: "e2 b2 e3 f#3 ~ b4 e5 d5, [d4,e4,g4,b4] g3", // Em7
  X: "f#2 e3 a3 g3 [f#3,c5]@2 b4 a4, [e4,a4,c5] [e4,g4,c5] [d#4,f#4]@2, ~@3 b2", // F#dim Am C D#m
  Y: "[e4,g4] a4 [e3,g3,b3]@2 d#2@2 [g4,g5] [a4,a5], e2 b4@2 [d#3,g3,b3]", // Em G A D#aug
  Z: "[b4,d5,g5,b5] [c5,c6] [d3,g3,b3]@2 [e3,a3,c4]@2 [f#3,a3,c4,d4,f#4,a4,d5]@2, [d2,d3] [d5,d6]@2 ~", // G C G Am D7 D
  AA: "[g3,d4,f4]@2 [d2,d3]@2 [f3,a3] [g3,b3] [a3,c4] [g#3,b3,d4], [g4,c5,d5,g5] [g1,g2]", // G7 D F G Am G#dim Gsus4 G
  AB: "d2 a2 [d3,f3] [e3,g3] a3 [g3,b3] [a3,c4] [b3,d4], [a3,c4,d4,g4] ~ f3 [d2,d3]", // Dm Em G Am Bm Am7 D
  AC: "[c2,c3] g2 [c2,c3] [b1,b2] [a1,a2,e4,g4,a4,c5]@2 [e2,e3,e4,g4,c5,e5]@2, [g3,b3,d4,e4] [b3,d4,e4,g4] ~@2", // C B Am7 C Em7
  AD: "[d2,d3,f4,a4,d5,f5] [e2,e3,e4,e5] [f2,f3,d4,d5] [g2,g3,c4,c5] [g#2,g#3,b3,d4,b4]@2 [e2,e3,d4,g#4,b4,d5]@2", // Dm E Dm C5 G#dim E7
  AE: "[a1,a2] e3 a3 b3 c4 [b3,g4,b4] [a3,a4,c5] [e3,g4,b4,d5], [e4,g4,c5,e5] ~", // A Em Am Em7 C
  AF: "[d3,d4] [c3,c4] [b2,b3] [a2,a3,c5], [g#4,c5,e5]@11 ~@5", // D C B Am G#aug
  AG: "[f2,f3,g4,a4,c5,e5] f4 a4 [e3,a3,c4,c5], ~ [f3,a3,c4]@2 ~", // Fmaj7 Am F
  AH: "e5 d5 c5 b4 [b3,d4,a4]@2 b4@2, [d3,f3,a3,c4] [g2,d3,f3]", // Bm7 Dm7 G7
  AI: "[~@5 g#2@2 d#3@2 g#3@2 c4@2 d4@2 a#3@2 f3@2 d3@2 ~@4 c2@4 ~@3, ~@10 [d#4,g#4,c5]@15 ~ [f4,a#4,c5,d5]@15 ~ [c3,e4,g4,a4,d5]@15 ~@7]/4", // G# A# Am7
})).s("gm_piano").gain(0.25)

stack(trumpet, french_horn, trombone, bass, piano)