Strudelify

Jingle Bell Rock

Bobby Helms

KeyD majorTempo120 bpm
0:00/0:00
// Jingle Bell Rock — Bobby Helms
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "Violin II" named as a string part, played on violin (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5865329; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 32-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, 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 · violin · "Violin II"
const violin = note(`<
  A B C D E F G H I J@2 K E F G H I L@2 M N O P Q R S T ~ E F U V W X Y Z AA AB AC AD AE AF@2 AG N AH P Q AI AJ T ~ AK
  AL AM AN AO AP AQ@3 AR@3
>`.pickRestart({
  A: "c#5 [d5,f#5]@5 [d5,f#5]@2 [d5,f#5]@8 c5 [c#5,f#5]@5 [c#5,f#5]@2 [c#5,f#5]@8", // D F#5
  B: "c#5 [d5,f#5]@3 ~ [d5,a5]@3 [a4,d5]@5 [b4,e5]@3 [c5,f5]@5 [b4,e5]@3 [a4,d5]@5 [g4,c5]@3", C: "[f#4,a4]@23 ~@9",
  D: "~@5 a3@3 g3@4 ~@4 f#3@4 ~@4 e3@4 ~@4",
  E: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@4 [d3,a3,c#4,f#4]@3 [d3,a3,c#4,f#4] [d3,a3,c#4,f#4]@4, a4 c#5", // D Dmaj7
  F: "[d3,b3,d4,f#4]@8 [d3,b3,d4,f#4]@8 [d3,a3,c#4,f#4]@6 [d3,a3,c#4,f#4]@2 f5 [f#5,a5]@7, a4@3 [d3,a3,c#4,f#4]", // Bm Dmaj7 F#m Dmaj7
  G: "[d3,b3,d4,f#4]@4 [d3,b3,d4,f#4]@4 [d#3,a3,c4,f#4]@3 [d#3,a3,c4,f#4] [d#3,a3,c4,f#4]@4, a4 c5", // Bm D#dim
  H: "[e3,b3,e4,g4]@8 [e3,b3,e4,g4]@8 [e3,b3,e4,g4]@6 a#5 [g5,b5,e6] [e3,b3,e4,g4]@8, b4@8 ~@3 [e3,b3,e4,g4] [g5,b5,e6]@2 ~@2", // Em
  I: "[e3,b3,e4,g4]@4 [e3,b3,e4,g4]@4 [e3,a3,c#4,g4]@3 [e3,a3,c#4,g4] [e3,a3,c#4,g4]@4, d4 ~", // Em A7
  J: "[[e3,b3,e4,g4]@8 [e3,b3,e4,g4]@8 [e3,a3,c#4,g4]@6 a#5 [g5,b5,e6] [g5,b5,e6]@4 ~@4 [e3,b3,e4,g4]@8 [e3,b3,e4,g4]@8 [e3,b3,e4,g4]@6 [e3,b3,e4,g4]@2 [e3,b3,e4,g4]@8, d4@8 ~@3 [e3,a3,c#4,g4] [e3,a3,c#4,g4]@4 ~@16, ~@29 [g5,b5,e6]@11 ~@24]/2", // Em A7 Em A7 Em
  K: "[e3,a3,c#4,g4]@4 [e3,a3,c#4,g4]@4 [a2,g3,c#4,f4]@3 [a2,g3,c#4,f4] [a2,g3,c#4,f4]@4, ~ a4", // A7 Aaug
  L: "[[e3,b3,e4,g4]@8 [e3,b3,e4,g4]@8 [e3,a3,c#4,g4]@6 a#5 [g5,b5,e6] [g5,b5,e6]@4 ~@4 [e3,b3,e4,g4]@8 [e3,b3,e4,g4]@8 [e3,a3,c#4,g4]@6 [e3,a3,c#4,g4]@2 [e3,a3,c#4,g4]@8, d4@8 ~@3 [e3,a3,c#4,g4] [e3,a3,c#4,g4]@4 ~@16, ~@29 [g5,b5,e6]@11 ~@24]/2", // Em A7 Em A7 Em
  M: "[d3,a3,d4,f#4,a4]@8 [f#4,a4]@3 [f#4,a4]@2 [f#4,a4]@3 [a4,c5]@3 [a4,c5]@2 ~ [d3,a3,d4,f#4]@2 [a4,c5,d5]@3 [a4,c5]@2 [a4,c5]@3, ~@8 [d3,a3,d4]@8 [d3,a3,d4,f#4]@5 [a4,c5]@3 [d3,a3,d4,f#4]@8", // D F#m Am D D7 Am D5 D …
  N: "[d3,g3,b3,d4,g4]@4 [d3,g3,b3,d4,g4]@4 [d3,g3,b3,d4,g4]@3 [d3,g3,b3,d4,g4] [d3,g3,b3,d4,g4]@4", // G
  O: "[e3,g#3,b3,d4]@4 [e3,g#3,b3,d4]@4 [e3,g#3,b3,d4]@3 [e3,g#3,b3,d4] [e3,g#3,b3,d4]@4, g#4", // E7
  P: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@3 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@4, a4 ~@7", // D
  Q: "~@5 [d5,f#5]@3 [f#4,c#5,f5]@5 f#4@3 [d3,a3,d4,f#4,g4]@5 ~ [d3,a3,d4,f#4]@2 a4@5 a4@3, [d3,a3,d4,f#4]@8 [d3,a3,d4]@8 ~@5 g4@3 [d3,a3,d4,f#4]@8, ~@13 [c5,e5]@11 ~@8", // D F#maj7 D D5 D C
  R: "[e3,g#3,b3,d4]@4 [e3,g#3,b3,d4]@4 [e3,g#3,b3,d4]@3 [e3,g#3,b3,d4] [e3,g#3,b3,d4]@4, b4!2", // E7
  S: "[e3,g#3,b3,d4,b4]@8 [e3,g#3,b3,d4]@8 [e3,g#3,b3,d4]@5 ~ [e3,g#3,b3,d4]@10, ~@21 b4@11", // E7
  T: "[e3,a3,c#4,g4,c#5] ~@7", U: "[d3,a3,d4,f#4]!2 [d3,a3,d4,f#4,a4] [c#3,a3,c#4,e4,g4], a4 ~",
  V: "[b2,f#3,b3,d#4]@8 [b4,d#5]@3 [b4,d#5]@2 [b4,d#5]@3 [d#5,f#5]@3 [d#5,f#5]@2 ~ [b2,f#3,b3,d#4]@2 [f#5,a5]@3 [f#5,a5]@2 [f#5,a5]@3, f#4@3 [b2,f#3,b3,d#4], ~@8 [b2,f#3,b3,d#4]@8 [b2,f#3,b3,d#4]@5 [d#5,f#5]@3 ~@8", // B D#m B F#m B D#m
  W: "[d3,g3,b3,d4,g4]@4 [d3,g3,b3,d4,g4]@4 [d3,g3,b3,d4,g4]@3 [d3,g3,b3,d4,g4] [d3,g3,b3,d4,g4]@4, [d5,g5]@5 ~@27", // G G5
  X: "[d3,g3,a#3,d4,g4]@4 [d3,g3,a#3,d4,g4]@4 [d3,g3,a#3,d4,g4]@3 [d3,g3,a#3,d4,g4] [d3,g3,a#3,d4,g4]@4", // Gm
  Y: "f5 ~@7 [d3,a3,d4,f#4]@8 [e3,a3,c#4,e4]@6 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@8, a4, [d3,a3,d4,f#4] ~@3, ~ [d5,f#5,a5]@11 ~@20", // D A D
  Z: "[d3,a3,d4]@8 a#5 [g5,b5]@3 ~ [g5,b5]@3 f5 [f#5,a5]@3 ~@2 [d3,a3,d4,f#4]@2 [e5,g5]@5 [e5,g5]@3, f#4@16 ~@5 [f#5,a5]@3 ~@8, ~@4 [d3,a3,d4,g4]@4 [d3,a3,d4,f#4]@3 ~ [d3,a3,d4,e4]@4", // D5 G F#m D Em F#m Dsus4 D …
  AA: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@4 [d3,a3,c#4,f#4]@3 [d3,a3,c#4,f#4] [d3,a3,c#4,f#4]@4", // D Dmaj7
  AB: "[d3,b3,d4,f#4]@8 [d3,b3,d4,f#4]@8 [d3,a3,c#4,f#4]@6 [d3,a3,c#4,f#4]@2 f5 [f#5,a5]@7, ~@3 [d3,a3,c#4,f#4]", // Bm Dmaj7 F#m Dmaj7
  AC: "[d3,b3,d4,f#4,a5]@3 a5 [d3,b3,d4,f#4,a5]@4 [d#3,a3,c4,f#4,a5]@3 [d#3,a3,c4,f#4] [d#3,a3,c4,f#4,a5]@4", // Bm7 D#dim
  AD: "[e3,b3,e4,g4,g5]@6 g5@2 [e3,b3,e4,g4,g5]@8 [e3,b3,e4,g4,g5]@6 a#5 [g5,b5,e6] [e3,b3,e4,g4]@8, ~@11 [e3,b3,e4,g4] [g5,b5,e6]@2 ~@2", // Em
  AE: "e5@5 ~@6 d5@5 [e3,a3,c#4,g4,c#5]@5 ~ [e3,a3,c#4,g4]@2 ~@3 d#5@5, [e3,b3,e4,g4]!2 ~ [e3,a3,c#4,g4], ~@5 d#5@5 ~@11 d5@5 ~@6", // A7 Em A7
  AF: "[e5@5 ~@6 d5@5 [e3,a3,c#4,g4]@6 a#5 [g5,b5,e6] [g5,b5,e6]@4 ~@4 [e3,b3,e4,g4]@8 a5@5 a5@3 [e3,a3,c#4,g4,g#5]@6 [e3,a3,c#4,g4]@2 [e3,a3,c#4,g4,g5]@8, [e3,b3,e4,g4]@4 [e3,b3,e4,g4]@4 ~@3 [e3,a3,c#4,g4] [e3,a3,c#4,g4]@4 ~@4 [e3,b3,e4,g4]@4 ~@8, ~@5 d#5@5 ~@6 c#5@16 ~@32, ~@29 [g5,b5,e6]@11 ~@24]/2", // A7 Em A7 Em A7 Em
  AG: "[d3,a3,d4,f#4,f#5]@8 [f#4,a4]@3 [f#4,a4]@2 [f#4,a4]@3 [a4,c5]@3 [a4,c5]@2 ~ [d3,a3,d4,f#4]@2 [a4,d5]@3 [a4,c5]@2 [a4,c5]@3, ~ [d3,a3,d4] [d3,a3,d4,f#4,g4] [d3,a3,d4,f#4], ~@21 [a4,c5]@3 ~@8", // D F#m Am D D5 Am D5 D …
  AH: "[e3,g#3,b3,d4]@4 [e3,g#3,b3,d4]@4 [e3,g#3,b3,d4,g#4]@3 [e3,g#3,b3,d4] [e3,g#3,b3,d4]@4, g#4 ~ g#4 ~@3 g#4 ~", // E7
  AI: "[e3,g#3,b3,d4]@4 [e3,g#3,b3,d4]@4 [e3,g#3,b3,d4,b4]@3 [e3,g#3,b3,d4] [e3,g#3,b3,d4]@4, b4 ~ b4 ~@3 b4 ~", // E7
  AJ: "[e3,g#3,b3,d4]@8 [e3,g#3,b3,d4]@8 [e3,g#3,b3,d4]@5 ~ [e3,g#3,b3,d4]@2 [e3,g#3,b3,d4]@8, b4@4 ~@17 b4@11", // E7
  AK: "[d3,a3,d4,f#4,a5]@3 a5 [d3,a3,d4,f#4,a5]@4 [d3,a3,c#4,f#4,c#6]@3 [d3,a3,c#4,f#4,c#6] [d3,a3,c#4,f#4,c#6]@4", // D Dmaj7
  AL: "[d3,b3,d4,f#4,a5]@6 a5@2 [d3,b3,d4,f#4,a5]@8 [d3,a3,c#4,f#4,a5]@6 [d3,a3,c#4,f#4]@2 f5 [f#5,a5]@7, ~@3 [d3,a3,c#4,f#4]", // Bm7 Dmaj7 F#m Dmaj7
  AM: "[d3,a3,d4,f#4,a5]@3 a5 [d3,a3,d4,f#4,a5]@4 [d3,a3,d4,f#4,a5]@4 [c#3,a3,c#4,e4,g5]@4", // D A7
  AN: "[b2,f#3,b3,d#4]@8 [b4,d#5]@3 [b4,d#5]@2 [b4,d#5]@3 [d#5,f#5]@3 [d#5,f#5]@2 ~ [b2,f#3,b3,d#4]@2 [f#5,a5]@3 [f#5,a5]@2 [f#5,a5]@3, f#5@16 ~@5 [d#5,f#5]@3 ~@8, ~@4 [b2,f#3,b3,d#4]@4 [b2,f#3,b3,d#4]@3 ~ [b2,f#3,b3,d#4]@4", // B D#m B F#m D#m B
  AO: "[d3,g3,b3,d4,g4,g5]@8 [d3,g3,b3,d4,g4,g5]@8 [d3,g3,b3,d4,g4,g5]@5 ~ [d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4,g5]@8, d5@5 ~@16 g5@3 ~@8", // G
  AP: "g5@5 g5@3 [d3,g3,a#3,d4,g4,g5]@8 [d3,g3,a#3,d4,g4]@6 [d3,g3,a#3,d4,g4]@2 [d3,g3,a#3,d4,g4]@8, [d3,g3,a#3,d4,g4] ~ g5@2", // Gm
  AQ: "f5 a5@4 ~@8 f#5@3 g5@5 g5@3 [e3,a3,c#4,e4,g5]@8, [d3,a3,d4,f#4]!2 [e3,a3,c#4,e4] ~, ~ [d5,f#5]@11 ~@20, ~@5 a5@8 ~@19", // A7 D A D
  AR: "[f6 [d6,f#6]@7 ~@8 f6 [d6,f#6]@3 ~ [d6,f#6]@3 f6 [d6,f#6]@3 ~ [d6,a6]@3 [c6,f#6]@5 [a5,d6]@3 [b5,e6]@5 [a5,d6]@3 ~@8 [d3,a3,d4,f#4,d5,f#5,a5,d6]@30 ~@2 [d3,a3,d4,f#4,d5,f#5,a5,d6]@8, [d3,a3,d4,f#4]@53 ~@43, f#5 ~@2]/3", // D D5 Cdim D5 E5 D5 D
})).s("gm_violin").gain(0.3)

// other · viola
const viola = note(`<
  ~@4 A B A C D@2 E F A B A C D@2 E G H@2 I J K L M ~ A B N O P@2 D Q ~@2 R S T U V W X Y I J Z L M ~ AA AB AC O AD AE
  AF@3 P ~ AG
>`.pickRestart({
  A: "f#4 a4", B: "f#4@3 ~", C: "g4 e4", D: "d4 c#4", E: "e4@3 ~", F: "e4 f4", G: "f#4!2 a4!2", H: "e4", I: "f#4 ~@7",
  J: "~@8 d4@5 d4@3 e4@5 e4@3 f#4@5 f#4@3", K: "g#4!2", L: "g#4@4 ~@17 g#4@11", M: "a4 ~@7", N: "f#4@2 f#4 e4",
  O: "d#4@3 ~", P: "d4", Q: "d4 ~", R: "d5@3 d5 d5@4 f#4@4 f#4@4", S: "b4@3 b4 g4@4 g4@4 ~@4",
  T: "e4@5 f#4@5 ~ g4@5 a4@5 b4@5 ~ a4@5", U: "e4@5 f#4@5 ~ g4@5 a4@16", V: "~@8 a4@5 a4@3 b4@8 c#5@8",
  W: "d5 d4 e4 f#4", X: "d4 ~ d4 ~ d4 ~ d4 ~", Y: "e4 ~ e4 ~ e4 ~ e4 ~", Z: "g#4 ~ g#4 ~ g#4 ~ g#4 ~",
  AA: "f#4@3 f#4 f#4@4 a4@3 a4 a4@4", AB: "f#4@3 f#4 f#4@4 f#4@4 ~@4", AC: "f#4@3 f#4 f#4@4 f#4@4 e4@4",
  AD: "d4@8 d4@8 d4@5 d4@3 d4@8", AE: "d4@5 d4@3 d4@8 d4@16", AF: "~@5 f#4@8 d4@3 e4@5 d4@3 e4@8", AG: "~@3 d4",
})).s("gm_viola").gain(0.4)

// other · cello · "Violoncello"
const cello = note(`<
  ~@4 A B C D@3 E F A B C D@3 E G H@2 I J A K L ~ A B M N H O P Q A B R S T U ~@2 V@2 I J W K L ~ X Y Z N AA AB AC@3 AD
  ~ AE
>`.pickRestart({
  A: "d4!2", B: "d4@3 ~", C: "d4 d#4", D: "e4!2", E: "e4@3 ~", F: "b3 e3 f3 ~", G: "d4!4", H: "b3", I: "a3 ~@7",
  J: "~@8 a3@5 a3@3 b3@5 b3@3 d4@5 d4@3", K: "e4@4 ~@17 d4@11", L: "c#4 ~@7", M: "d4@2 d4 c#4", N: "d#4@3 ~", O: "a#3",
  P: "a3", Q: "d4 ~", R: "d4@3 d4 d4@4 d#4@4 d#4@4", S: "e4@3 e4 e4@4 e4@4 ~@4",
  T: "c#4@5 c4@5 ~ b3@5 a3@5 b3@5 ~ c4@5", U: "c#4@5 c4@5 ~ b3@5 a3@16", V: "b3 ~ b3 ~ b3 ~ b3 ~",
  W: "d4 ~ d4 ~ d4 ~ d4 ~", X: "d4@3 d4 d4@4 d4@3 d4 d4@4", Y: "d4@3 d4 d4@4 d4@4 ~@4", Z: "d4@3 d4 d4@4 d4@4 c#4@4",
  AA: "b3@8 b3@8 b3@5 b3@3 b3@8", AB: "a#3@5 a#3@3 a#3@8 a#3@16", AC: "~@5 d4@8 d4@3 e4@5 e4@3 e4@8", AD: "f#4",
  AE: "~@3 f#4",
})).s("gm_cello").gain(0.4)

// bass · contrabass
const bass = note(`<
  ~@3 A B@2 C D@2 E F G B@2 C D@2 E@2 H I J B@2 K@2 L A B@2 M N O P Q R B@2 C D@2 E@2 H I J B@2 K@2 L A B@2 M N O P Q@3
  S T@2
>`.pickRestart({
  A: "~@5 a2@3 g2@4 ~@4 f#2@4 ~@4 e2@4 ~@4", B: "d2@4 f#2 ~ a2 ~", C: "d2 d#2", D: "e2 a2", E: "e2@4 a2 ~ a2@2",
  F: "e2@16 e3@5 e2@3 f#2@5 g2@3", G: "a2 g2 f2 e2", H: "d2!2 e2 f#2", I: "g2 b2", J: "g#2 b2", K: "e2@4 g#2 ~ b2 ~",
  L: "a2 ~@7", M: "d2@4 d2 ~ c#2 ~", N: "b1!2", O: "g2@2 d2 e2", P: "g2@2 g2!2", Q: "d2@2 a2 a1", R: "d2 g2 f#2 e2",
  S: "d2@16 d2@5 e2@3 f#2@5 a2@3", T: "[f#2@5 d2@3 e2@5 d2@3 ~@8 d2@32 d2@8]/2",
})).s("gm_contrabass").gain(0.3)

stack(violin, viola, cello, bass)