Strudelify
KeyG majorTempo150 bpm
0:00/0:00
// Jingle Bell Rock — Bobby HelmsArranjo: Geziel Sousa Mota
// 150 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 13 "Bombardino (clave de sol)" named as a piano, played on clavinet (its tuba patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5823493; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 63 bars on a 16-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 · "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 · "Trompete"
const trumpet = note(`<
  ~@4 A B C D E F G H A B C D E F I@2 J K L@2 J M N O A B P@2 Q R S T A B C D E F I@2 J K L@2 J M N O A B P@2 Q R S@2 U
  V@2
>`.pickRestart({
  A: "a#4!2 a#4@2 a4!2 a4@2", B: "g4 a4 g4 d4@3 ~@2", C: "g4 a4 g4@2 d4@2 f4@2", D: "g4 a4 g4 d#4@3 ~@2",
  E: "c4 d4@2 d#4 f4 g4@2 f4", F: "c4 d4 d#4@2 f4@4", G: "~@2 g4 f#4 g4 f#4 g4@2", H: "g4@2 c#4 c4@3 ~@2",
  I: "[~ g4@2 g4 a4@2 f4 a#4@5 ~@2 a#4!2]/2", J: "a#4 c5 ~ a#4@3 g4 a#4", K: "a#4 c5 ~ a#4@3 ~ a#4",
  L: "[a#4@2 a4@2 g4@2 f4 d4@5 ~@2 a#4!2]/2", M: "a#4 c5 ~ a#4@5", N: "~ f4!3 g4!4", O: "a4!2 g4@2 f4@2 d#4@2",
  P: "[g4 a4 g4@2 d4@2 f4 g4@7 ~@2]/2", Q: "g4@2 a#4@2 c5!2 a#4!2", R: "f#4!2 a#4 c5@5", S: "~ a#4@2 g4 a4 g4 f4@2",
  T: "a#4", U: "~ a#4@2 g4 a4 a#4 c5@2", V: "[c5 ~@7 d5@8, ~ a#4@15]/2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Trompete"
const trumpet_2 = note(`<
  ~@4 A B C D E F G H A B C D E F I@2 J K L@2 M N O P A B Q@2 R S T U A B C D E F I@2 J K L@2 M N O P A B Q@2 R S T@3
  V@2
>`.pickRestart({
  A: "d4!2 d4@2 d4!2 d4@2", B: "d4!3 a#3@3 ~@2", C: "d4!2 d4@2 a#3@2 d4@2", D: "d#4!3 c4@3 ~@2",
  E: "c4 d4@2 d#4 f4 g4@2 f4", F: "c4 d4 d#4@2 f4@4", G: "~@2 d#4!4 d#4@2", H: "d#4@2 a#3 a3@3 ~@2",
  I: "[~ e4@2 e4 f4@2 f4 d4@5 ~@2 d#4!2]/2", J: "d#4!2 ~ d#4@3 d#4!2", K: "d#4!2 ~ d#4@3 ~ d4",
  L: "[d4@2 d4@2 d4@2 d4 a#3@5 ~@2 g4!2]/2", M: "g4!2 ~ g4@3 g4!2", N: "e4!2 ~ e4@5", O: "~ d#4!7",
  P: "f4!2 d#4@2 d4@2 c4@2", Q: "[d4!2 d4@2 a#3@2 d4 d#4@7 ~@2]/2", R: "g4@2 g4@2 g4!4", S: "f#4!3 f#4@5",
  T: "~ g4@2 d#4 f4 d#4 d#4@2", U: "d4", V: "[d#4 ~@7 f4@8, ~ d4@15]/2",
})).s("gm_trumpet").gain(0.25)

// other · french horn · "Fluguelhorn"
const french_horn = note(`<
  A B C D A E F G H I J K A E F G H I L M N O P@2 Q R S T D U@2 V W X Y Z A E F G H I L M N O P@2 Q R S T D U@2 V W X
  AA@2 AB AC@2
>`.pickRestart({
  A: "a#4!2 a#4@2 a4!2 a4@2", B: "a#4 d5 f4 g4 g#4 g4 f4 d4", C: "f4 ~@3 f4 ~@3", D: "f4", E: "g4 a4 g4 d4@3 ~@2",
  F: "g4 a4 g4@2 d4@2 f4@2", G: "g4 a4 g4@2 d#4@4", H: "c4 d4 ~ d#4 f4 g4 ~ f4", I: "c4 d4 d#4@2 f4@4",
  J: "~@2 g4 f#4 g4 f#4 g4 ~", K: "g4 ~ c#4 c#4@3 ~@2", L: "c4!2 a4@2", M: "a#4@2 g4@2 g#4@2 a#4!2",
  N: "c5!2 ~ a#4@3 a#4!2", O: "c5@3 a#4@4 a#4", P: "[a#4@2 a4@2 g4@2 f4 d4@7 a4!2]/2", Q: "a#4@3 g4@3 g4!2",
  R: "a#4@3 g4@5", S: "~ f4!3 g4!4", T: "a4!2 g4@2 f4@2 ~@2", U: "[f4@2 d4 f4@5]/2", V: "g4", W: "g4 d#4", X: "f#4 d#4",
  Y: "~ g4@2 g4 a4 g4 f4@2", Z: "a#4@3 ~", AA: "~ a#4@2 g4 a4 g4 f4@2", AB: "~ a#4@2 g4 a4 a#4 c5@2",
  AC: "[c5 a#4@15]/2",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Melofone"
const french_horn_2 = note(`<
  A@2 B C@2 D@2 E F G F H C D@2 E F G I J K L M@2 N O P Q R S@2 T U@2 V W C D@2 E F G I J K L M@2 N O P Q R S@2 T U@2
  X@3 Y@2
>`.pickRestart({
  A: "~ a#3 ~ a#3", B: "f4 ~@3 f4 ~@3", C: "f4", D: "[f4@2 d4 f4@2 f4 d4!2]/2", E: "d#4 c4", F: "~ d#4 c4@2",
  G: "~ d#4 c4!2", H: "~@2 c#4 c#4@3 ~@2", I: "g3 a#3 c4@2", J: "f4@2 f4@2 f4@2 d4!2", K: "g4@3 g4@3 g4!2",
  L: "f#4@3 f#4@4 f#4", M: "[f4@2 f4@2 g4@2 f4 a#3@7 g4!2]/2", N: "g4@3 c4@3 c4!2", O: "c4@3 e4@5", P: "~ f4!3 g4!4",
  Q: "a4!2 g4@2 f4@2 ~@2", R: "d4", S: "[d4@2 a#3 d4@5]/2", T: "a#3", U: "d#4 a#3", V: "~ d#4@2 d#4!2 d4 c4@2",
  W: "d4@3 ~", X: "~ d#4@2 d#4 c4!2 d#4@2", Y: "[d#4 d4@15]/2",
})).s("gm_french_horn").gain(0.45)

// other · trombone · "Trombone (clave de sol)"
const trombone = note(`<
  A@2 B C D@3 E F@2 E G D@3 E F@2 H I J K L@2 M N O P D@3 E@2 Q R S D@3 E F@2 H I J K L@2 M N O P D@3 E@2 Q R@2 T U@2
>`.pickRestart({
  A: "a#2 ~ a#2 ~", B: "f3 ~ f3 ~", C: "~ f3 d#3@2 d3@2 c3@2", D: "a#2 d3 f3 d3", E: "d#3!4", F: "d#3 d3 c3 a#2",
  G: "d#3@2 e3 f3@3 ~@2", H: "e3@2 f3!2", I: "a#2@4 ~@2 g3!2", J: "g3!2 ~ g3@3 g3!2", K: "f#3!2 ~ f#3@3 ~ f#3",
  L: "[f3@2 f3@2 f3@2 f3 d3@5 ~@2 d#3!2]/2", M: "d#3!2 ~ d#3@3 d#3!2", N: "e3!2 ~ e3@5", O: "~ f3!3 g3!4",
  P: "a3!2 g3@2 f3@2 d#3@2", Q: "c3!2 d#3!2", R: "f3!4", S: "a#2", T: "f3 d#3 d3 c3", U: "[c3 a#2@15]/2",
})).s("gm_trombone").gain(0.4)

// other · clavinet · "Bombardino (clave de sol)"
const clavinet = note(`<
  A@2 B C D@2 E F@3 G H D@2 E F@3 I J K L M N O@2 P Q D R S T U V W X D@2 E F@3 I J K L M N O@2 P Q D R S T U V W@2 Y
  Z@2
>`.pickRestart({
  A: "a#2 ~ a#2 ~", B: "a3 ~@3 g3 ~@3", C: "~ f3 d#3@2 d3@2 c3@2", D: "a#2 ~ f3 ~", E: "a#2 ~ b2 ~", F: "c3 ~ f3 ~",
  G: "c3 ~@3 f3@4", H: "f3@2 ~@2 f3!2 g3 a3", I: "c3 ~ f3@2", J: "a#3 g3 a#3 ~", K: "d#3 ~ a#2 ~", L: "e3 ~ e3 ~",
  M: "a#2 ~ d3 ~", N: "a#3 a3 g3 f3", O: "g2 ~ c3 ~", P: "f3 ~@3", Q: "~@5 f3 g3 a3", R: "a#2@2 ~@2 f3!2 g3 a3",
  S: "a#3 g#3", T: "g3 f3 d#3 d3", U: "d#3!2", V: "d#3@2 d#3 d3", W: "c3 f3", X: "a#3 f3 g3 a3", Y: "f3!2 g3 a3",
  Z: "[a3 ~@7 d4@8, ~ a#3@15]/2",
})).s("gm_clavinet").gain(0.45)

// bass · tuba · "Tuba em B♭ (Clave de Sol)"
const bass = note(`<
  A@2 B C D E F G H@2 I J D E F G H@2 K L M N O P Q R S T D E U V W X Y Z D E F G H@2 K L M N O P Q R S T D E U V W X
  AA@2 AB AC@2
>`.pickRestart({
  A: "a#1 ~ a#1 ~", B: "a2 ~@3 g2 ~@3", C: "~ f2 d#2@2 d2@2 c2@2", D: "a#1 ~ f2 ~", E: "a#1@2 ~@2 f2!2 g2 a2",
  F: "a#2 ~ b1 ~", G: "c2 ~ f2 ~", H: "c3 ~ f2 ~", I: "c3 ~@3 f2@4", J: "f2@2 ~@2 f2!2 g2 a2", K: "c2 ~ f2@2",
  L: "a#1 g2 a#1 ~", M: "d#2 ~ a#2 ~", N: "e2 ~ e2 ~", O: "a#2 ~ d2 ~", P: "a#2 a2 g2 f2", Q: "g2 ~ c2 ~",
  R: "g2 ~ c3 ~", S: "f2 ~@3", T: "~@5 f2 g2 a2", U: "a#2 g#2", V: "g2 f2 d#2 d2", W: "d#2!2", X: "d#2@2 d#2 d2",
  Y: "c2 f2", Z: "a#2 f2 g2 a2", AA: "f2 ~ f2 ~", AB: "f2 d#2 d2 c2", AC: "[c2 a#1@15]/2",
})).s("gm_tuba").gain(0.45)

// other · xylophone · "Xilofone"
const xylophone = note(`<
  A B C@2 A D E F G H I J A D E F G H K@2 L M N@2 L O P Q A D R@2 S T U V A D E F G H K@2 L M N@2 L O P Q A D R@2 S T
  U@2 W X@2
>`.pickRestart({
  A: "a#5!2 a#5@2 a5!2 a5@2", B: "a#5 d6 f5 g5 g#5 g5 f5 d5", C: "[f5@9 f5 d#5@2 d5@2 c5@2]/2", D: "g5 a5 g5 d5@3 ~@2",
  E: "g5 a5 g5@2 d5@2 f5@2", F: "g5 a5 g5 d#5@3 ~@2", G: "c5 d5@2 d#5 f5 g5@2 f5", H: "c5 d5 d#5@2 f5@4",
  I: "~@2 g5 f#5 g5 f#5 g5@2", J: "g5@2 c#5 c5@3 ~@2", K: "[~ g5@2 g5 a5@2 f5 a#5@5 ~@2 a#5!2]/2",
  L: "a#5 c6 ~ a#5@3 g5 a#5", M: "a#5 c6 ~ a#5@3 ~ a#5", N: "[a#5@2 a5@2 g5@2 f5 d5@5 ~@2 a#5!2]/2",
  O: "a#5 c6 ~ a#5@5", P: "~ f5!3 g5!4", Q: "a5!2 g5@2 f5@2 d#5@2", R: "[g5 a5 g5@2 d5@2 f5 g5@7 ~@2]/2",
  S: "g5@2 a#5@2 c6!2 a#5!2", T: "f#5!2 a#5 c6@5", U: "~ a#5@2 g5 a5 g5 f5@2", V: "a#5", W: "~ a#5@2 g5 a5 a#5 c6@2",
  X: "[c6 a#5@15]/2",
})).s("gm_xylophone").gain(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@4 [~ x ~ x]!7 [~@4 x ~@3 x!2 ~ x!3 ~ x] [~ x ~ x]!46 ~@5>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@12 x ~@23 x ~@26>").gain(0.3)

// drums · ride
const ride = s("rd").struct(`<
  ~@4
  [x ~ x!3 ~ x!2]!7
  [x ~ x!2 ~@4]
  [~@2 x!3 ~ x!2]
  [x ~ x!3 ~ x!2]!23
  [~@2 x!3 ~ x!2]
  [x ~ x!3 ~ x!2]!21
  ~@5
>`).gain(0.3)

stack(trumpet, trumpet_2, french_horn, french_horn_2, trombone, clavinet, bass, xylophone, kick, snare, crash, ride)