Strudelify
Hello, Dolly! cover art

1964

Hello, Dolly!

Louis Armstrong

KeyC majorTempo145 bpm
0:00/0:00
// Hello, Dolly! — Louis Armstrong
// 145 bpm, 4/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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.

// bass · acoustic bass · "bass"
const bass = note(`<
  ~@2 A B C D E F G H I@2 J K L M N O N@2 P N@2 O Q O R S T@2 U V W X Y Z Y AA AB AC AD AE AF AG AH AI L M N O N@2 P N@2
  O AJ O AK@2 AL AM U AN AO AP AQ AR Y Z AS AT AU F AV AC AW AX
>`.pickRestart({
  A: "c2@3 c1 c2@3 c1 c2@4 g#2@3 c1", B: "c2@4 g2@3 c1 f2@3 f1 c2@4", C: "c2 ~@2 c1 g1@4 c2@3 c1 c2@3 c1",
  D: "c2@3 c1 g1@4 f2@4 c3@3 f1", E: "c2@3 c1 c2@3 c1 c2@3 c1 g#1@4", F: "c2@3 c2 d#2@3 ~ f2@3 f1 c2@4",
  G: "a#1@3 a#0 a#1@3 a#0 b1@4 f2@3 b0", H: "c2@3 c2 d#2@3 ~ f2@3 f1 f2@3 f1",
  I: "[a#2@6 ~ a#2 a#2@6 ~@2 g2@6 ~@2 f2@6 ~ f2, ~@15 a#2@2 ~@6 g2@2 ~@7]/2", J: "g2@7 g1 a2@7 g1",
  K: "a#2@6 ~ d3 g3@3 ~ d3@3 ~", L: "a#1@8 f2@6 ~ f2", M: "a#1@8 e2@6 ~ e2", N: "c2@8 g2@6 ~ g2", O: "f2@8 c3@6 ~ c3",
  P: "c2@8 g#2@6 ~ g#2", Q: "a#1!2", R: "a#1@3 a#0 c2@3 a#0 d2@3 a#0 f2@4", S: "a#2@3 a#0 a#2@4 g2@3 a#0 f2@3 a#0",
  T: "[g2@3 g1 a#1@4 c2@3 g1 c#2@3 ~ d2@3 g1 d3@4 a#2@3 g1 g2@3 g1, ~@15 e2@4 ~@13]/2",
  U: "f2@3 f1 f2@3 f1 a#1@3 a#0 a#1@3 a#0", V: "f2@4 c3@3 f1 a#1@4 f2@3 a#0", W: "d#2@3 d#1 a#1@4 d#2@3 d#1 d#2@3 d#1",
  X: "c2@3 c1 c2@3 c1 d2@4 a2@3 d1", Y: "g2@3 g1 d3@4 a#2@3 g1 g2@3 g1", Z: "d2@3 d1 f1@4 a1@4 d2@3 d1",
  AA: "f3@3 d1 e3@4 d3@3 d1 c3@3 d1", AB: "c2@4 g2@3 c1 c2@3 c1 g#1@4", AC: "c2@3 c1 c2@3 c1 f2@4 c3@3 f1",
  AD: "a#1@3 a#0 a#1@3 a#0 b1@3 b0 f1@4", AE: "c2@3 c2 d#2@3 ~ f2@4 c3@3 f1", AF: "a#1@7 a#0 c2@7 a#0",
  AG: "d2@6 ~ f2 a#2@3 ~ f2@3 ~", AH: "g2@7 g1 d2@6 ~ g1", AI: "g2@3 g1 d3@3 ~ a#2@3 g1 g2@3 g1",
  AJ: "a#1@6 ~ a#1 a#1@8", AK: "[a#1@3 a#0 d1@4 d#1@3 a#0 e1@3 ~ f1@3 a#0 f2@4 d2@3 a#0 a#1@3 a#0, ~@15 g1@4 ~@13]/2",
  AL: "g3@3 g1 f3@4 d3@3 g1 a#2@4", AM: "g2@3 g1 a2@4 a#2@3 g1 d3@4", AN: "f2@3 f1 f2@3 f1 a#1@3 a#1 d2@3 ~",
  AO: "d#2@4 a#2@3 d#1 d#2@3 d#1 a#1@4", AP: "c2@3 c1 g1@4 d2@3 d2 f#2@3 ~", AQ: "g2@3 g1 a#1@4 d2@4 g2@3 g1",
  AR: "d2@4 d2@3 d1 f2@4 f2@3 d1", AS: "c2@4 g2@3 c1 c2@3 c1 c2@3 c1", AT: "c2@3 c1 g1@4 f2@3 f1 f2@3 f1",
  AU: "c2@3 c1 g1@4 c2@3 c1 c2@3 c1", AV: "c2 ~@2 c1 c2@3 c1 c2@3 c1 c2@3 c1",
  AW: "~ f2 ~ a#1 d2@3 ~ d#2@4 e2@3 ~, a#2 ~@7", AX: "f2@3 g2 a2@2 ~ a#2@2 e2 ~ f2 a#1@4",
})).s("gm_acoustic_bass").gain(0.51)

// chords · piano
const piano = note(`<
  ~@2 A B C D E F G H I J K L M N O P Q R S T U V W X Y@2 Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL I J K L AM N AN AO Q
  AP S AQ O AR AS AT AU@2 AV@2 AW AX AC AY AE AZ AE AH BA BB BC BD E BE BF BG
>`.pickRestart({
  A: "[c3,g3,a#3,e4,a4,d5] [c3,e3,a#3,d4,e4,g#4]", B: "[c3,d#3,a#3,c4,d#4,g4] [f2,f3,a3,d#4,g4,c5]",
  C: "[c3,e3,a#3,d4,e4,g4] [c3,g#3,a#3,e4,g#4,d5]", D: "[g3,a#3,d#4,g4] [f3,a3,d#4,g4,a4,d5], [c3,d5] ~@15",
  E: "[c3,e3,a#3,d4,e4,g4] [c3,e3,a#3,d4,e4,g#4]", F: "[g3,a#3,d#4,g4,c5] [f3,a3,d#4,g4,a4,c5], c3 ~@15",
  G: "[a#2,f3,a#3,f4,d5] [b2,g#3,d4,f4,g#4,b4]", H: "[c3,d#3,a#3,c4,d#4,g4] [f3,a3,d#4,f4,a4,c5]",
  I: "[a#3,f4,a#4,d5,a#5]", J: "~@3 [a#3,f4,a#4,d5,a#5] ~@4 [a#3,f4,a#4,d5,a#5] ~@3 [a#3,f4,a#4,d5,a#5]@4",
  K: "[g3,d4,g4,a#4,g5]", L: "~@3 [g3,d4,g4,a#4,g5] ~@4 [g3,d4,g4,a#4,g5] ~@3 [g3,d4,g4,a#4,g5]@4",
  M: "[d3,a3,a#3,f4]@9 ~@2 [d3,a3,a#3,f4]@5", N: "[a#2,e3,g3,c#4,e4]", O: "[c3,g3,a#3,d#4,g4]", P: "[f2,f3,a3,d#4,f4]",
  Q: "[d#3,c4,d#4,g4]@9 ~@2 [d#3,c4,d#4,g4]@5", R: "[d#3,a#3,d4,g4]@9 ~@2 [d#3,a#3,d4,g4]@5", S: "[d#3,c4,d#4,g#4]",
  T: "[c4,g4], [d#3,d#4] ~@15", U: "[a#3,c4], [d#3,g4] ~@15", V: "[a3,d4,f4], d#3 ~@15",
  W: "[c#4,e4]@2 ~ [d3,g3,d4,f4]@5 [c#4,e4]@2 ~ [c#3,g3,c#4,e4]@5, a#2!2", X: "[d#3,a3,c4,f4]",
  Y: "[[a#2,f3,a#3,f4]@9 ~@2 [a#3,f4]@13 ~@3 [d4,d5] ~@4, ~@11 [a#2,f3]@20 ~]/2", // A#5 D A#5
  Z: "[[g3,d4,g4,a#4,g5]@10 ~ [g3,d4,g4,a#4,g5]@14 ~@2 [g3,d4,g4,a#4,g5] ~@4]/2", // Gm
  AA: "[f3,g#3,d#4,g4,g#4,c5] [a#2,g3,g#3,d4,g4,c5]", AB: "[f3,g#3,d#4,g4,g#4,c5] [a#2,g3,g#3,d4,g4,a#4]",
  AC: "[d#2,d#3,g3,f4] [d#2,d#3,g3,c4,d#4], [d4,a#4] ~@7 a#4 ~@7", AD: "[c3,d#3,a3,c4,d#4,g4] [d3,f#3,c4,d4,f#4,a4]",
  AE: "[g2,a#3,d4,a#4,g5]@7 ~", AF: "[a4,f5]@8 ~@3 [f5,f6]@5, [d3,a3,d4]@15 ~", AG: "[g3,a#3,d4] ~@6 [g3,a#3,d4]@9",
  AH: "[d3,a3,d4,a4,f5]@7 ~", AI: "[c3,a3,a#3,e4,a4,d5] [c3,e3,a#3,d4,e4,g#4]",
  AJ: "[g3,a#3,d#4,g4,c5] [f3,a3,d#4,g4,a4,d5], c3 ~@15", AK: "[a#2,a#3,f4,a#4,d5] [b2,g#3,d4,f4,g#4,b4]",
  AL: "[c3,g3,a#3,d#4,g4,d5] [f2,f3,a3,d#4,f4,d5]", AM: "[a#2,f3,a3,d4,f4]", AN: "[d#3,a#3,d4,g4]",
  AO: "[d#3,a3,b3,f4]@9 ~@2 [d#3,a3,d4,f4]@5", AP: "[d#3,a#3,d4,g4]@9 ~@2 [d#3,a#3,c4,g4]@5", AQ: "[c3,g3,c4,g4]",
  AR: "[d#3,a3,d4,f4]@9 ~@2 [d#3,a3,b3,g4]@5", // Dm D#aug
  AS: "[c#4,e4]@2 ~ [d3,g3,d4,f4]@5 e4 ~@2 [a#2,c#3,g3,a#3]@5, a#2@8 ~@3 c#4 ~@4", // C#m G7 Gdim
  AT: "[d#3,a3,d4,g4]@9 ~@2 [d#3,a3,d4,g4]@5", // D#maj7
  AU: "[[d3,a#3,d4,f4,d5]@10 ~ [d3,a#3,d4,f4,d5]@14 ~@2 [d3,a#3,d4,f4,d5] ~@4]/2", // A#
  AV: "[[g2,a#3,d4,a#4]@9 ~@2 [d4,a#4]@13 ~@3 [g4,g5] ~@4, ~@11 [g2,a#3]@20 ~]/2", // Gm G Gm
  AW: "[f2,f3,g#3,d#4,g4,c5] [a#2,g#3,d4,g4,g#4,a#4]", AX: "[f2,f3,g#3,d#4,c5] [a#2,g#3,d4,g4,g#4,a#4], g4 ~@15",
  AY: "[c3,g3,a3,g4,c5] [d3,b3,c4,f#4,g#4,e5], d#4 ~@15", AZ: "[d3,a3,d4,a4]@13 ~@3",
  BA: "[c3,g3,a#3,e4,a4,d5] [c3,g#3,a#3,e4,g#4,d5]", BB: "[g3,a#3,d#4,g4,c5] [f2,f3,a3,d#4,g4,b4], c3 ~@15",
  BC: "[c3,e3,a#3,d4,e4,a4] [c3,g#3,a#3,e4,g#4,d5]", BD: "[c3,d#3,a#3,d4,d#4,g4] [f3,a3,d#4,g4,a4,c5]",
  BE: "[g3,a#3,d#4,g4,d5] [f2,f3,a3,d#4,g4,b4], c3 ~@15", BF: "[d5,f5,a#5] ~@3 [c5,a#5] ~@3, ~@8 d#5 ~@7",
  BG: "[d#5,f5,a#5] ~@6 [d5,f5,a#5] ~@2 a#6 [f3,a6,a#6] [a#2,a#6]@2 ~@2, ~@5 e3 ~@2", // D#sus2 A# A#maj7 A#
})).s("gm_piano").gain(0.25)

// other · piano · "solo piano"
const piano_2 = note("<~@41 A B C D E F G H I J K L M N O P@2 ~@20>".pickRestart({
  A: "~@3 d5 ~@3 d5 d#5 ~@2 d#5 e5@2 ~@2", B: "f5@2 ~@2 f5@2 ~@3 f5@2 g5 f5@2 ~ d5",
  C: "~@3 a#4 ~@4 a#4 ~@2 f5@2 ~ f#5 ~, ~@7 a4@2 ~@7", D: "g5@2 a#5@2 g5@2 a#5@4 g5 ~@3 d5 g5",
  E: "d5@2 a#4 ~@3 a#4 ~@9", F: "~@3 a5 a#5 ~ c6 ~@4 a5 a#5 ~@2 c6", G: "~@2 c6 ~@3 a#5 ~ c6@2 a#5@2 a5@2 g5 ~",
  H: "f5 ~@3 f5@11 ~", I: "~@7 e5 f5 ~@2 f#5 ~@4", J: "~@4 [c5,d#5,g5] ~@5 [c5,d#5,g5]@2 ~@2 d#5 ~",
  K: "[c5,d#5,g5]@2 ~@2 [c5,d#5,f#5] ~@2 g5@5 ~@4, ~@6 [c5,d#5]@5 ~@5", // Cm Cdim Cm
  L: "~@8 [c5,d#5,g#5]@2 ~ [g#4,c5,d#5]@2 ~ d#5 c5, ~@8 g#4 ~@2 g#5 ~@4", // G#
  M: "[g#4,c5,d#5,g#5]@2 ~@2 [g#4,c5,d#5,g5] ~@2 g#5@4 ~@3 [c6,d6] ~, ~@3 [g#4,c5,d#5]@2 ~@3", // G# G#maj7 Csus2 G#
  N: "~@2 d6@7 ~@2 c6 a#5 ~@2 a5", O: "a#5@2 c6 ~ a#5 ~ a5 ~ g5 ~ f5 ~@4 f#5",
  P: "[~ g5 ~@2 g5@2 ~@2 g5@2 f#5@3 ~ f5@6 ~@12]/2",
})).s("gm_piano").gain(0.79).pan(1)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@2 A B A B A B C B D@2 E@2 F G H I H J K L J I M I N@2 O@2 P@2 Q R S T S T A B C B D@2 E@2 F G H I H J K L J I M I
  N@2 O@2 P@2 Q R S T S T A B A B A B U ~
>`.pickRestart({
  A: "[e4,g4] [e4,g#4]", B: "[d#4,g4] [a4,c5]", C: "[d4,f4]!2", D: "[d3,f3]/2", E: "[a#2, d3 ~@31]/2", F: "f3, d3 ~@15",
  G: "[c#3,e3]", H: "[d#3,g3]", I: "[a3,c4]", J: "[d#3,g3] ~@15", K: "g#3, d#3 ~@15", L: "g3, d#3 ~@15",
  M: "[d3,f3] [c#3,e3]", N: "[d4,f4]/2", O: "[a#3, d4 ~@31]/2", P: "[g#4,c5] [d4,f4]", Q: "[g4,a#4]!2",
  R: "d#4 [f#4,a4], g4 ~@15", S: "[a#3,d4]", T: "[f4,a4]", U: "[d3,f3]",
})).s("gm_string_ensemble_1").gain(0.26)

// other · trombone
const trombone = note(`<
  ~@10 A B C D E F@2 ~ G H I J K@2 L@2 M N O P Q@3 R S T@2 U V W@2 ~@17 X Y Z AA AB@4 AC AD AE AF@2 AG@2 AH@2 AI AJ AK
>`.pickRestart({
  A: "~@8 c#4@2 ~ d4@2 c#4 ~ d4", B: "~@3 a#3 ~ g3 f3@4 ~@6", C: "~@7 f#4 g4 ~@6 f#4",
  D: "g4@3 d4@2 ~ a#3@2 ~@2 d4 ~@5", E: "f3@10 ~ g3 f3 ~@2 e3", F: "[~@3 e3@7 g3 ~ e3 ~@2 d#3@15 ~ c3]/2",
  G: "~@3 d#4 ~@3 d#4 ~@6 c4 ~", H: "d#4 ~@3 c4 ~@2 d#4@4 ~@5", I: "~@4 d#4 ~@3 d#4@6 c4 ~",
  J: "d#4@2 ~ c4 ~@3 d#4@7 ~@2", K: "[g3@12 g#3@3 a3@8 ~ f3@5 ~@3]/2", L: "[a#3@7 ~ g3@3 f#3@3 ~ f3@13 ~@4]/2",
  M: "~@4 c#4@2 d4 ~@3 c#4@2 d4@2 a#3 ~", N: "~@2 c#4@2 d4@2 f4@2 d4 ~ a#3 g3 ~@2 f3@2",
  O: "g3@5 ~@3 g3@2 ~@2 g3@2 ~@2", P: "c#4@2 ~ d4@2 ~@2 g4@2 ~@2 d4 a#3@2 ~@2",
  Q: "[a#3@12 a3@2 ~ g#3@11 ~@2 g#3@2 ~ g3@16 ~, ~@27 a#3@2 ~@19]/3", R: "f#3@7 ~", S: "d3@3 ~",
  T: "[~@4 f#3@2 ~ g3@2 ~@3 g3 ~@2 d3@2 ~@2 d3@11 ~@2, ~@11 f#3@2 ~@19]/2", U: "a3@2 ~@5 a3@2 ~@3 g3 f#3 ~ f3",
  V: "e3@15 ~", W: "[d#3@11 ~ d#3@2 d3@13 ~@5]/2", X: "~@4 c#4 ~@2 d4@3 ~@6", Y: "c#4@2 ~ d4 c4 ~@2 a#3 ~@3 f3 ~@4",
  Z: "~@3 f#4 g4 ~@3 f#4@2 g4 ~ f4 ~@2 d4", AA: "~@3 d4 ~@2 a#3 ~ d4 ~ a#3 ~@5",
  AB: "[a#3@9 ~@2 a#3 a3@2 ~ g#3@8 ~ a#3@2 g#3@2 ~@2 g3@12 ~@2 a#3@2 ~ a3@16 ~]/4", AC: "~@4 d3 ~@3 g3@7 ~",
  AD: "~@4 d3 ~@2 a2@3 ~@2 d3 ~@3", AE: "~@6 d3 ~ g3@3 d3@5", AF: "[a2@5 ~@3 g3@2 ~ f#3 f3 ~ e3@13 ~ e3@3 ~]/2",
  AG: "[d#3@5 ~@3 g3@2 f#3@2 f3@2 ~ e3@15 ~@2]/2", AH: "[d#3@4 ~@4 g3@3 ~ f3@2 ~ e3@4 ~@5 e3@5 ~@3, ~@11 f#3@2 ~@19]/2",
  AI: "f3 ~ f#3 ~ g3 ~ a3 ~", AJ: "a#3@5 ~ f3 ~", AK: "d3@2 ~@2 a#2@2 f2 ~@9",
})).s("gm_trombone").gain(0.66).pan(0)

// other · trumpet
const trumpet = note("<~@57 A B C D E F G@2 H I J K L M@2 N@2 O P Q R>".pickRestart({
  A: "~@2 d5 ~ d#5 ~ e5 ~", B: "f5@2 ~@6 f5@3 g5 f5@2 ~ d5", C: "~@3 a#4@4 ~@2 d5@2 ~ f5@2 ~@2",
  D: "f#5@2 ~ g5 ~@4 g5@3 ~ g5 ~@2 d5, ~@7 f#5@2 ~@2 f#5@2 ~@3", E: "~@3 a#4@5 ~@8", F: "~@3 a5 ~@2 a#5 ~ c6@2 ~@5 a#5",
  G: "[c6@3 a#5@3 ~@2 c6@2 a#5@2 ~@2 g5@17 ~]/2", H: "a5@15 ~", I: "~@4 a#4@2 ~@4 g4@5 ~",
  J: "f4@2 ~@6 d4@2 ~ f4 ~@3 a#4", K: "~@3 a#4 ~@3 g4 a#4@3 g4@4 ~", L: "f4@8 d4@2 ~ f4 ~@3 c#5",
  M: "[~@3 d5 ~@3 c#5 d5@7 ~ d5@3 c#5 ~@3 d5@2 ~@7, ~@15 c#5@2 ~@15]/2",
  N: "[~@4 d5 ~@3 d5@6 ~@2 d5@2 ~ c#5@2 ~@2 d5@2 ~@3 f4@3 ~, ~@15 c#5@2 ~@15]/2", O: "~@3 d5 c#5@2 ~ d5 ~@3 d5 ~@3 c#5",
  P: "d5@2 f5@2 ~@2 d5 ~@3 f4 ~ g4 ~@3", Q: "a#4@15 ~", R: "a#4 ~@2 f4 d4 ~@2 a#3 ~@8",
})).s("gm_trumpet").gain(0.78).pan(0)

// chords · banjo
const banjo = note("<~ A B@2 C D E F G H ~@48 I J K L M N O P Q R S T U V W X@2 Y@2 Z>".pickRestart({
  A: "~@15 c#5",
  B: "[d5@2 ~@2 d5@2 ~@2 d5 ~@3 d5@2 ~@2 d5@2 ~ f5 ~@2 d5 ~@4 g4 f#4@2 f4 ~, ~@7 c#5@2 ~@6 c#5@2 ~@15]/2",
  C: "e4 ~@10 [g4,a#4,c#5] [g4,a#4,d5] ~@3", // Gdim Gm
  D: "[g4,d5]@2 ~ [d#4,g4,d5] ~@2 [d#4,g4,d5] ~@5 f#4@2 f4 ~, d#4 ~@10 g4@2 ~@3", // G5 D#maj7
  E: "e4 ~@3 [g4,d5] ~@3 [g4,d5]@2 ~@2 g4@2 ~@2, ~@12 c#5 ~@3", // G5
  F: "[a4,d5] ~@2 [f4,a4,d5] ~@3 [f4,a4,d5] ~@4 g4 ~@3, f4@2 ~@9 f4@2 ~@3", // D5 Dm
  G: "a#4@2 ~@2 a#4@3 ~ g4 ~ a#4 ~ f#4@3 ~, ~@11 g4@2 ~@3", H: "f4 ~@15", I: "~@4 [c#4,e4] ~@3 [d4,f4] ~@6 [c#4,e4]",
  J: "~@3 [d4,f4] ~@2 [c#4,e4] ~ [d4,f4] ~@7", K: "~@4 [f#4,a4] ~@3 [g4,a#4] ~@6 [f#4,a4]",
  L: "~@3 [g4,a#4] ~@2 a4 f#4 [g4,a#4]@2 ~@2 [g4,a#4] ~@3", M: "[d4,f4]@15 ~", N: "~@11 f#3 g3@2 ~ a#3",
  O: "~@3 f#3 ~ g3 ~@2 g3@2 ~ d#3 ~ c3 ~ a#2, ~@7 a#3@2 ~@7", P: "c3@2 ~@9 [f#3,a3]@4 ~",
  Q: "[g3,a#3] ~@3 [g3,a#3] ~@2 [f#3,a3] [g3,a#3]@2 ~@2 [g3,a#3] ~@3", R: "~@4 a3@2 ~@2 a3 ~@2 [a3,d4,f4] ~@4",
  S: "~@3 [f#3,a3] [g3,a#3]@2 ~@2 [g3,a#3]@2 ~@2 [g3,a#3]@2 ~@2", // F#m Gm
  T: "[d4,f4]@2 ~@2 a3@2 ~ [a3,d4,f4] ~@4 f#3 ~@2 f3, ~@11 g3@2 ~@3", // Dm
  U: "~@3 [e3,g3,a#3] [e3,g3] ~ g3 [e3,a#3,d4] [e3,g3,a#3] ~@3 [e3,g3,a#3,d4] ~@3, ~@3 d4@2 ~@3 d4@2 ~@6", // Edim Em Em7b5 Edim Em7b5
  V: "[f3,d4]@2 ~@5 [d#3,f3,d4] ~@4 f#3 ~@2 f3, d#3 ~@10 g3@2 ~@3", // Dm
  W: "e3 ~@2 [e3,g3,d4] ~@3 f#3 [g3,a#3] ~@3 [e3,g3,a#3,d4] ~@3, ~@7 e3@3 ~@6, ~@4 d4 ~@3", // Em7 Gm Em7b5
  X: "[[d#3,f3,a3,d4] ~@2 [d#3,f3,a3,d4] ~@2 f3 [d#3,a3,d4] ~@4 g3 f#3 f3 e3@4 ~ [g3,c4]@2 ~@2 [e3,g3,c4]@3 a#3 g3 ~@3, ~@20 e3 ~@11]/2", // Dm D C5 C
  Y: "[[d#3,f3,a3,c4]@2 ~@2 [d#3,f3,a3,d4] ~@2 [d#3,f3,a3,d4]@2 ~@2 [d#3,f3,a3,d4] ~@3 [a#2,d3,f3] ~@3 [a#2,d3,f3,a#3] ~@4 [g3,a#3]@2 ~ [c#3,g3,a#3] ~@4, ~@15 a#3@2 ~@7 c#3 ~@7]/2", // F7 Dm A# Gm Gdim
  Z: "[a#2,d3,a#3] ~@3 [a2,c#3,e3,a3] ~@2 [a#2,c#3,e3,a#3] ~@8", // A# A A#dim
})).s("gm_banjo").gain(0.6).pan(0)

// chords · brass section · "brass"
const brass_section = note("<~@58 A B C D E F G H I J K L M N O P Q R S T>".pickRestart({
  A: "~@8 [d6,f6]@2 ~ [d6,f6] ~@4", B: "[d6,f6] ~@6 [d6,f6] ~@8", C: "~@4 [d6,g6,a#6] ~@3 [d6,g6,a#6]@3 ~@5",
  D: "[d6,g6,a#6] ~@6 [d6,g6,a#6] ~@8", E: "~ [g#5,d6]@2 ~", F: "~@3 [g#5,d6]!2 ~@2 [g#5,d6]@3 ~@6",
  G: "~@2 [g5,a#5] ~@4 [g5,a#5] [g5,a#5]@7 ~", H: "~@4 [d5,f#5,a5]@11 ~",
  I: "[d5,g5,a#5] ~@3 [d5,g5,a#5] ~@7 [d5,g5,a#5] ~@3", J: "~@3 [a4,d5,f5] ~@3 [a4,d5,f5]!2 ~@7",
  K: "[d5,g5,a#5] ~@3 [d5,g5,a#5]@7 ~ [d5,g5,a#5] ~@3", L: "[a4,d5,f5]@5 ~@2 [a4,d5,f5] ~@3 [a4,d5,f5] ~@4",
  M: "~@4 g4 f#4 ~@2 g4@7 ~, ~@2 [e4,c5]@5 ~", N: "[a4,c5,d#5]@9 ~@7", O: "[e4,c5]@7 ~ [e4,g4,c5]@6 ~@2",
  P: "[a4,c5]@9 ~@7", Q: "[e4,g4,c5]@13 ~@3", R: "[a4,c5,d#5]@13 ~@3",
  S: "~@3 [a#4,d5,f5,a#5]@4 ~@2 [d#5,a#5]@2 [d#5,g5,a#5]@2 ~@3, ~@8 g5@2 ~ c#5 ~@4", // A# D#5 D#
  T: "[a#4,d5] ~@6 [a#4,d5,f5,a#5] ~@4 [a#4,d5,a#5] c#5 ~@2, a#5 ~@7", // A#
})).s("gm_brass_section").gain(0.71).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@5 ~ A@12 ~@2 A@3 ~@4 A B C A ~ A@5 ~ A@4 ~ A@3 ~ A ~ A@9 ~ A C A@3 ~ A@7 ~ A D E
>`.pickRestart({
  A: "x!2 ~ x", B: "~@3 x!2 ~@11", C: "x ~@6 x ~@8", D: "~@3 x!2 ~@3 x ~@2 x ~@3 x", E: "x ~@2 x!2 ~@2 x ~@3 x!2 ~@3",
})).gain(0.51)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@76>").gain(0.51)

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

// drums · low tom
const low_tom = s("lt").struct("<~@76 [~@15 x] [x ~@6 x ~@4 x ~@3]>").gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~@2 [x!4]!75 [x ~@3 x ~@2 x ~@4 x ~@3]>").gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct("<~@60 [~@11 x ~@4] ~@13 [~@11 x ~@4] ~ [~@13 x ~@2] [~@4 x!2 ~@5 x ~@4]>").gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@60 [~@7 x!2 ~@7] ~@13 [~@7 x!2 ~@7] ~ [~@11 x!2 ~@3] [~ x ~ x ~@5 x ~@6]>")
  .gain(0.51)

// drums · crash
const crash = s("cr").struct("<~@31 [~@7 x ~@8] ~@30 [~@7 x ~@8] ~@14 [x ~@6 x ~@8]>").gain(0.51)

// drums · ride
const ride = s("rd").struct(`<
  ~@2
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!28
// … 10 more lines

More by Louis Armstrong