Strudelify

Jingle Bells

Jband

KeyA majorTempo220 bpm
0:00/0:00
// Jingle Bells — Jband
// 220 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5277599; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(220/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 · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@23 A ~@3 B C D E@2 F G@3 ~@2 H I J K L M N M O P N M Q R M S L ~@7 L ~@7 K L M N M O P N M Q R M S L ~@8 K T U V W X
  Y Z AA AB AC ~ AD ~@2 H AE J AF@2
>`.pickRestart({
  A: "~@2 g3@2 b3@2 e4@2 ~@2 d4@5 ~", B: "~ c4 a3 f#3 g3 c3 ~@2", C: "~@4 a3@2 a3 ~@5 a3 ~@3",
  D: "~@4 g#3@2 g#3 ~@5 e4@2 ~@2", E: "[e4@2 d4@2 c4@2 d4@2 e4 ~ f4@2 c4@2 d4@5 ~ d4 d#4 [e4,f4] f#4 g4@8]/2",
  F: "e4 ~ e4 ~ e4@4", G: "[e4 ~ d#4 e4@6 e4 g4@2 c4@2 d4 e4@2 g4 a4 f#4 g4 ~@3]/3", H: "g4 ~@3 g4 ~@3",
  I: "a4 ~@3 g4 ~@3", J: "g4 ~@7", K: "~@8 d3 e3 ~ f3 g3 a3 ~ b3", L: "c4 ~@7", M: "[c3,e3] ~@2 [c3,e3] ~@2 [c3,e3] ~",
  N: "[c3,e3] ~@7", O: "[c3,d#3] ~@7", P: "[c3,d#3] ~@2 [c3,d#3] ~@2 [c3,d#3] ~", Q: "[d3,g3] ~@7", R: "[c3,f3] ~@7",
  S: "[d3,g3]@2 ~@6 d3 e3 ~ f3 g3 a3 ~ b3", T: "[c4,e4] ~ [c4,e4] ~ [c4,e4]@4", U: "[c4,e4] ~ [b3,d#4] [c4,e4]@5",
  V: "[c4,e4] g4 c4 d4, ~ f#3", W: "~ f#4 a4 f#4 g4 c4 ~ g4", X: "[c4,f4] ~ [b3,f4] [c4,f4]@3 [c4,f4] ~",
  Y: "[c4,f4] [c4,e4]@3 [c4,e4] ~ [c4,e4] ~", Z: "[c#4,e4] [a3,d4] ~ [a3,c#4] [a3,d4] ~ [a3,e4] ~",
  AA: "[g3,d4]@2 [d4,g4] ~", AB: "~@5 c4@2 ~", AC: "[c4,e4] ~ [b3,d#4] [c4,e4] ~ c4@2 ~", AD: "~ g4 a4 g4 a#4 ~ a4 g4",
  AE: "a4 ~@3 b4 ~@3", AF: "[~@3 g4@4 ~]/2",
})).s("gm_tenor_sax").gain(0.35)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@23 A ~@3 B C D E F G@2 H I ~@2 J K L M N O P O Q R P O S Q O T L ~@7 L ~@7 M N O P O Q R P O S Q O T L ~@8 M U V@2 W
  X Y Z AA AB@2 ~ AC ~@2 J AD AE AF@2
>`.pickRestart({
  A: "~@2 c2@2 e2@2 a2@2 ~@2 g2@5 ~", B: "~ c3 a2 f#2 c2!2 ~ g3", C: "c3 ~ b2 c3@3 c3 ~", D: "c3 c3@3 c3 ~ e3 ~",
  E: "e3@2 d3@2 c3@2 d3@2 e3 ~ f3@2 c3@2 d3 ~", F: "d3@2 ~ e3@2 ~ f#3@2 g3@8, ~@2 d#3@2 ~ f3@2 ~@9",
  G: "~@4 c3@2 c3 ~@5 c3 ~@3", H: "~@2 e3 ~@5", I: "~ g3 a3 f#3 g3 ~@3", J: "g2 ~@3 g2 ~@3", K: "a2 ~@3 g2 ~@3",
  L: "c3 ~@7", M: "~@8 d3 e3 ~ f3 g3 a3 ~ b3", N: "c4 ~@7", O: "c2 ~@2 c2 ~@2 c2 ~", P: "c2 ~@7", Q: "f2 ~@7",
  R: "f2 ~@2 f2 ~@2 f2 ~", S: "g2 ~@7", T: "g2@2 ~@6 d2 e2 ~ f2 g2 a2 ~ b2", U: "c4 ~@3 g3 ~@3", V: "c4 ~@7 g3@2 ~@6",
  W: "c4 ~@15", X: "[c3,f3] ~ [b2,f3] [c3,f3]@3 [c3,f3] ~", Y: "[c3,f3] [c3,e3]@3 [c3,e3] ~ [c3,e3] ~",
  Z: "[c#3,e3] [a2,d3] ~ [a2,c#3] [a2,d3] ~ [a2,e3] ~", AA: "[g2,d3]@2 g3 ~", AB: "~@5 g3@2 ~",
  AC: "~ g2 a2 g2 a#2 ~ a2 g2", AD: "a2 ~@3 b2 ~@3", AE: "e3!2 d3 ~ c#3 ~ c3!2", AF: "[b2 c#3 d#3 e3 ~@2 c3@8 ~@2]/2",
})).s("gm_baritone_sax").gain(0.35)

// other · trumpet
const trumpet = note(`<
  ~@23 A B C D@2 E F G H B I@3 J K L M N O P Q R Q R Q R Q S R Q T R ~@7 R ~@7 O P Q R Q R Q R Q S R Q T R ~@8 O B C U V
  W X Y Z AA@2 ~@4 AB AC AD AE@2
>`.pickRestart({
  A: "~@2 c5@2 e5@2 a5@2 ~@2 g5@5 ~", B: "e5 ~ e5 ~ e5@4", C: "e5 ~ d#5 e5@5", D: "[~ e5 g5@2 c5 d5 ~ e5@7 ~@2]/2",
  E: "~@4 f5@2 f5 ~@5 f5 ~@3", F: "~@4 e5@2 e5 ~@5 e5 ~@3", G: "~@4 d5@2 d5 ~@5 d5 ~@3",
  H: "d5@4 d5 d#5 [e5,f5] f#5 g5@8", I: "[e5 ~ d#5 e5@6 e5 g5@2 c5@2 d5 e5@7 ~@2]/3", J: "a4 ~ a4 a4@3 a4 ~",
  K: "a4 g4@3 g4 ~ g4 ~", L: "g5 ~ f#4@2 g4@2 b4@2 ~@8", M: "f5 ~ f#4@2 g4@2 b4@2 ~@8", N: "g4 ~@7",
  O: "~@8 [d4,d5] [e4,e5] ~ [f4,f5] [g4,g5] [a4,a5] ~ [b4,b5]", P: "[c5,g5,a5,c6] ~@7", Q: "c6 ~@2 c6 ~@2 c6 ~",
  R: "c6 ~@7", S: "d6 ~@7", T: "b5 ~@2 d6@5", U: "e5 g5 c5 d5", V: "~@7 g5, e5",
  W: "[c5,f5] ~ [b4,f5] [c5,f5]@3 [c5,f5] ~", X: "[c5,f5] [c5,e5]@3 [c5,e5] ~ [c5,e5] ~",
  Y: "[c#5,e5] [a4,d5] ~ [a4,c#5] [a4,d5] ~ [a4,e5] ~", Z: "[g4,d5]@2 g5 ~", AA: "~@5 c6@2 ~", AB: "g5 ~@3 g5 ~@3",
  AC: "a5 ~@3 b5 ~@3", AD: "[g5,c6] ~@7", AE: "[~@3 c6@4 ~]/2",
})).s("gm_trumpet").gain(0.35)

// other · trombone
const trombone = note(`<
  ~@23 A B C D@2 E F G H I J@3 K L M N O P Q R S R S T S T U V R W S ~@7 S ~@7 P Q R S R S T Q T U V R W S ~@8 P X@3 Y Z
  AA AB AC AD@2 AE ~@3 AF AG AH AI@2
>`.pickRestart({
  A: "~@2 c3@2 e3@2 a3@2 ~@2 g3@5 ~", B: "c3 ~ c3 ~ c3@4", C: "c3 ~ b2 c3@5", D: "[~ c3 g3@2 a2 d3 ~ e3@7 ~@2]/2",
  E: "~@4 f3@2 f3 ~@5 f3 ~@3", F: "~@4 e3@2 e3 ~@5 e3 ~@3", G: "~@4 d3@2 d3 ~@5 d3 ~@3",
  H: "d3@4 d3 d#3 [e3,f3] f#3 g3@8", I: "e3 ~ e3 ~ e3@4", J: "[e3 ~ d#3 e3@6 e3 g3@2 c3@2 d3 e3@7 ~@2]/3",
  K: "f3 ~ f3 f3@3 f3 ~", L: "f3 e3@3 e3 ~ e3 ~", M: "~@8 g4 ~ f#3@2 g3@2 b3@2", N: "~@8 [f3,d4] ~ f#3@2 g3@2 b3@2",
  O: "c2 ~@7", P: "~@8 d3 e3 ~ f3 g3 a3 ~ b3", Q: "g3 ~@7", R: "a3 ~@2 g3 ~@2 a3 ~", S: "a3 ~@7",
  T: "a3 ~@2 a3 ~@2 a3 ~", U: "b3 ~@7", V: "f3 ~@7", W: "g3 ~@2 d3@5", X: "c4 ~@7 g3@2 ~@6", Y: "c4 ~@15",
  Z: "[c3,f3] ~ [b2,f3] [c3,f3]@3 [c3,f3] ~", AA: "[c3,f3] [c3,e3]@3 [c3,e3] ~ [c3,e3] ~",
  AB: "[c#3,e3] [a2,d3] ~ [a2,c#3] [a2,d3] ~ [a2,e3] ~", AC: "[g2,d3]@2 g3 ~", AD: "~@5 e3@2 ~",
  AE: "[c4,e4] g4 [a3,c4] d4, ~ f#3", AF: "g3 ~@3 g3 ~@3", AG: "a3 ~@3 b3 ~@3", AH: "c3!2 a#2 ~ a2 ~ g#2!2",
  AI: "[g2 a2 b2 c3 ~@2 c3@8 ~@2]/2",
})).s("gm_trombone").gain(0.35)

// chords · piano
const piano = note(`<
  ~@38 A B ~ C D E F G H I@2 J K L M N O P O Q R@2 S@2 O P O Q R@2 S@2 T U V@3 W X Y V Z AA Y Z ~@9 AB AC AD AE AF AG AH
  AI AJ AK AL AE AM AG AH AN AO AP AQ@2
>`.pickRestart({
  A: "[d5,g5] ~@7 [d5,g5] ~@7", B: "[d5,f5] ~@7 [f4,d5] ~@7", C: "~@4 [g4,f5,g5]@3 ~ [g4,f5,g5]@3 ~ [g4,f5,g5]@3 ~",
  D: "f#2 [g2,e5,g5] c5 [c2,e5,g5] [d#2,f5,a5] [e2,e5,g5] [g2,c5] [c2,d5], ~@4 c2 ~@11", // C F7 Em C5 Csus2
  E: "[a2,b4,e5] [g2,c5] [d#4,a4] c2 d#2 [e2,e4,g4] [g2,d#4,f#4] [c2,e4,g4], ~@4 c2 ~ [e4,g4]@4 ~@6", // Asus2 C5 D#dim Em Cm C Em
  F: "[a2,g4,c5] [g2,c4] [f4,a4] [c2,d#4,f#4] [d#2,e4,g4] [e2,c4] [g2,f#4,a4] [c2,d#4,f#4], ~@4 c2 ~@11", // Am7 C5 F Cdim D# C D Cdim
  G: "[a2,e4,g4]@2 g2@2 c2 ~ [c2,d#4]@2 [d#2,e4]@2 [e2,g4]@2 [g2,c5]@2 [c2,e5]@2", // A7 Cm Emaj7 Em C5 C
  H: "[a2,c5,d#5,f5] [g2,d#5] c5 [f2,c5,d#5,f5] [g#2,d#5] [a2,c5] [c3,c5,d#5,f5] [f2,d#5], ~@4 f2 ~@11", // F7 Cm F7 G#5 Am F7
  I: "[[d3,c5] [c3,d#5] c5 [f2,f4] [g#2,g#4] [a2,a4] [c3,c#5] f2 d3 [c3,c4] [f4,a4] [c2,c4] [d#2,e4,g4] [e2,d#4,f#4] [g2,e4,g4] [c2,f4,a4], ~@4 f2 ~@9 [g4,c5]@4 ~@2 c2 ~@11]/2", // D7 Cm F G# A C#maj7 C F …
  J: "[a2,e4,g4]@2 [g2,c4]@2 c2 ~ c2@2 d#2@2 [e2,c4]@2 [g2,d#4]@2 [c2,e4]@2, ~@3 c4@2 ~@3", // A7 C5 C Cm C
  K: "[a2,g4] [g2,c5,e5] [d5,g5] [g2,c5,e5] a#2 [b2,d5,g5] [d3,f#5] [g2,d5,g5], ~@4 g2 ~@11", // A7 C G5 C G D G5
  L: "[e3,c5,d#5,f5]@2 [d3,d#5]@2 c5@2 [f2,f5]@2 d#5 f5 ~ d#5 [c3,c5]@2 [f2,f4]@2, ~@4 f2 ~@3 g#2@2 a2@2 ~@4", // F7 D#maj7 F C F
  M: "[d3,e4,g4] [c3,c4] [f4,a4] [c2,d#4,f#4] [d#2,e4,g4] [e2,c4] g2 [c2,c4], ~@4 c2 ~@11", // Em7 C F Cdim D# C
  N: "a2 [g2,g3] [c#4,d4] [g2,e4,f#4] a#2 b2 d3 g2, ~@4 g2 ~@3 [d4,g4]@8", // G Dmaj7 C G5
  O: "c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2 a2@2 g2@2", P: "a#2 c2 a2 c2 g2 d#2 e2 g2", Q: "a#2 c2 a2 c2 g2 d#2 e2 d2",
  R: "f2 ~ f2@2 g#2@2 a2@2 c3@2 f2@2 d3@2 c3@2", S: "g2 ~ g2@2 a#2@2 b2@2 d3@2 g2@2 e3@2 d3@2",
  T: "c2 ~ c2@2 [d#2,g4,f5,g5]@2 e2@2 [g2,g4,f5,g5]@2 c2@2 [a2,g4,f5,g5]@2 g2@2", // D# G7 Dm
  U: "f#2@2 g2@2 c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2", V: "a2@2 g2@2 c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2",
  W: "a2@2 g2@2 f2 ~ f2@2 g#2@2 a2@2 c3@2 f2@2", X: "d3@2 c3@2 f2 ~ f2@2 g#2@2 a2@2 c3@2 f2@2",
  Y: "d3@2 c3@2 c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2", Z: "a2@2 g2@2 g2 ~ g2@2 a#2@2 b2@2 d3@2 g2@2",
  AA: "e3@2 d3@2 f2 ~ f2@2 g#2@2 a2@2 c3@2 f2@2", AB: "~@4 [g4,f5,g5]@3 ~ [g2,g4,f5,g5]@2 c2@2 [a2,g4,f5,g5]@2 g2@2",
  AC: "[c5,e5] c2 [d#2,c5,e5] e2 g2 c2 a2 g2, c2 ~@7 [c5,e5]@8", // C
  AD: "[a#2,c5,e5] c2 [a2,b4,d#5] c2 g2 d#2 e2 g2, ~@6 [c5,e5]@9 ~", // C7 B7 C
  AE: "c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2 a2@2 g2@2, [c5,e5] g5 f#4@2, ~@2 [a4,c5] d5", // C Am
  AF: "a#2 [c2,f#5] [a2,a5] [c2,f#5] [g2,c5,g5] [d#2,c5] e2 [d2,g5], e5@15 ~", // Cdim A Cdim C5 Cm G5
  AG: "[c5,f5] f2 [g#2,b4,f5] a2 c3 f2 [d3,c5,f5] c3, f2 ~@5 [c5,f5]@5 ~@5", // F5 Fdim Dm7 F5
  AH: "[c5,f5] c2 d#2 e2 [g2,c5,e5] c2 [a2,c5,e5] g2, c2 ~ [c5,e5]@5 ~@9", // F5 C Am C
  AI: "[c#5,e5] [d2,a4,d5] f2 [f#2,a4,c#5] [a2,a4,d5] d2 [b2,a4,e5] a2, d2 ~@15", // C#m D5 F#m D5 Esus4
  AJ: "g2 ~ g2@2 a#2@2 b2@2 d3@2 g2@2 e3@2 d3@2, [g4,d5] [d5,g5]", // G5
  AK: "[c5,e5] c2 [d#2,c5,e5] e2 g2 c2 a2 g2, c3 ~@7 [c5,e5]@8", // C
  AL: "[c5,e5] c2 [d#2,b4,d#5] e2 g2 c2 a2 g2, c2 ~@5 [c5,e5]@9 ~", // C G#m C
  AM: "a#2 [c2,g5] [a2,a5] [c2,g5] [g2,a#5] d#2 [e2,a5] [g2,g5], e5@15 ~", // C5 A C5 Gm A5 G
  AN: "[d5,g5] ~ [g2,f#4]@2 [f#1,g4]@2 [f#2,b4]@2 [d5,g5] ~ [f2,f#4]@2 [e1,g4]@2 [e2,b4]@2, g1 ~@3 f1 ~@3", // G5 Gmaj7 B5 G5 F#maj7 Em E5
  AO: "[d5,a5] ~ [d#2,f#4]@2 [c#1,g4]@2 [c#2,b4]@2 [d5,b5] ~ [d2,f#4]@2 [g1,g4]@2 [g2,b4]@2, d#1 ~@3 d1 ~@3", // D5 D#m C#dim C#7 G D G
  AP: "[c5,c6]@15 ~", AQ: "[~@12 [c2,c3,e3,g3,a#3,d4]@15 ~@5]/2",
})).s("gm_piano").gain(0.5)

// chords · piano · soft notes
const piano_soft = note(`<
  A B A C A B A D@2 E F G H@3 I J E F K L@3 M N O P@2 Q R S T U V W@2 X Y Z AA AB AC ~@70
>`.pickRestart({
  A: "c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2 a2@2 g2@2", B: "a#2 c2 a2 c2 g2 d#2 e2 g2", C: "a#2 c2 a2 c2 g2 d#2 e2 d2",
  D: "[a#2@2 c2@2 a2@2 c2@2 g2@2 d#2@2 e2@2 d2@2 c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2 a2@2 g2@2, ~@14 g4@5 ~ e5@4 d5@4 c5@4]/2",
  E: "c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2 a2@2 g2@2, g4@15 ~",
  F: "c2 ~ [c2,g4]@2 [d#2,e5]@2 e2@2 g2@2 c2@2 a2@2 g2@2, ~@6 d5@5 ~ c5@4", // C5 Emaj7
  G: "f2 ~ f2@2 g#2@2 a2@2 c3@2 f2@2 d3@2 c3@2, a4@15 ~",
  H: "[f2 ~ [f2,a4]@2 [g#2,f5]@2 a2@2 [c3,e5]@2 f2@2 d3@2 c3@2 g2 ~ g2@2 a#2@2 b2@2 d3@2 g2@2 e3@2 d3@2 g2 ~ g2@2 [a#2,g5]@2 [b2,g5]@2 [d3,f5]@2 [g2,d5]@2 [e3,c5]@2 [d3,d5]@2, ~@10 d5 ~@3 b4@16 g5@5 ~@13]/3", // F C# C D# Em Dm G5 C …
  I: "e5@2 [g5,c6] ~ d#2@2 [e2,e5,g5]@2 [g2,c5,c6]@2 [c2,e5,g5]@2 [a2,f5,g5,a5]@2 [g2,e5,g5,c6]@2, c2 ~ c2@2 ~@12", // C5 Em C5 C Dm C
  J: "c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2 a2@2 g2@2, g4 e5 d5 c5",
  K: "f2 ~ [f2,f5,a5]@2 g#2@2 [a2,c5]@2 [c3,f5,a5]@2 f2@2 [d3,e5,g#5]@2 [c3,f5,a5]@2, a4@15 ~", // F Am F E7 F
  L: "[f2 ~ [f2,a4]@2 g#2@2 a2@2 [c3,e5]@2 [f2,d5]@2 d3@2 c3@2 g2 ~ g2@2 a#2@2 b2@2 d3@2 g2@2 [e3,g5]@2 d3@2 g2 ~ [g2,g5]@2 [a#2,d5]@2 [b2,d#5]@2 [d3,c5,e5]@2 [g2,g4]@2 [e3,b4,d5]@2 [d3,g4,c5]@2, ~@4 f5@4 ~@6 g5@5 ~ g5@4 g5@4 ~@2 a5@4 ~@14]/3", // F C Dm Em G A# B C …
  M: "c2 ~ c2@2 d#2@2 [e2,f5,a5]@2 g2 ~ g2@2 a#2@2 b2@2, [g4,c5]@6 ~@4 g5@5 ~, ~@10 e5 ~ e5@4", // Fmaj7 C5
  N: "[c5,e5] c2 [d#2,c5,e5] e2 g2 c2 a2 g2, c2 ~@7 [c5,e5]@8", // C
  O: "[a#2,c5,e5] c2 [a2,b4,d#5] c2 g2 d#2 e2 g2, ~@6 [c5,e5]@9 ~", // C7 B7 C
  P: "[c2 ~ [c2,c5,e5]@2 d#2@2 e2@2 [g2,f#4,a4,c5]@2 [c2,f#4,d5]@2 a2@2 g2@2 a#2@2 [c2,c6]@2 [a2,a5]@2 [c2,f#5]@2 [g2,c5,g5]@2 [d#2,c5]@2 e2@2 [d2,g5]@2, ~@4 g5@4 ~@6 e5@17 ~]/2", // C F#dim D7 C A Cdim C5 Cm …
  Q: "[c5,f5] c2 [d#2,b4,f5] e2 g2 c2 [a2,c5,f5] g2, c2 ~@5 [c5,f5]@5 ~@5", // F5 Fm7b5 F F5
  R: "[a#2,c5,f5] c2 a2 c2 [g2,c5,e5] d#2 [e2,c5,e5] g2, ~@2 [c5,e5]@5 ~@9", // A#sus2 C
  S: "[c#5,e5] [c2,a4,d5] d#2 [e2,a4,c#5] [g2,a4,d5] c2 [a2,a4,e5] g2, c2 ~@15", // C#m D7 A Gsus2 A5
  T: "a#2 c2 a2 c2 g2 d#2 e2 d2, [g4,d5] [d5,g5]", U: "[e3,c5,e5] d3 [c5,e5] c2 d#2 e2 g2 c2, ~@4 c3 ~@3 [c5,e5]@8",
  V: "[a2,c5,e5] g2 [b4,d#5] c2 d#2 e2 g2 c2, ~@4 c2 ~ [c5,e5]@10", // Am B C
  W: "[a2@2 [g2,c5,e5]@2 c2 ~ c2@2 d#2@2 e2@2 [g2,d5]@2 c2@2 a2@2 [g2,g5]@2 [a#2,a5]@2 [c2,f#5]@2 [a2,g5]@2 c2@2 [g2,f#5]@2 [d#2,g5]@2, ~@2 g5@2 f#4@3 ~@9, ~@8 [a4,c5]@4 ~@2 e5@17 ~]/2", // C G5 G A#maj7 Cdim A7 Gmaj7 D# …
  X: "[e2,c5,f5] g2 [b4,f5] f2 g#2 a2 [c3,c5,f5] f2, ~@4 f2 ~ [c5,f5]@5 ~@5", // Fmaj7 Bdim F5
  Y: "[d3,c5,f5]@2 c3@2 c2 ~ c2@2 [d#2,c5,e5]@2 e2@2 [g2,c5,e5]@2 c2@2, ~@2 [c5,e5]@5 ~@9", // Dm7 C
  Z: "a2 [g2,f#4] [g1,g4] [g2,b4] f#1 [f#2,f#4] [f1,g4] [f2,b4]", // Gmaj7 G F# Fsus2 Fdim
  AA: "e1 [e2,f#4] [d#1,g4] [d#2,b4] c#1 [c#2,f#4] [d1,g4] [d2,b4]", // Esus2 D# G#m F#5 G5 G
  AB: "g1@2 g2@2 c2 ~ c2@2 d#2@2 e2@2 g2@2 c2@2, [g4,c5]@15 ~", AC: "a2 g2 f#2 g2 d2 f#2 g2 d2",
})).s("gm_piano").gain(0.3)

// bass · acoustic bass
const bass = note(`<
  ~@24 A B A B C D A E A B A B C D F@2 ~ G A B A B C D A B H D I J A B A B C D A B A B A B C D A B K A B A B C D A B H D
  I J L ~@8 G A B A B C D A B A B A B C D M N ~ O@2
>`.pickRestart({
  A: "c2 e2 g2 a2", B: "a#2 a2 g2 e2", C: "f2 a2 c3 d3", D: "d#3 d3 c3 a2", E: "a#2 a2 g2 ~", F: "c2 ~ c2 ~",
  G: "~@8 g2!2 ~ g2!3 ~ g2", H: "g2 b2 d3 e3", I: "c2 d#2 e2 g2", J: "g2 g1 g2 g1", K: "c2@4 e2@4 g2!2 ~ g2!3 ~ g2",
  L: "c2 ~@3", M: "c3 b2 a#2 a2", N: "g#2 g2 f#2 f2", O: "[~@3 c2@4 ~]/2",
})).s("gm_acoustic_bass").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@24 A@16 B ~ A@28 C A@12 D@5 C@3 E ~ F G@15 ~@3>".pickRestart({
  A: "x!2", B: "~ x ~@2", C: "x", D: "x!4", E: "x ~ x!2", F: "x!2 ~ x", G: "~ x ~ x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@22 A B C@16 D E C@28 F C@12 G@2 ~@3 H@3 I E J K@15 ~@3>".pickRestart({
  A: "~@4 x!12", B: "x!6 ~@10", C: "~ x ~ x", D: "x ~@7 x!2 ~ x!3 ~ x", E: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
  F: "~@4 x ~@3 x!2 ~ x!3 ~ x", G: "x!2 ~ x!3 ~ x ~@8", H: "x!16", I: "x!10 ~ x!3 ~ x", J: "~ x", K: "x!2",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@24 A@16 B ~ A@28 C A@12 ~@10 D E@15 ~@3>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~ x ~@2", D: "~ x", E: "x!2",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@40 A B ~@28 A ~@12 C@2 ~@6 A B ~@19>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x!2 ~@2",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@85 [~@4 x!2 ~ x ~@4 x!2 ~ x] ~@26>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@85 [x!2 ~ x ~@4 x!2 ~ x ~@4]!2 ~@25>").gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@23 A ~@18 B ~@3 B ~@3 B@2 ~@2 B ~@7 B ~@8 B ~@3 B ~@3 B@2 ~@2 C@2 ~@3 D@3 E ~ B ~@16 F ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "x", C: "~ x", D: "x!16", E: "x!8 ~@8", F: "~@3 x",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@24 A@16 B ~ A@28 B A@12 ~@10 A@16 ~@3>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.3)

// drums · cowbell
const cowbell = s("cb").struct("<~@86 [~@4 x!2 ~ x ~@4 x!2 ~ x] [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x] ~@24>").gain(0.3)

stack(
  tenor_sax, baritone_sax, trumpet, trombone, piano, piano_soft, bass, kick, snare, pedal_hat, open_hat, mid_tom,
// … 2 more lines