Strudelify

Jingle-Bells-Rock

Danielle

KeyE majorTempo150 bpm
0:00/0:00
// Jingle-Bells-Rock — Danielle
// 150 bpm, 4/4, key E 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 (2/2 at bar 1, 4/4 at bar 31) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Alto Sax 1" named as a reed, played on alto sax (its slap bass 1 patch is not one); ch 2 "Alto Sax 2" named as a reed, played on alto sax (its slap bass 2 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5713282; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 77 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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 · alto sax · "Alto Sax 1"
const alto_sax = note(`<
  A B@4 C@3 D@4 E@3 F G@4 H I@2 J@4 K@4 L M ~ N@2 O P@4 Q R S T U V W X@2 Y Z AA ~ Y Z AB ~ R S AC@2 AD AE AF AA ~ R S
  AC@2 AD AE AG AF@2 AA
>`.pickRestart({
  A: "~@13 d4@6 b4@5", B: "[a4@6 g4@5 d4@17 d4@3 d4@3 d4@6 b4@5 a4@6 g4@5 e4@22 ~ e4@6 c5@5 b4@6]/4",
  C: "[a4@5 d5@22 ~ e5@6 d5@5 c5@6 a4@5 b4@22]/3",
  D: "[~ d4@6 b4@5 a4@6 g4@5 d4@17 d4@3 d4@3 d4@6 b4@5 a4@6 g4@5 e4@22 ~ e4@5]/4",
  E: "[~ c5@5 b4@6 a4@5 d5@6 d5@6 d5@5 d5@6 e5@6 d5@5 c5@6 a4@5 g4@6 ~@4]/3", F: "~@2 d5@11 b4@6 b4@5",
  G: "[b4@11 b4@6 b4@6 b4@11 b4@6 d5@5 g4@6 a4@5 b4@22 ~ c5@6 c5@5 c5@6]/4", H: "c5@5 c5@6 b4@6 b4@5 b4@2",
  I: "[~ b4@3 b4@6 a4@5 a4@6 b4@5 a4@6 ~@6 d5@10]/2",
  J: "[~ b4@6 b4@5 b4@11 b4@6 b4@6 b4@11 b4@6 d5@5 g4@6 a4@5 b4@22 ~ c5@5]/4",
  K: "[~ c5@5 c5@6 c5@5 c5@6 b4@6 b4@5 b4@3 b4@3 d5@6 d5@6 c5@6 a4@7 g4@14 ~@17]/4", L: "a4 b3", M: "e4",
  N: "~ c5 ~ c5", O: "~ c5 ~ a#4", P: "~ c5 ~ f4", Q: "~ f4 ~ f4", R: "c5@2 c5 c5@3 b4@2 b4 b4@3",
  S: "a4@2 b4 a4@2 e4 ~@6", T: "a4@2 b4 a4@3 e4@3 g4@3", U: "a4@2 b4 a4@2 f4 ~@6", V: "d4@2 e4@2 f4@2 g4 a4@2 ~@2 g4",
  W: "d4@2 e4 f4@2 g4 ~@6", X: "[~@2 a4@3 a4 b4@3 g4@2 c5@10 ~@3]/2", Y: "~@2 f5!2 g5 f5 a5 g#5 g5 f5 d5 f5",
  Z: "~@2 f5!2 g5 f5 a5 g#5 g5 f5 d5 g5", AA: "c5 ~@3", AB: "c5 ~@5", AC: "[a4@2 b4 a4@3 e4@3 g4@2 a4@4 ~@9]/2",
  AD: "a4@3 c5@2 c5 d5@2 d5 c5@3", AE: "g#4@2 g#4 c5@2 d5 ~@6", AF: "~@2 c5@3 a4 b4@2 c5 d5@2 ~",
  AG: "~@2 c5@3 a4 b4@2 a4 g4@2 ~",
})).s("gm_alto_sax").gain(0.3)

// other · alto sax · "Alto Sax 2"
const alto_sax_2 = note(`<
  ~@15 A B@4 C D@2 E@4 F@4 G H ~ I@3 J@4 K L M N O P Q R@2 S T U ~ S T V ~ L M N W X Y Z U ~ L M N W X Y Z@3 U
>`.pickRestart({
  A: "~@2 f#4@11 g4@6 g4@5", B: "[g4@11 g4@6 g4@6 g4@11 g4@6 b4@5 d4@11 g4@22 ~ g4@6 g4@5 g4@6]/4",
  C: "g4@5 g4@6 d4@6 d4@5 d4@2", D: "[~ d4@3 d4@6 d4@5 d4@6 d4@5 d4@6 ~@6 f#4@10]/2",
  E: "[~ g4@6 g4@5 g4@11 g4@6 g4@6 g4@11 g4@6 b4@5 d4@11 g4@22 ~ g4@5]/4",
  F: "[~ g4@5 g4@6 g4@5 g4@6 d4@6 d4@5 d4@3 d4@3 b4@6 b4@6 a4@6 f#4@7 d4@14 ~@17]/4", G: "c4 g3", H: "c4",
  I: "~ g4 ~ g4", J: "~ a4 ~ d4", K: "~ d#4 ~ d#4", L: "g4@2 g4 g4@3 g4@2 g4 g4@3", M: "c4@5 c4 ~@6", N: "c4 e4 c#4 e4",
  O: "d4@2 d4 d4@2 g3 ~@6", P: "a3@2 d4 ~", Q: "d4@2 d4 d4@2 d4 ~@6", R: "[~@2 f4@3 d4 g4@3 d4@2 g4@10 ~@3]/2",
  S: "~@2 a4!2 b4 a4 c5 b4 a#4 a4 f4 a4", T: "~@2 a4!2 b4 a4 c5 b4 a#4 a4 f4 a#4", U: "g4 ~@3", V: "g4 ~@5",
  W: "d4 ~@3", X: "f4@3 a4@2 a4 a4@2 a4 a4@3", Y: "f4@2 f4 f4@2 f4 ~@6", Z: "~@2 f4@3 f4 g4@2 g4 g4@2 ~",
})).s("gm_alto_sax").gain(0.3)

// chords · baritone sax · "Tenorový saxofon"
const baritone_sax = note(`<
  A@8 B@7 C D@3 E F@3 G@4 H@4 I J ~ K L M N O@3 P Q R S T U V W@2 X Y Z@2 AA AB AC AD AE@2 AF AG AH@2 AI AJ ~ AE@2 AF AG
  AH@2 AI AK AI AJ
>`.pickRestart({
  A: "[~@13 g3@22 g3@22 ~ g3@22 c3@22 ~ a3@22 d3@22 ~ d3@22 g3@22]/8",
  B: "[~ g3@22 g3@22 ~ g3@22 c3@22 ~ a3@22 d3@22 ~ d3@22 g3@6 ~@4]/7", C: "~@2 [d3,f#3]@11 g3@6 g3@5",
  D: "[g3@6 g3@5 g3@6 [d3,g3]@6 ~@5 d3@6 g3@6 [d3,b3]@5 ~@6 a2@5 g3@6 g3@6 ~@4, ~@23 g3@11 ~@11 d3@11 ~@16]/3", // G5 G
  E: "~ g3@6 g3@6 [c3,g3]@5 g3@6", // C5
  F: "[[c3,g3]@5 g3@6 [d3,g3]@6 d3@5 d3@3 d3@3 d3@6 [d3,f#3]@5 d3@6 [d3,f#3]@5 d3@6 ~@6 f#3@10, ~@11 g3@3 ~@22]/3", // C5 G5 D
  G: "[~ g3@6 g3@5 g3@6 g3@5 g3@6 [d3,g3]@6 ~@5 d3@6 g3@6 [d3,b3]@5 ~@6 c3@5 g3@6 g3@6 ~@5 g3@6 g3@5, ~@35 g3@11 ~@11 d3@11 ~@28]/4", // G5 G
  H: "[~ [c3,g3]@5 g3@6 [c3,g3]@5 g3@6 [d3,g3]@6 d3@5 d3@3 d3@3 b3@6 d3@3 e3@3 ~@3 f3@3 f#3@7 [d3,g3]@14 ~@17, ~@34 f#3@6 d3@3 ~@3 b3@6 a3@6 ~@38]/4", // C5 G5
  I: "[d3,f3] [d3,b3]", J: "[c3,e3]", K: "g3@2 g3 [c3,g3]@3 g3@2 g3 [c3,g3]@3", L: "c3@3 c3@2 c3 ~@3 c3@3",
  M: "c3 [c3,e3] c#3 [c#3,e3]", N: "d3@2 d3 ~@2 g3 ~@3 g3@3, ~ d3 ~@2", O: "~ d3 ~ g3", P: "~ g3 ~ g3",
  Q: "g3@2 g3 g3@3 g3@2 g3 g3@3", R: "c3@5 c3 ~@6", S: "c3 e3 c#3 e3", T: "d3@2 d3 d3@2 g3 ~@6", U: "a2@2 d3 ~",
  V: "d3@2 d3 d3@2 d3 ~@6", W: "[~@2 f3@3 d3 g3@3 d3@2 g3@10 [a2,e3]@2 [c3,g3]]/2",
  X: "[d3,a3]@5 [c3,a3]@4 [a2,f3]@2 [c3,a3]", Y: "[d3,a3]@5 [c3,a3]@4 ~@2 [c3,a3]",
  Z: "[[c3,a3]@2 ~ [b2,g3]@2 ~ [a2,e3]@2 ~ [g2,c3]@2 [e2,c3]@4 ~@6 [a2,e3]@2 [c3,g3]]/2", // F Em A5 C5 C A5 C5
  AA: "[d3,a3]@5 [c3,a3]@4 [g#2,f3]@2 [c3,a3]", AB: "[d3,a3]@5 [c3,a3]@4 ~@3", AC: "~@2 g2 g2@2 ~ g2@2 g2 g2@2 g2",
  AD: "d3@2 b2 a2@2 g2@4 ~@3", AE: "~ c3 ~ c3", AF: "~ c3 ~ a#2", AG: "~ a2 ~ a2", AH: "~ f3 ~ f3",
  AI: "~@2 f3@3 c3 d3@2 d3 d3@2 ~, ~@2 d3 ~@3 g2@3 ~@3", AJ: "e3 ~@3", AK: "~@2 f3@3 c3 d3@2 d3 d3@2 ~",
})).s("gm_baritone_sax").gain(0.3)

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

// other · trumpet · "Trumpet 2"
const trumpet_2 = note("<~@15 A B@4 C D@2 E@4 F@4 G H ~@5 I J K L M N O P I J Q@2 ~@14 R S ~@7 R@3 S>".pickRestart({
  A: "~@2 f#4@11 g4@6 g4@5", B: "[g4@11 g4@6 g4@6 g4@11 g4@6 b4@5 d4@11 g4@22 ~ g4@6 g4@5 g4@6]/4",
  C: "g4@5 g4@6 d4@6 d4@5 d4@2", D: "[~ d4@3 d4@6 d4@5 d4@6 d4@5 d4@6 ~@6 f#4@10]/2",
  E: "[~ g4@6 g4@5 g4@11 g4@6 g4@6 g4@11 g4@6 b4@5 d4@11 g4@22 ~ g4@5]/4",
  F: "[~ g4@5 g4@6 g4@5 g4@6 d4@6 d4@5 d4@3 d4@3 b4@6 b4@6 a4@6 f#4@7 g4@14 ~@17]/4", G: "a4 g4", H: "c5",
  I: "a3@2 d4 ~", J: "d4@2 d4 d4@2 d4 ~@6", K: "d4!2", L: "f4@3 b3@2 b3 ~@6", M: "g4@2 g4 g4@3 g4@2 g4 g4@3",
  N: "g4@5 g4 ~@6", O: "g3 c4 e4 c#4", P: "f4@2 f4 f4@2 d4 ~@6", Q: "[~@2 f4@3 d4 g4@3 d4@2 g4@10 ~@3]/2",
  R: "~@2 a4@3 a4 g4@2 g4 g4@2 ~", S: "g4 ~@3",
})).s("gm_trumpet").gain(0.3)

// chords · piano
const piano = note(`<
  ~@31 A B ~ C@2 D E@4 F C@2 D E@3 G H I J K C L M N O C@2 P Q I R S T E C@2 P Q I R S@3 U
>`.pickRestart({
  A: "[a3,c4,d4,f4]@11 ~ [f3,g3,b3,d4]@11 ~", B: "[c4,e4,g4]@23 ~", C: "c3 ~ c3 ~, [c4,e4]@23 ~",
  D: "[c4,e4]@11 ~ [a#3,c#4,e4]@11 ~, c3 ~ c#3 ~", E: "[c4,d4,f4]@11 ~ [f3,g3,b3,d4]@11 ~, d3 ~ g2 ~",
  F: "g2 ~ g2 ~, [f3,g3,b3,d#4]@23 ~", G: "[c4,d4,f#4]@11 ~ [a3,b3,d4,f#4]@11 ~, d3 ~ g2 ~",
  H: "[c4,e4]@11 ~ [a#3,c4,e4]@11 ~, c3 ~ c3 ~", I: "f2 ~ f2 ~, [c4,f4]@23 ~", J: "f2 ~ f2 ~, [c4,d#4,f#4]@23 ~",
  K: "g2 ~ f2 ~, [g3,c4]@23 ~", L: "[g3,a3,c4,e4]@11 ~ [a3,c4,d4,e4,f#4]@11 ~, a2 ~ d3 ~",
  M: "[g3,a3,c4,e4]@11 ~ [d3,a3,c4,d4,e4,f#4]@6 [g2,f3,g3,b3,d4]@6, a2 ~@3", // Am7 D7 G7
  N: "[f3,g3,b3,d4]@11 ~ [c4,d4,f4]@11 ~, g2 ~ d3 ~", O: "g2 ~ g2 ~, [f3,g3,b3,d4]@23 ~",
  P: "[c4,e4]@11 ~ [g3,a#3,d4,e4]@11 ~, c3 ~ a#2 ~", Q: "a2 ~ a2 ~, [g3,a3,c4,f4]@23 ~",
  R: "f2 ~ f2 ~, [g#3,c4,f4]@23 ~", S: "[c4,d4,f#4]@11 ~ [f3,g3,b3,d4]@11 ~, d3 ~ g2 ~",
  T: "[c4,e4]@11 ~ [a#3,c4,e4]@11 ~, c3 ~ c#3 ~", U: "c3 g2 c3 ~, [c4,e4,g4,c5]@17 ~@7",
})).s("gm_piano").gain(0.3)

// bass · acoustic bass
const bass = note("<~@31 [a1 c2 b1 d2] [g2!2 c2!2] [g2 f2 e2 d2] ~@43>").s("gm_acoustic_bass").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@31 [~ x ~ x]!45 [~ x ~@2]>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@49 [x!12] ~@7 [x!12] ~@18 x>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@50 [x!2 ~ x!2 ~]!7 ~@20>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@31 [x!2]!18 ~@9 [x!2]!18 ~>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~@3 x ~ x ~@3 x ~ x]!18 ~@9 [~@3 x ~ x ~@3 x ~ x]!18 ~>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@50 [~@3 x!3 ~@3 x!3]!7 ~@20>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@76 [~ x]>").gain(0.3)

stack(
  alto_sax, alto_sax_2, baritone_sax, trumpet, trumpet_2, piano, bass, kick, snare, hihat, open_hat, mid_tom, high_tom,
  crash
)