Strudelify

Jingle Bells

James Lord Pierpon

KeyG majorTempo90 bpm
0:00/0:00
// Jingle Bells — James Lord Pierpon
// 90 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5866840; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 51 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · violin
const violin = note(`<
  A B C B D E F G H I J K L M N O P Q R@2 S@2 T U H Q R@2 S@2 T U V W X Y Z AA AB AC AD W X Y Z AA AB AE AF AG AH
>`.pickRestart({
  A: "~@3 d4", B: "d4 b4 a4 g4", C: "d4@3 d4", D: "e4@3 e4", E: "e4 c5 b4 [e4,a4]", F: "[a4,d5]@3 c5", G: "b4!2 a4 f#4",
  H: "g4@3 ~", I: "g4!2 g4@2 g4!2 g4@2", J: "b4 c5 d5@2", K: "a4!2 a4@2 g4!2 g4@2", L: "g4!2 a4 g4 a4@2 a4@2",
  M: "b4!2 g4@2 g4!2 g4@2", N: "g4@2 a4@2 b4 a4 g4@2", O: "g4 c5 g4 b4", P: "g4 a4 b4@2",
  Q: "b4 ~ b4 ~ b4 ~ b4 ~ c5 ~ c5 ~ c5 ~ c5 ~", R: "b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~",
  S: "c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~", T: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~",
  U: "f#4 ~ f#4 ~ f#4 ~ f#4 ~ e4@4 f#4@4", V: "g4@3 d4", W: "g4 ~ g4 ~", X: "g4@4 g4@4 g4@4 g4 a4 g4 f#4",
  Y: "e4 g4 d4 g4", Z: "f#4@2 e4 d4 c#4@2 d4 e4 d4@4 f#4@4", AA: "g4 a4 b4 a4 g4@2 g4@2 g4@2 g4!2 g4@4",
  AB: "g4@4 c5@4 d5!4 d5@2 d5!2", AC: "e5@2 e5@2 e5@2 e5!2 d5@2 d5@2 d5@4", AD: "b4!2 a4 f#4 d4@4",
  AE: "e5@2 e5@2 e5@2 d5 c5 d5@2 d5@2 d5@4", AF: "d5!2 a4 f#4 b4@4", AG: "b4@3 ~ b4 ~ b4 ~ b4@3 ~ b4 ~ b4 ~",
  AH: "b4@3 b4",
})).s("gm_violin").gain(0.3)

// other · violin
const violin_2 = note(`<
  A B C D E F G H I J K L M N O P Q R@3 S@2 T U I R@3 S@2 T U V W X Y Z W X AA AB W X Y Z W X AC AB AD AE
>`.pickRestart({
  A: "~@3 d4", B: "d4 b4 a4 g4", C: "d4@3 d4", D: "d4 g4 f#4 d4", E: "e4@3 e4", F: "e4 g4 a4!2", G: "f#4@3 g4",
  H: "g4!2 f#4 d4", I: "b3@3 ~", J: "g4!2 g4@2 g4!2 g4@2", K: "g4@2 g4 f#4 g4@4", L: "a4!2 a4@2 g4!2 g4@2",
  M: "d4!2 e4!2 d4 g4 f#4 d4", N: "g4!2 d4@2 b3@2 b3@2", O: "c4@2 d4@2 d4!2 b3@2", P: "e4 g4 d4 g4", Q: "e4 d4 d4@2",
  R: "g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~", S: "e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~",
  T: "f#4 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~", U: "d4 ~ d4 ~ d4 ~ d4 ~ c4@4 d4@4", V: "b3@3 f#4",
  W: "b4!2 b4@2 b4!2 b4@2", X: "b4 d5 g4 a4 b4@4", Y: "c5!2 c5@2 b4!2 b4@2", Z: "b4 a4!2 b4 a4@2 d5@2",
  AA: "c5@2 c5@2 c5@2 c5!2 b4@2 b4@2 b4@4", AB: "d5!2 c5 a4 g4@4", AC: "c5@2 c5@2 c5@2 b4 a4 b4@2 b4@2 b4@4",
  AD: "g4 ~ g4 ~ g4@3 ~ g4 ~ g4 ~ g4@3 ~", AE: "g4@3 g4",
})).s("gm_violin").gain(0.3)

// other · cello · "Violoncello"
const cello = note(`<
  A B C D E F G H I J K L M N O P Q R@3 S@2 T U I R@3 S@2 T U V W@2 X Y W@2 X Z W@2 X Y W@2 X AA AB AC
>`.pickRestart({
  A: "~@3 g2", B: "g2 d3 b2 g2", C: "g2 g3 f#3 d3", D: "g2@2 a2 b2", E: "c3@3 c3", F: "c3!2 d3 c#3", G: "d3@3 c3",
  H: "g3!2 d3 d2", I: "g2@3 ~", J: "g2!2 g2@2 g2!2 g2@2", K: "g3 d3 g2@2", L: "a2!2 a2@2 g2!2 g2@2",
  M: "b2!2 c3!2 d3@2 d2@2", N: "g2@2 b2 d3 g2@4", O: "e3 f#3 g3 d3 g2@4", P: "c3@2 c3@2 d3 c3 b2@2", Q: "c3 d3 g2@2",
  R: "g2 g3 g2 g3", S: "c3 g3 c3 g3", T: "d3 a3 d3 a3", U: "d3 a2 d3 d2", V: "g2@3 d3",
  W: "g2@4 g3!2 g3@2 g2@4 g3!2 g3@2", X: "c3@4 g3!2 g3@2 g2@4 g3!2 g3@2", Y: "a2@4 a3!2 a3@2 d2@4 d3!2 d3@2",
  Z: "d3!2 d3@2 d2!2 d2@2 d3!2 d3@2 g2@4", AA: "d3 d2 g2@2", AB: "g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~", AC: "g2@3 g2",
})).s("gm_cello").gain(0.3)

stack(violin, violin_2, cello)