Strudelify

Jingle Bells

James Pierpont

KeyB♭ majorTempo140 bpm
0:00/0:00
// Jingle Bells — James Pierpont
// 140 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5886195; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 32 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 Saxophone"
const alto_sax = note("<A B C D E F ~ G H B C D E F ~ I J K L ~ M N O P J K L ~ M N Q R>".pickRestart({
  A: "~@2 d4 ~@2 d4@7", B: "d4@2 d4 db4@2 d4 ~@6", C: "~@2 d4 ~@2 d4@4 d4@3", D: "eb4@2 eb4 f4@2 eb4 ~@6",
  E: "~@2 eb4 ~@3 e4@6", F: "f4@2 f4 g4@2 a4 ~@6", G: "~@2 bb3 a3@2 bb3 c4@2 eb4 c4@2 db4", H: "d4@2 d4 ~@2 d4@7",
  I: "~@5 f4@7", J: "~@2 bb3 ~@2 bb3@7", K: "bb3@2 bb3 a3@2 bb3 ~@6", L: "bb3@3 f4@3 bb3@3 c4@2 d4",
  M: "bb3@3 bb3@3 bb3@3 bb3@2 bb3", N: "~@2 bb3 ~@2 bb3 ~@3 bb3@2 bb3", O: "bb3 a3 bb3 b3", P: "c4 f4",
  Q: "~@2 f4 eb4@2 d4 eb4@2 d4 c4@2 bb3", R: "~@5 bb4 ~@6",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B C D E F ~ G H B C D E F ~ I J K L ~ M N O P J K L ~ M N Q R>".pickRestart({
  A: "~@2 d3 ~@2 d3@7", B: "d3@2 d3 db3@2 d3 ~@6", C: "~@2 d3 ~@2 d3@4 d3@3", D: "eb3@2 eb3 f3@2 eb3 ~@6",
  E: "~@2 eb3 ~@3 e3@6", F: "f3@2 f3 g3@2 a3 ~@6", G: "~@2 bb3 a3@2 bb3 c4@2 eb4 c4@2 db4", H: "d4@2 d3 ~@2 d3@7",
  I: "~@5 f4@7", J: "~@2 bb3 ~@2 bb3@7", K: "bb3@2 bb3 a3@2 bb3 ~@6", L: "bb3@3 f4@3 bb3@3 c4@2 d4",
  M: "bb3@3 bb3@3 bb3@3 bb3@2 bb3", N: "~@2 bb3 ~@2 bb3 ~@3 bb3@2 bb3", O: "bb3 a3 bb3 b3", P: "c4 f4",
  Q: "~@2 f4 eb4@2 d4 eb4@2 d4 c4@2 bb3", R: "~@5 bb4 ~@6",
})).s("gm_tenor_sax").gain(0.3)

// other · trombone
const trombone = note("<A@2 B@2 C@2 D ~ A@2 B@2 E@2 F G H@2 I ~ J K L M H@2 I ~ J K N O>".pickRestart({
  A: "[f3@3 d4@3 c4@2 bb3@3 f3@10 f3@2 f3]/2", B: "[f3@3 d4@3 c4@2 bb3 ~@2 g3@13]/2",
  C: "[~@2 g3 ~@2 eb4 d4@2 c4 ~@2 a3@13]/2", D: "f4@3 f4@3 eb4@2 c4 db4@2 d4",
  E: "[~@2 g3 ~@2 eb4 d4@2 c4 ~@2 f4@4 f4@2 f4@3 f4 e4@2 f4]/2", F: "g4@3 f4@3 eb4@2 a3 c4@2 bb3", G: "~@5 a3@7",
  H: "d4!3 ~", I: "d4@3 f4@3 bb3@3 c4@2 d4", J: "eb4@3 eb4@3 eb4@3 eb4@2 eb4", K: "~@2 d4 ~@2 d4 ~@3 d4@2 d4",
  L: "d4 c4!2 d4", M: "c4 a3", N: "f4@3 f4@3 g4@3 a4@2 bb4", O: "~@5 bb3 ~@6",
})).s("gm_trombone").gain(0.3)

// bass · tuba
const bass = note("<A@3 B C D@2 E A@3 B C D@2 E A@4 B F G H A@3 I J K L M>".pickRestart({
  A: "bb2 f2", B: "eb2!2", C: "eb2 e2", D: "f2!2", E: "bb2 a2 g2 f2", F: "bb2!2", G: "c3!2", H: "f3 eb3 d3 c3",
  I: "bb2!2 c3 d3", J: "eb3 bb2", K: "bb2 g2", L: "c3 f2", M: "bb2@3 bb2@2 bb2 ~@6",
})).s("gm_tuba").gain(0.3)

stack(alto_sax, tenor_sax, trombone, bass)