Strudelify

We Wish You a Merry Christmas

Pat Boone

KeyF majorTempo147 bpm
0:00/0:00
// We Wish You a Merry Christmas — Pat Boone
// 147 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(147/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 · electric guitar jazz
const electric_guitar_jazz = note(`<
  A B C D E F@2 G H I J K@2 G H I J L@2 M N O@2 P@2 G H Q R S@2 G H I J T@2 G H Q R U@2 M N O@2 P@2 G H Q R S@2 G H Q R
  V@2 ~@5 W G H Q R X@6
>`.pickRestart({
  A: "~@4 c5@4 f5@3 ~ f5 ~ g5 ~", B: "f5 ~ e5@2 d5@3 ~ d5@3 ~ d5@4", C: "g5@3 ~ g5 ~ a5 ~ g5 ~ f5@2 e5@4",
  D: "c5@3 ~ c5@4 a5@3 ~ a5@2 bb5 ~", E: "a5 ~ g5@2 f5@4 d5@3 ~ c5 ~ c5@2",
  F: "[d5@4 g5@4 e5@4 f5@9 ~@3 f4@8, ~@24 c4@5 ~@3]/2", G: "~@2 f4 ~ [bb3,d4]@6 ~@2 gb3@4, c4 ~@3",
  H: "~ b3 g3 ~, d4@11 ~@5, g3@3 ~@5", I: "~@4 [e3,db4]@2 a3 db4, ~@4 a3 ~@3",
  J: "d4@2 e4@2 a3@3 ~ a3@4 c4 ~@3, ~@4 f4@7 ~@5",
  K: "[[bb3,d4] ~@3 [bb3,d4,g4] ~@3 [c4,e4] ~@3 [f4,a4]@4 ~@2 f4@2 f2@2 [c4,f4]@2 f4@8, ~@12 f2@6 a4@5 ~@9, ~@12 c4@2 ~@2 c4@4 ~@4 c4@5 ~@3]/2", // Bb Gm C F F5
  L: "[[bb3,d4] ~@3 [bb3,d4,g4] ~@3 [c4,e4] ~@3 c4@4 ~@4 f4@2 a4 ~ [a3,c4,f4] ~@7, ~@12 a4@6 c4@5 ~@9, ~@12 f3@2 ~@2 f3@7 ~@9]/2", // Bb Gm C F
  M: "~@2 [c4,e4,g4] ~@5", N: "[f2,a3,c4,f4] ~@3 [f2,g3,c4,e4] ~@3 [g2,g3,b3,d4]@2 ~@6",
  O: "[~@8 [a3,f4] ~@3 [bb3,f4] ~@3 [bb3,f4]@2 ~@2 [a3,f4] ~@3 [a3,f4]@2 ~@2 [a3,f4]@2 ~@2, ~@4 f2@5 ~ a2@5 ~]/2", // Dm Bb5 Dm
  P: "[[f3,bb3] ~ [g3,bb3] ~ [g3,c4] ~ [f3,a3]@3 ~@3 f4@4, ~@24 c4@5 ~@3]/2", Q: "~@12 a3@3 ~, ~ a2",
  R: "[a3,db4]@2 a2 ~ [d3,a3]@3 ~ a3@2 d3@2 [a3,c4]@2 d3 ~, ~@2 d4@3 ~@3", // A D5 Am
  S: "[[bb3,d4] ~@3 [bb3,d4,g4] ~@3 [c4,e4] ~@3 [c4,f4]@6 ~@6 f4@8, ~@24 c4@5 ~@3]/2", // Bb Gm C F5
  T: "[[bb3,d4] ~@3 [bb3,d4,g4] ~@3 [c4,e4] ~@3 c4@4 ~@4 f4@2 a4 ~ f4@8, ~@12 a4@6 c4@5 ~ c4@5 ~@3, ~@12 f3@2 ~@2 f3@7 ~@9]/2", // Bb Gm C
  U: "[[bb3,d4] ~@3 [bb3,d4,g4] ~@3 [c4,e4] ~@3 [c4,f4]@6 ~@6 [a3,c4,f4] ~@7]/2", // Bb Gm C F5 F
  V: "[[bb3,d4] ~@3 [bb3,d4,g4] ~@3 [c4,e4] ~@3 [c4,f4]@6 ~@14]/2", W: "~ f4, ~@8 c4@5 ~@3",
  X: "[[bb3,d4]@8 ~@2 g4@8 ~ [c4,e4]@9 ~ f4@57 ~@10, ~@9 d4@8 ~@11 c4@57 ~@11]/6", // Bb C
})).s("gm_electric_guitar_jazz").gain(0.41).pan(0.4)

// chords · harpsichord
const harpsichord = note(`<
  ~@6 A@2 B@3 C@3 B@3 D@3 E F@2 G@3 B@3 C@3 B@3 C@3 B@3 D@3 E F@2 G@3 B@3 C@3 B@3 H@2 ~@5 A@2 B@3 I J ~@4
>`.pickRestart({
  A: "[~@8 [f4,a4,c5]@11 ~ [f4,bb4,d5]@11 ~]/2", // F Bb
  B: "[[g4,b4,d5]@11 ~ [g4,c5,e5]@11 ~ [e4,a4,db5]@10 ~@2 [f4,a4,d5]@6 ~@2 [f4,a4,c5] ~@3]/3", // G C A Dm F
  C: "[[f4,bb4,d5] ~@3 [g4,bb4,d5] ~@3 [e4,g4,c5] ~@3 [a4,c5]@6 ~@6 [f4,a4,c5]@11 ~ [f4,bb4,d5]@11 ~]/3", // Bb Gm C Am F Bb
  D: "[[f4,bb4,d5] ~@3 [g4,bb4,d5] ~@3 [e4,g4,c5] ~@3 [a4,c5]@6 ~@10 f6@2 a6@2 f6@2 c6 ~ e6@2 c6@2 g5@2 ~@2 c6@2 g5 ~, ~@24 f4@11 ~@13, ~@26 c6@5 ~@11 g6@4 ~@2]/3", // Bb Gm C Am
  E: "[a5,f6]@2 f4@2 [g5,e6]@2 ~@2 [g5,d6]@2 g4 ~ c6@2 g5@2, ~@3 g4@2 ~@3", // Dm C G5
  F: "[c6@2 g6@2 e6@2 c6 ~@3 f5@2 a5@2 ~@2 a5@2 f5 ~ c6@4 d6 ~ c6@2 a5@2 g5 ~, ~@4 f4@5 ~@7, ~@14 d6@5 ~ c7@2 ~@10]/2",
  G: "[[d5,f5]@2 bb4@2 [d5,g5]@2 bb4@2 [c5,e5]@2 g4@2 [c5,f5]@6 ~@6 [f4,a4,c5]@11 ~ [f4,bb4,d5]@11 ~]/3", // Dm G5 C F5 F Bb
  H: "[[f4,bb4,d5] ~@3 [g4,bb4,d5] ~@3 [e4,g4,c5] ~@3 [a4,c5]@6 ~@14]/2", // Bb Gm C Am
  I: "[f4,d5]@2 ~@7 [g4,d5]@2 ~@5, bb4 ~@8 bb4 ~@6", J: "~@3 [e4,g4,c5]@2 ~@11",
})).s("gm_harpsichord").gain(0.41).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  A B C@2 D E@2 F G H I J@2 K L M N O P Q R S T U@2 V W X Y Z@2 AA AB AC AD O AE AF AG@2 AH AI@2 Q R S T U@2 V W X AJ
  AK@2 AL AM AN AO AP@2 B C@2 D AQ@2 AF AG@2 AH AR AS@5
>`.pickRestart({
  A: "~@4 c2@4 f1@7 ~", B: "f1@3 ~ bb1@6 ~@2 a1@3 ~", C: "[g1@7 ~ g1@4 c2@7 ~ bb1@3 ~ a1@7 ~]/2",
  D: "a1@3 ~ d2@8 a1 ~ a1@2", E: "[bb1@4 g1@4 c2@4 f1@7 ~@5 f2@3 ~ f2@3 ~]/2", F: "a2 bb2 d2 gb2",
  G: "g2@3 ~ g2@4 b2@4 c3@4", H: "e2@4 g2@4 a2@3 ~ a2@3 ~", I: "db3 d3 f2 d2",
  J: "[bb1 ~@3 g1 ~@3 c2 ~@3 f1@7 ~@5 f2@3 ~ f2@4]/2", K: "a2@3 ~ bb2@4 d2@4 gb2 ~ a1 ~", L: "g2@3 ~ g2@4 b2@4 c3@3 ~",
  M: "e2@4 c2@4 a2@3 ~ a2@3 ~", N: "db3@4 d3@4 f2@4 a2@3 ~", O: "bb1@3 ~ g1@2 ~@2 c2@2 ~@2 f1 ~@3",
  P: "f1@5 ~@3 f1@3 ~@5", Q: "~ c2 ~@2", R: "f1 ~ g1 ~ g1@2 c2 ~", S: "~@8 f1@3 ~ f1@3 ~",
  T: "f1@4 a1@3 ~ a1@3 ~ a1@3 ~", U: "[bb1@2 g1@2 c2@2 f1@3 ~ f1 ~ f2 e2 f2 g2]/2", V: "a2 f2 bb2@2 d2@2 gb2@2",
  W: "g1@3 ~ g1@2 a1@2 b1@2 g1@2 c2@4", X: "e2@3 ~ c2 ~ bb1@2 a1@2 ~@2 a1@2 b1@2", Y: "db2@2 a1@2 d2@4 f1@4 d2 ~ c2@2",
  Z: "[bb1@3 ~ g1@3 ~ c2@2 ~@2 f2@8 ~@4 f1@3 ~ f1@4]/2", AA: "a1@4 bb1@3 ~ bb1@4 a1 ~ a1 ~",
  AB: "g1@3 ~ g1@3 ~ b1@4 c2@4", AC: "e2@4 g2@4 a1@4 a1@3 ~", AD: "db2@4 d2@4 f1@4 d2 ~ c2@2", AE: "f1@5 ~@3 f1@8",
  AF: "a1@3 ~ bb1@7 ~ a1@4", AG: "[g1@8 b1@3 ~ c2@7 ~ b1@3 ~ a1@8]/2", AH: "db2@4 d2@4 f1@4 d2@2 c2 ~",
  AI: "[bb1@3 ~ g1@3 ~ c2@2 ~@2 f2@8 ~@4 f1@3 ~@5]/2", AJ: "db2@2 a1@2 d2@4 f1@4 a1@2 d2 ~",
  AK: "[bb1@3 ~ g1@3 ~ c2@2 ~@2 f2@8 ~@4 f1@2 g1 ~ a1 ~ f1@2]/2", AL: "g1 ~ a1 ~ bb1 ~ c2@2 d2@2 c2@2 bb1@2 a1@2",
  AM: "g1@2 a1 ~ b1 ~ g1@2 a1 ~ b1 ~ c2@2 d2 ~", AN: "e2 ~ d2@2 c2@2 bb1@2 a1@2 b1 ~ db2 ~ a1@2",
  AO: "b1 ~ db2 ~ d2@2 e2@2 f2 ~ e2@2 d2 ~ c2 ~", AP: "[bb1@3 ~ g1@3 ~ c2@2 ~@2 f2@8 ~@4 f1@7 ~]/2",
  AQ: "[bb1@4 g1@4 c2@4 f1@7 ~@5 f1@8]/2", AR: "bb1@7 ~@2 g1@7", AS: "[~@3 c2@6 ~@3 f1@56 ~@12]/5",
})).s("gm_electric_bass_finger").gain(0.46)

// other · music box
const music_box = note("<~@73 A@2 B@2>".pickRestart({
  A: "[~@14 f5@5 e5@4 ~ d5@4 c5@4]/2", B: "[~ bb4@4 a4@4 ~ g4@5 f4@7 ~@10]/2",
})).s("gm_music_box").gain(0.39)

// other · violin
const violin = note("<~@36 A B C D E F@2 ~@11 G@2 H@3 F@2 ~@16>".pickRestart({
  A: "~@4 c5@4 f5@3 ~ f5@2 g5@2", B: "f5@2 e5@2 d5@4 d5@3 ~ d5@4", C: "g5@3 ~ g5@2 a5@2 g5@2 f5@2 e5@3 ~",
  D: "c5@3 ~ c5@4 a5@3 ~ a5@2 bb5 ~", E: "a5@2 g5@2 f5@3 ~ d5@4 c5 ~ c5@2", F: "[d5@4 g5@4 e5@4 f5@7 ~@13]/2",
  G: "[~@8 f5@11 ~ d5@12]/2", H: "[g4@12 e5@10 ~@2 a4@12 f5@11 ~]/3",
})).s("gm_violin").gain(0.48).pan(0.4)

// chords · french horn
const french_horn = note("<A@2 B@2 C D@2 ~@23 E@2 F@2 ~@26 G@2 B@2 C D@2 ~@10>".pickRestart({
  A: "[~@4 [g3,c4] ~@3 a3@11 ~ [bb3,d4]@8 [a3,c4]@2 ~@2, ~@8 f4@9 ~@15]/2", // C5 Bb Am
  B: "[[b3,d4]@6 ~@2 [b3,d4]@4 [c4,e4]@6 ~@2 [bb3,e4]@3 ~ [a3,db4]@7 ~]/2", // Bm C Bbdim A
  C: "[a3,db4]@3 ~ [f3,f4]@4 [d3,d4]@4 [c3,c4]@3 ~", D: "[[f3,bb3]@3 ~ [bb3,d4]@3 ~ [g3,c4]@3 ~ [f3,a3]@8 ~@12]/2",
  E: "[~@8 c4@12 d4@7 ~ [d4,gb4]@4, ~@8 f4@19 ~@5]/2", F: "[d4@12 e4@11 ~@9, g4@23 ~@9]/2",
  G: "[~@8 a3@11 ~ [bb3,d4]@8 [a3,c4]@2 ~@2, ~@8 f4@9 ~@15]/2", // Bb Am
})).s("gm_french_horn").gain(0.35).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@24 A@2 B@3 C@2 ~@5 A@2 B@3 C@2 ~@5 A@2 D@3 C@2 E F G H I@2 ~@5 A@2 B@3 J@6
>`.pickRestart({
  A: "[~@2 [a5,c6]@3 [bb5,d6]@3, ~ f6@3]/2", // Am Bb
  B: "[[g5,b5,f6]@12 [c6,e6,g6]@12 [db6,e6]@12 d6@7 ~ c6@3 ~, ~ a6, ~@36 [a5,f6]@11 ~]/3", // G7 C Dbm Dm
  C: "[[d6,f6]@2 [c6,e6] [a5,f6]@2 ~@3]/2", // Dm C Dm
  D: "[[g5,b5,f6]@12 [c6,e6,g6]@12 [db6,e6]@12 d6@7 ~ c6@4, ~ a6, ~@3 [a5,f6]]/3", // G7 C Dbm Dm
  E: "~@4 [bb4,d5] ~ [f4,bb4] ~ [d5,f5] ~ [f4,bb4] ~ [f5,bb5] ~@3", F: "~@12 [c5,e5] ~ [g4,c5] ~",
  G: "[e5,g5] ~ [g4,c5] ~ [g5,c6] ~@11", H: "~@4 [a4,d5] ~ [d5,f5] ~ [f5,a5] ~ d5 ~ [a5,d6] ~@3",
  I: "[d5 g5 e5 f5@2 ~@3]/2", J: "[[d6,f6]@19 [c6,e6]@9 [a5,f6]@57 ~@11]/6",
})).s("gm_string_ensemble_1").gain(0.36).pan(0.4)

// other · flute
const flute = note(`<
  A B C@2 D E@2 ~@5 F G H@2 I J K L M N O P@2 ~@11 F Q R S I T@2 L M N O P@2 ~@6 U V W ~@2 X Y R S I Z@2 AA AB AC AD
  AE@6
>`.pickRestart({
  A: "~@4 c4@3 ~ c4@7 ~", B: "c4@4 d4@7 ~ d4@4", C: "[d4@7 ~ d4@4 e4@7 ~ e4@3 ~ e4@7 ~]/2",
  D: "e4@3 ~ f4@3 ~ d4@4 c4@3 ~", E: "[d5@4 g5@3 ~ e5@4 f5@10 ~@10]/2", F: "~@4 c5@4 f5@3 ~ f5@2 g5 ~",
  G: "f5 ~ e5@2 d5@4 d5@3 ~ d5@4", H: "[g5@3 ~ g5 ~ a5 ~ g5@2 f5@2 c5@4 b4@4 bb4@4 a5@4 a5@2 bb5 ~, ~@3 e5@3 a4@2]/2",
  I: "a5 ~ g5@2 f5@3 ~ d5@4 c5 ~ c5@2", J: "d5 g5 e5 f4", K: "~@4 c4@2 ~@2 a4 ~@7", L: "~@4 g4 ~@11",
  M: "[c4,f4] ~@3 [c4,e4] ~@3 [d4,g4] ~@3 [c4,e4] ~@3", N: "~@8 [c4,f4,a4] ~@3 [c4,f4,bb4] ~@3",
  O: "a4 ~@3 [f4,a4] ~@7 [f4,a4] ~@3", P: "[[d4,f4] ~@3 [d4,g4] ~@3 [c4,e4]@2 ~@2 [c4,f4]@6 ~@14]/2",
  Q: "f5@2 e5@2 d5@3 ~ d5@3 ~ d5@4", R: "g5@3 ~ g5@2 a5 ~ g5@2 f5@2 e5@4", S: "c5@3 ~ c5@4 a5@3 ~ a5@2 bb5 ~",
  T: "[d5@4 g5@4 e5@4 f5@8 ~@4 a4 ~@7]/2", U: "~@8 [d5,f5] ~ [bb4,d5] ~ [f5,bb5] ~@3", V: "~@12 [c5,e5] ~@3",
  W: "[e5,g5] ~@3 [g5,c6] ~@11", X: "~@8 f5@3 ~ f5@2 g5 ~", Y: "f5@2 e5@2 d5@4 d5@3 ~ d5@4",
  Z: "[d5@4 g5@3 ~ e5@4 f5@6 a4@2 c5@2 e5@2 f5@8]/2", AA: "e5 d5@3", AB: "g5@3 a5 g5 f5 e5@2",
  AC: "c5@4 c5@3 ~ a5@3 ~ a5@2 bb5 ~", AD: "a5@2 g5@2 f5@4 d5@4 c5 ~ c5@2", AE: "[d5@9 g5@9 ~ e5@9 a4@57 ~@11]/6",
})).s("gm_flute").gain(0.46)

// other · flute · soft notes
const flute_soft = note("<~@18 A B ~@2 C ~@19 A B ~@2 C ~@25 D@5>".pickRestart({
  A: "~@8 f4 ~@7", B: "~@4 e4 ~@11", C: "[c4,f4] ~@3 c4 ~@7 c4 ~@3", D: "[~@12 c4@57 ~@11]/5",
})).s("gm_flute").gain(0.26)

// other · trombone
const trombone = note(`<
  A B C@2 D E@2 ~@14 F G H@2 I J@2 K L@2 ~@5 M N O P Q R ~@3 F G H@2 I J@2 K S@2 T U V W R X Y Z@2 AA AB@2 N O P Q AC
  AD@5
>`.pickRestart({
  A: "~@4 a3@3 ~ [f3,a3]@7 ~", B: "[f3,a3]@3 ~ [f3,bb3]@7 ~ [a3,c4]@4",
  C: "[[g3,b3]@7 ~ [g3,b3]@4 [g3,c4]@6 ~@2 [g3,bb3]@4 [a3,db4]@7 ~]/2", // G C5 Gm A
  D: "[a3,db4]@3 ~ [a3,d4]@3 ~ [f3,a3]@3 ~ [d3,f3]@3 ~", E: "[[f3,bb3]@3 ~ [bb3,d4]@3 ~ [g3,bb3]@3 ~ [f3,a3]@9 ~@11]/2",
  F: "~@8 [f3,a3,c4] ~@3 [f3,bb3,c4] ~@3", G: "[f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3",
  H: "[f3@2 ~@2 [g3,bb3] ~@3 [e3,g3] ~@3 [f3,a3]@6 ~@6 [f2,f3] ~ [e2,e3] ~ f3@2 [g2,g3] ~, bb3 ~@27 f2 ~@3]/2", // Gm Em F E G
  I: "a3 [f2,f3] [bb2,bb3]@5 ~, a2 ~@15", // F Bb
  J: "[[g2,g3]@3 ~ [g2,g3]@2 [a2,a3]@2 [b2,b3]@2 [g2,g3]@2 [c3,c4]@10 ~@2 a2@3 ~ a2@2 b2@2]/2", K: "db3@2 a2@2 d3@11 ~",
  L: "[bb2 ~@3 g2@2 ~@2 c3@2 ~@2 f3@6 ~@14]/2", M: "~@8 f2 ~ e2@2 f2 ~ g2 ~",
  N: "a2 ~ f2 ~ bb2 ~ c3 ~ d3@2 c3 ~ bb2 ~ a2 ~", O: "g2@3 ~ g2@2 a2 ~ b2@2 g2 ~ c3 ~ d3 ~",
  P: "e3 ~ d3 ~ c3 ~ bb2 ~ a2 ~ ab2 ~ a2@2 b2 ~", Q: "db3@2 a2 ~ d3 ~ e3 ~ f3 ~ e3@2 d3 ~ c3 ~",
  R: "bb2 ~ a2 ~ g2@2 bb2 ~ c3 ~ c2@2 f2@4", S: "[bb2 ~@3 g2@2 ~@2 c3@2 ~@2 f3@6 ~@6 f2 ~ g2 ~ a2 ~ f2 ~]/2",
  T: "g2 ~ a2 ~ bb2 ~ c3@2 d3 ~ c3 ~ bb2 ~ a2 ~", U: "g2 ~ a2 ~ b2 ~ g2 ~ a2 ~ b2 ~ c3@2 d3 ~",
  V: "e3 ~ d3@2 c3 ~ bb2 ~ a2@2 b2 ~ db3 ~ a2@2", W: "b2 ~ db3 ~ d3@2 e3@2 f3 ~ e3 ~ d3 ~ c3 ~",
  X: "~@8 [f3,a3,c4]@7 ~", Y: "[f3,a3,c4]@3 ~ [f3,bb3,d4]@7 ~ [f3,a3,c4]@2 ~@2",
  Z: "[[f3,b3,d4]@7 ~ [f3,b3,d4]@3 ~ [g3,c4,e4]@6 ~@2 [g3,bb3,e4]@2 ~@2 [a3,db4,e4]@7 ~]/2", // Bdim C Edim A
  AA: "[a3,db4,e4]@3 ~ [a3,d4,f4]@3 ~ d4@3 ~ c4@2 ~@2", // A Dm
  AB: "[[bb3,d4]@3 ~ [bb3,d4,g4]@3 ~ [c4,e4]@3 ~ [c4,f4]@7 ~@5 f2 ~ e2@2 f2 ~ g2 ~]/2", AC: "bb2@9 g2@7",
  AD: "[~@3 c3@8 ~ f2@57 ~@11]/5",
})).s("gm_trombone").gain(0.57).pan(0.3)

// other · tenor sax
const tenor_sax = note(`<
  ~@6 A B C D E F@2 B C G E H@2 I J@2 K L@2 ~@11 M B C D E H@2 I J@2 N O ~@12 P Q R D E S@2 T U V W X@5 ~
>`.pickRestart({
  A: "~@4 c4@4 f4@3 ~ f4@2 g4 ~", B: "f4@2 e4@2 d4@3 ~ d4@3 ~ d4@4", C: "g4@3 ~ g4@2 a4 ~ g4@2 f4@2 e4@4",
  D: "c4@3 ~ c4@4 a4@3 ~ a4@2 bb4 ~", E: "a4@2 g4@2 f4@4 d4@3 ~ c4 ~ c4@2",
  F: "[d4@4 g4@4 e4@4 f4@8 c4@2 ~@2 f4@3 ~ f4@2 g4 ~]/2", G: "c4@3 ~ c4@4 a4@3 ~ a4@2 bb4@2",
  H: "[d4@4 g4@4 e4@4 f4@8 c4@2 ~@2 f4@3 ~ f4@3 ~]/2", I: "f4@3 ~ e4@7 ~ e4@3 ~",
  J: "[f4@3 ~ e4@4 d4@4 c4@6 ~@2 g4@2 ~@2 a4@3 ~ g4@4]/2", K: "f4@4 c5@3 ~ c4@3 ~ c4 ~ c4@2",
  L: "[d4@4 g4@4 e4@4 f4@7 ~@13]/2", M: "~@4 c4@3 ~ f4@2 ~@2 f4@2 g4 ~", N: "f4@4 c5@4 c4@3 ~ c4 ~ c4@2",
  O: "bb3@4 a3@3 ~ g3@3 ~ f3@4", P: "~@4 c4@3 ~ f4@3 ~ f4@2 g4 ~", Q: "f4@2 e4@2 d4@3 ~ d4@3 ~ d4@3 ~",
  R: "g4@4 g4 ~ a4@2 g4 ~ f4@2 e4@4", S: "[d4@4 g4@4 e4@4 f4@8 c4@3 ~ f3 ~@3 f3 ~ g3 ~]/2",
  T: "a3 ~ f3@2 g3 ~ a3 ~ bb3@2 ~@2 bb3 ~ a3 ~", U: "g3 ~ gb3 ~ g3 ~ a3 ~ b3 ~ g3 ~ a3 ~ b3 ~",
  V: "c4@2 ~@2 c4@2 bb3 ~ a3 ~ ab3 ~ a3 ~ b3 ~", W: "db4@2 a3@2 d4 ~ e4 ~ f4@2 ~@6",
  X: "[d4@9 g4@9 ~ e4@9 f4@39 ~@13]/5",
})).s("gm_tenor_sax").gain(0.63)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B C A B C A B C A B D E ~ D F B D A B C A B E A B C A B D G B C A B E ~@2 D F B D A B C A B E A B C A B E ~@6 A
  B C A B ~@6
>`.pickRestart({
  A: "~ x", B: "~ x ~@2", C: "x ~@2 x", D: "x!4", E: "x", F: "~@2 x!2", G: "x!2",
})).gain(0.57)

// drums · snare
const snare = s("sd").struct("<A B C D E A ~@12 F G ~@3 H ~@18 F G ~@3 H ~@12 F B C D E A ~@11>".pickRestart({
  A: "~ x!2 ~", B: "~ x ~ x", C: "~@3 x", D: "~@2 x ~ x ~@2 x", E: "~ x!2 ~@4 x", F: "~ x", G: "~ x ~@2", H: "x!2 ~@2",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct(`<
  ~@2 A ~@3 B C D E C D E C D E C D ~@2 F B C G B C D E C H B C D E C D B C D E C H ~@2 F B C G B C D E C H B C D E C H
  ~@2 I ~@3 B C D E C ~@6
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "x ~ x!2", D: "~ x!2 ~", E: "x!2 ~ x", F: "x!4", G: "~ x", H: "~ x!3", I: "x!2",
})).gain(0.43)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D@2 B A D@11 E F ~ A D B C D@4 B A D@5 A D@4 B E F ~ A D B C D@4 B A D@4 B A B G D@2 B A D@4 ~@6
>`.pickRestart({
  A: "~@2 x!2", B: "x!3 ~", C: "x ~ x!2", D: "x!4", E: "~ x", F: "~ x ~@2", G: "x!2 ~ x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct(`<
// … 12 more lines

More by Pat Boone