Strudelify
White Christmas cover art

Bing At Christmas

White Christmas

Bing Crosby

KeyF minorTempo143 bpm
0:00/0:00
// White Christmas — Crosby Bing
// 143 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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 · piano · "A.PIANO 1"
const piano = note(`<
  ~ A@2 B C A@2 B C A@2 B C D E F G H I J K L M N C A@2 B C D E F G H I J K L O A P Q@2 R S T U V W X Y Z AA AB AC AD S
  Q@2 R S T U V AE X Y Z AA AB AF Q@2 R S Q@2 R S Q@2 R S Q@2 R S AG@4
>`.pickRestart({
  A: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  B: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // F
  C: "[f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~", // G7
  D: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [g4,b4] ~ [g4,b4] ~ [a4,c5] ~ [a4,c5] ~", // F G Am
  E: "[b4,d5] ~ [b4,d5] ~ [a4,c5] ~ [a4,c5] ~ [g4,b4] ~ [g4,b4] ~ [f4,g4,a4] ~ [f4,a4] ~", // Bm Am G F
  F: "[e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // Em Em7 C
  G: "[d4,e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // Em7 C
  H: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~", // C Em
  I: "[e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~", // Edim
  J: "[c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~", // F
  K: "[d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~", // Ddim
  L: "[e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~", // Em
  M: "[c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~", // Am
  N: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // F
  O: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~ [f4,g4,b4] ~, ~@4 f4 ~@3", // F G G7
  P: "[eb4,ab4] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~, c5 ~@7", // Ab5 Ab
  Q: "[f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~", // Db
  R: "[gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~", // Gb
  S: "[gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~", // Ab7
  T: "[gb4,bb4] ~ [gb4,bb4] ~ [gb4,bb4] ~ [gb4,bb4] ~ [ab4,c5] ~ [ab4,c5] ~ [bb4,db5] ~ [bb4,db5] ~", // Gb Ab Bbm
  U: "[c5,eb5] ~ [c5,eb5] ~ [bb4,db5] ~ [bb4,db5] ~ [ab4,c5] ~ [ab4,c5] ~ [gb4,ab4,bb4] ~ [gb4,bb4] ~", // Cm Bbm Ab Gb
  V: "[f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [eb4,f4,ab4] ~ [eb4,f4,ab4] ~ [eb4,f4,ab4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~", // Fm Fm7 Db
  W: "[eb4,f4,ab4] ~ [eb4,f4,ab4] ~ [eb4,f4,ab4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~", // Fm7 Db
  X: "[f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,c5] ~ [f4,ab4,c5] ~ [f4,ab4,c5] ~ [f4,ab4,c5] ~", // Db Fm
  Y: "[f4,ab4,b4] ~ [f4,ab4,b4] ~ [f4,ab4,b4] ~ [f4,ab4,b4] ~ [f4,ab4,b4] ~ [f4,ab4,b4] ~ [f4,ab4,b4] ~ [f4,ab4,b4] ~", // Fdim
  Z: "[db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~ [db4,gb4,bb4] ~", // Gb
  AA: "[eb4,gb4,a4] ~ [eb4,gb4,a4] ~ [eb4,gb4,a4] ~ [eb4,gb4,a4] ~ [eb4,gb4,a4] ~ [eb4,gb4,a4] ~ [eb4,gb4,a4] ~ [eb4,gb4,a4] ~", // Ebdim
  AB: "[f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~", // Fm
  AC: "[db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~", // Bbm
  AD: "[gb4,bb4] ~ [gb4,bb4] ~ [gb4,bb4] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~", // Gb
  AE: "[eb4,f4,ab4] ~ [eb4,f4,ab4] ~ [eb4,f4,ab4] ~ [db4,f4,ab4] ~ [bb3,db4] ~ [bb3,db4] ~ [a3,eb4] ~ [a3,eb4] ~", // Fm7 Db Bbm Adim
  AF: "[gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~ [gb4,ab4,c5] ~, ~@4 gb4 ~@3", // Gb Ab Ab7
  AG: "[db5@4 f5@3 ~ f5@7 ~ f5@4 ab5@4 db5@4 eb5@4 f5@26 ~@6, [f4,ab4]@49 ~@15]/4", // Fm
})).s("gm_piano").gain(0.35)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E B F G A B C D H I J K A B L M N O P Q A B C D H I J K A B L M R S T U V W X Y Z AA AB AC V W AD AE AF AG
  AH AI V W X Y Z AA AB AC V W AD AE AJ AK V W X Y AL W AM AN V W X Y AL W AM AN AO@4
>`.pickRestart({
  A: "c2@2 ~ c2@3 g1@2", B: "c2@4 ~@2 c2@6 e2@3 ~", C: "d2@5 ~ d2@6 a2@3 ~", D: "g2@5 ~ g2@2 g1@3 ~ g1@3 ~",
  E: "c2@5 ~ c2@6 g1@4", F: "d2@5 ~ d2@6 f2@3 ~", G: "g2@5 ~ g2 ~ g1@3 ~ g1@3 ~", H: "f2@4 ~@2 f2 ~ e2@4 ~@2 e2 ~",
  I: "d2@5 ~ d2 ~ g1@3 ~ g1@3 ~", J: "c2@4 ~@2 g2@5 ~ g2@3 ~", K: "c2@2 ~ c2@3 g2 ~", L: "f2@4 ~@2 f2@5 ~ c2@4",
  M: "f2@4 ~@2 f2@5 ~ ab2@3 ~", N: "g2@4 ~@2 g1@5 ~ g1@3 ~", O: "a1@5 ~ a1@5 ~ a1@3 ~", P: "d2@5 ~ d2@5 ~ d2@3 ~",
  Q: "g2@3 ~ g2@3 ~ g2@3 ~ g2@2 ~@2", R: "g2@4 ~@2 g2 ~ a2@5 ~ a2 ~", S: "d2@4 ~@2 d2 ~ g2@2 ~@2 g2@2 ~@2",
  T: "c2@5 ~ c2@5 ~ bb1@3 ~", U: "ab1@3 ~ ab1@2 ~@2 bb1@3 ~ c2@2 ~@2", V: "db2@2 ~ db2@3 ab1@2",
  W: "db2@4 ~@2 db2@6 f2@3 ~", X: "eb2@5 ~ eb2@6 bb2@3 ~", Y: "ab2@5 ~ ab2@2 ab1@3 ~ ab1@3 ~",
  Z: "gb2@4 ~@2 gb2 ~ f2@4 ~@2 f2 ~", AA: "eb2@5 ~ eb2 ~ ab1@3 ~ ab1@3 ~", AB: "db2@4 ~@2 ab2@5 ~ ab2@3 ~",
  AC: "db2@2 ~ db2@3 ab2 ~", AD: "gb2@4 ~@2 gb2@5 ~ db2@4", AE: "gb2@4 ~@2 gb2@5 ~ a2@3 ~",
  AF: "ab2@4 ~@2 ab1@5 ~ ab1@3 ~", AG: "bb1@5 ~ bb1@5 ~ bb1@3 ~", AH: "eb2@5 ~ eb2@5 ~ eb2@3 ~",
  AI: "ab2@3 ~ ab2@3 ~ ab2@3 ~ ab2@2 ~@2", AJ: "ab2@4 ~@2 ab2 ~ bb2@5 ~ bb2 ~",
  AK: "eb2@4 ~@2 eb2 ~ ab2@2 ~@2 ab2@2 ~@2", AL: "db2@5 ~ db2@6 ab1@4", AM: "eb2@5 ~ eb2@6 gb2@3 ~",
  AN: "ab2@5 ~ ab2 ~ ab1@3 ~ ab1@3 ~", AO: "[db2@57 ~@7]/4",
})).s("gm_acoustic_bass").gain(0.4)

// other · alto sax
const alto_sax = note(`<
  ~@8 A@2 B C D E F G H I J K L M N O P M Q C R S T G U I V W@2 I X Y@2 ~@14 Z@2 AA AB AC AD AE AF AG@2 AH AI AJ@2 AK AL
  AM@3 AN AO@3 AP AQ@3 AN AR@3 AS AT@3 ~
>`.pickRestart({
  A: "[~@10 g4 ~@3 e4@16 ~@2]/2", B: "f4@4 e4@4 eb4@3 ~ e4@2 ~@2", C: "f4@3 ~", D: "gb4@2 g4@5 ~",
  E: "~@2 a4@2 b4@2 c5 ~", F: "d5@6 c5 ~ b4@4 a4@4", G: "g4", H: "~@8 c4@3 ~ d4@2 ~@2", I: "e4@7 ~ e4@7 ~",
  J: "e4@2 ~@2 a4@8 g4@3 ~", K: "c4@7 ~ c4@7 ~", L: "c4@3 ~ f4@6 ~@2 f4@3 ~", M: "e4@7 ~",
  N: "f4@4 e4@2 ~@2 d4@3 ~ c4@3 ~", O: "d4@12 ~@2 g4 ~", P: "~@2 g4@2 e4 ~ g4@7 ~@3", Q: "f4@4 e4@5 ~ eb4@2 e4@2 ~@2",
  R: "gb4@4 g4@9 ~@3", S: "~@4 a4@3 ~ b4@3 ~ c5@3 ~", T: "c5@7 ~ b4@3 ~ a4@3 ~", U: "~@8 c4@3 ~ d4@3 ~",
  V: "e4@3 ~ a4@7 ~ g4@2 ~@2", W: "[c5@20 ~@4 c4@3 ~ d4@3 ~]/2", X: "a4@3 ~ g4@3 ~ g4@3 ~ b3@3 ~", Y: "[c4@3 ~]/2",
  Z: "[~@10 ab4@9 ~ f4 ~ ab4@5 ~ bb4 ~@3]/2", AA: "f4@15 ~", AB: "gb4@4 f4@2 ~@2 e4@3 ~ f4@3 ~", AC: "gb4@7 ~",
  AD: "g4@2 ab4@5 ~", AE: "~@4 bb4@3 ~ c5@3 ~ db5@3 ~", AF: "db5@6 db5@2 c5@3 ~ bb4@3 ~",
  AG: "[ab4@20 ~@4 db4@3 ~ eb4@3 ~]/2", AH: "f4@8 f4@7 ~", AI: "f4@3 ~ ab4@8 ab4@2 ~@2",
  AJ: "[db5@18 ~@6 db4@3 ~ eb4@3 ~]/2", AK: "f4@7 ~ f4@7 ~", AL: "ab4@3 ~ ab4 ~@3 ab4@3 ~ c4@2 ~@2",
  AM: "[db4@24 ~@2 ab4 ~ f4 ~ f4@14 ~@4]/3", AN: "ab4@2 ~@2 ab4 ~@3 ab4@3 ~ c4@2 ~@2",
  AO: "[db4@19 ~ f4 ~ ab4@5 ~ f4 ~ f4@14 ~@4]/3", AP: "ab4@3 ~ ab4 ~@3 ab4 ~@3 c4@2 ~@2",
  AQ: "[db4@21 ~ f4@2 ~@2 ab4 ~ f4 ~ f4@14 ~@4]/3", AR: "[db4@20 ~@2 ab4 ~@3 ab4@2 f4 ~ f4@14 ~@4]/3",
  AS: "ab4 ~@3 ab4 ~@3 ab4@3 ~ c5@2 ~@2", AT: "[db5@35 ~@13]/3",
})).s("gm_alto_sax").gain(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A@2 B C A@2 B C A@2 B C D E@3 F@4 G@2 H@2 I@2 B C D J@3 K@2 L@2 G M N O P@2 Q R S T@3 U@4 V@2 W@2 P@2 Q R S X@3 Y@2
  Z@2 V AA AB@2 Q R AB@2 Q R AB@2 Q R AB@2 Q R AC@4
>`.pickRestart({
  A: "[g3 a3, [c3,e4]]/2", B: "[d3,a3,f4]", C: "[g2,f3,b3]", D: "[f3,c4,a4] [e3,c4,g4]",
  E: "[[d3,c4]@7 ~ g2@8 ~@8 a3@7 ~ b3@8 [a3,c4]@3 ~ [ab3,d4]@4, f4@7 ~ c3@16, ~ b3@2 ~@3, ~@2 e4@3 ~]/3", // D7 Am Abdim
  F: "[g3 bb3 a3 [ab3,d4], e4@3 ~, c3 f2]/4", G: "[e3,c4,g4]", H: "[[d3,c4]@16 b3@5 ~ a3@5 ~ g3@4, f4, ~@16 g2@15 ~]/2",
  I: "[c3,g3,e4]/2", J: "[[d3,c4]@7 ~ g2@8 ~@8 a3@7 ~ b3@8 a3@3 ~ ab3@3 ~, f4 [c3,e4]@2, ~ b3@2 ~@3]/3",
  K: "[g3@15 ~ bb3@16, [c3,e4]]/2", L: "[a3 [ab3,d4], [f2,e4]]/2", M: "[d3,c4] [g2,b3], f4", N: "[c3,g3,e4]",
  O: "[ab2,gb3,eb4]", P: "[db3,ab3,f4]/2", Q: "[eb3,bb3,gb4]", R: "[ab2,gb3,c4]", S: "[gb3,db4,bb4] [f3,db4,ab4]",
  T: "[[eb3,db4]@7 ~ ab2@8 ~@8 bb3@7 ~ c4@8 bb3@3 ~ a3@4, gb4@7 ~ [db3,f4]@16, ~ c4@2 ~@3]/3", // Eb7 Db
  U: "[ab3@15 ~ b3@16 bb3@16 [a3,eb4]@16, f4@3 ~, db3 gb2]/4", V: "[f3,db4,ab4]",
  W: "[[eb3,db4]@16 c4@5 ~ bb3@5 ~ ab3@4, gb4, ~@16 ab2@15 ~]/2", // Eb7
  X: "[[eb3,db4]@2 ab2@2 ~@2 bb3@2 c4 db4 [gb3,bb3,db4] [a3,c4,eb4], gb4@2 [db3,f4]@3 ~, ~ c4@2 ~@3]/3", // Eb7 Gb Adim Db
  Y: "[ab3@15 ~ b3@16, [db3,f4]]/2", Z: "[bb3 [a3,eb4], [gb2,f4]]/2", AA: "[eb3,db4] [ab2,c4], gb4@15 ~",
  AB: "[ab3 bb3, [db3,f4]]/2", AC: "[[db2,ab2,f3,db4]@29 ~@3]/4",
})).s("gm_string_ensemble_1").gain(0.45)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note("<~@71 A@2 B C D@4 E@2 F@2 G H I J K@4>".pickRestart({
  A: "[db4@28 f3@3 ~]/2", B: "eb3@15 ~", C: "ab3", D: "[~@6 f5@19 ~ db5@2 ~@2 bb4@19 ~@15]/4",
  E: "[~@6 ab5@14 ~@2 f5@5 ~ db5@2 ~@2]/2", F: "[db5@2 eb5 ~@11 ab4 ~@17, ~@3 bb4@6 ~@7]/2", G: "~@8 ab4@2 ~@2 eb4 ~@3",
  H: "db4@2 bb3@2 ~@2 ab3 ~ bb3@4 f3@2 eb3@2", I: "db3@6 eb3 f3", J: "eb3 ab2", K: "[db3@57 ~@7]/4",
})).s("gm_distortion_guitar").gain(0.35)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@24 A ~@15 B ~@14 C D ~@10 E F ~ G ~@4 H ~ I J ~@2 I J ~@2 I J ~@4>".pickRestart({
  A: "~@6 f3 [g3,b3] [d4,f4] [g4,a4] [b4,d5] [f5,g5] [a5,b5] [d6,f6] g6 ~", // G Dm Gsus2 Bm Fsus2 Asus2 Dm
  B: "[eb3,gb3] [ab3,c4] [eb4,gb4] [ab4,c5] [eb5,gb5] [ab5,c6] [eb6,gb6] [gb6,ab6] [c6,eb6] [gb5,ab5] [c5,eb5] [gb4,ab4] [c4,eb4] ab3 ~@2", // Ebm Ab Ebm Ab Ebm Ab Ebm Gbsus2 …
  C: "~@2 [db6,eb6] [gb5,bb5] [db5,eb5] [gb5,bb5] [db5,eb5] [gb4,bb4] [eb5,gb5] [bb4,db5] [eb4,gb4] [bb4,db5] [eb4,gb4] [bb3,db4] [eb3,gb3] [gb3,ab3]", // Dbsus2 Gb Dbsus2 Gb Dbsus2 Gb Ebm Bbm …
  D: "[bb3,c4] [eb4,gb4] [ab4,bb4] [c5,eb5] [gb5,ab5] [bb5,c6] [eb6,gb6] ab6 ~@8", // Bbsus2 Ebm Absus2 Cm Gbsus2 Bbsus2 Ebm
  E: "[gb3,bb3] [db4,f4] [gb4,bb4] [db5,f5] [gb5,bb5] [db6,f6] [gb6,bb6] db7 ~@8", // Gb Db Gb Db Gb Db Gb
  F: "[eb3,gb3] [a3,db4] [eb4,gb4] [a4,db5] [eb5,gb5] [a5,db6] [eb6,gb6] [a6,db7] ~@8", // Ebm A Ebm A Ebm A Ebm A
  G: "[db6,eb6] [gb5,bb5] [db5,eb5] [ab4,bb4] [eb4,gb4] [bb3,db4] [gb3,ab3] bb3 [gb3,ab3] [bb3,c4] [eb4,gb4] [ab4,bb4] [c5,eb5] [gb5,ab5] [c6,eb6] ab6", // Dbsus2 Gb Dbsus2 Absus2 Ebm Bbm Gbsus2 Bbsus2 …
  H: "[db3,f3] [ab3,bb3] [db4,f4] [ab4,bb4] [db5,f5] [ab5,bb5] [db6,f6] [ab6,bb6] ~@8", // Db Absus2 Db Absus2 Db Absus2 Db Absus2
  I: "[eb3,gb3] [bb3,db4] [eb4,gb4] [bb4,db5] [eb5,gb5] [bb5,db6] [eb6,gb6] bb6 ~@8", // Ebm Bbm Ebm Bbm Ebm Bbm Ebm
  J: "[eb3,gb3] [ab3,c4] [eb4,gb4] [ab4,c5] [eb5,gb5] [ab5,c6] [eb6,gb6] ab6 ~@8", // Ebm Ab Ebm Ab Ebm Ab Ebm
})).s("gm_orchestral_harp").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@2 A C A C A@2 B@2 A C A C A@2 B@2 A C A C A@2 B@2 A C A C A@2 B@2 A C A C A@2 B@2 A C A C A@2 B@2 A C A C A@2
  B@2 A C A C A@2 B@2 A C A@2 B@2 A C A C A@2 B@2 A C A C A@2 ~@3
>`.pickRestart({
  A: "x", B: "x ~@4 x ~@2", C: "x ~@6 x",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 A ~@7 A ~@11>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B E B@3 C B@3
  D B@3 C B@3 D ~@4
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~@2 x!2 ~@2 x ~", C: "~@4 x ~ x ~@3 x!3 ~ x ~", D: "~@2 x!2 ~ x!3", E: "~ x!7",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B
  C@2 D B@3 C@2 D B C@3 B C@2 D B C@3 ~@4
>`.pickRestart({
  A: "~ x", B: "~ x!7", C: "x!8", D: "x!7 ~",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@3 ~@3 A ~@3
  A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~ [x!4]!88 [x ~@5 x ~@6 x ~@2] [~@3 x ~@12]>").gain(1.29)

stack(
  piano, bass, alto_sax, string_ensemble_1, distortion_guitar, orchestral_harp, kick, kick_soft, snare, open_hat, crash,
  jingle_bells
)

More by Bing Crosby