Strudelify

Such Sweet Thunder

Ellington

KeyG majorTempo99 bpm
0:00/0:00
// Such Sweet Thunder — Ellington
// 99 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 77 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(99/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 · "Jazz Bass"
const bass = note(`<
  A B A C D E A F G H A B A B A C D E A F G H A B I J K L M N O P Q R S T U V W X Y Z U V AA AB AC AD AE AF AG AH AI AJ
  AK AL AM AN AO AP AQ AR AS AT A B A C D E A F G H A AU ~
>`.pickRestart({
  A: "g1@3 ~@7 d2@2 g2@3 ~@3 d2@3 ~@3", B: "g1@3 ~@7 d2@2 g#2@4 g#1@8", C: "g1@3 ~@7 g#2@2 g2@4 f2@8",
  D: "d#2@3 ~@7 f2@2 d#2@3 ~@3 d2@3 ~@3", E: "c2@3 ~@7 d2@2 c2@4 g#1@8", F: "g1@3 ~@7 d2@2 g2@4 d2@8",
  G: "d#2@3 ~@7 g#1@2 d2@3 ~@3 g#1@3 ~@3", H: "d#2@3 ~@7 a1@2 d2@4 g#1@8", I: "g2@5 ~ b1@5 ~ c2@6 c#2@5 ~",
  J: "d2@5 ~ e2@5 ~ f#2@6 a2@5 ~", K: "g2@5 ~ a2@4 a2@2 b2@6 c3@5 ~", L: "c#3@5 ~ d3@5 ~ d2@5 ~ g2@4 b2@2",
  M: "c3@4 c3@2 a#2@5 ~ g2@6 e2@2 g2@2 e2@2", N: "c2@5 ~ e2@5 ~ a#2@6 f#2@5 ~", O: "g2@4 b1@2 e2@5 ~ d2@6 c2@5 ~",
  P: "b1@5 ~ d2@5 ~ b1@6 g#2@5 ~", Q: "a2@5 ~ e2@5 ~ c2@6 b1@5 ~", R: "a1@5 ~ c2@5 ~ d2@6 f#2@5 ~",
  S: "g2@4 d2@2 a2@5 ~ b2@6 c3@5 ~", T: "g2@4 d2@2 e2@5 ~ d2@4 a#1@2 b1@5 ~", U: "g3@4 g1 ~ b2@5 ~ c3@4 g1 ~ c#3@6",
  V: "d3@4 g1 ~ e3@5 ~ f#3@4 g1 ~ g3@3 ~ g1 ~", W: "g2@3 ~ g3 ~ f3@4 g1 ~ e3@6 d#3@4 g1 ~",
  X: "d3@6 ~@4 g1 ~ b2@6 g2@4 g1 ~, ~ c3 ~@2", Y: "c2@4 c1 ~ g2@4 c1 ~ e2@6 d2@4 c1 ~",
  Z: "c2@5 ~ g1@6 a1@3 ~ c1 ~ g#2@4 c1@2", AA: "a1@5 ~ b1@5 ~ c2@4 a0 ~ c2@4 a0 ~",
  AB: "~@4 d1 ~ e2@6 f#2@4 d1 ~ a2@6, d2 ~@3", AC: "~@4 g1 ~ a2@6 b2@6 g#2@6, g2 ~@3", AD: "g2 a2 g#2 d#3",
  AE: "g2 f2 d#2 f2", AF: "d2@5 ~ f2@6 d#2@4 f2@2 g2@5 ~", AG: "a2@5 ~@7 d2@5 ~ d2@4 g2@2",
  AH: "~@2 a#1 b1 d2 e2 g2@3 b1@2 g2", AI: "e2 ~@4 e2 a2 ~@2 a2 ~@2", AJ: "d2 ~@2 d2@2 g2@3 a#2@2 a2 c2",
  AK: "a#2 ~@4 a#2 a2 ~@2 a2 ~@2", AL: "d2 ~@2 d2@2 g2@3 a#1 b1 e2 g2", AM: "c3 ~@4 c3 b2 ~@2 b2 ~@2",
  AN: "a#2 ~@2 a#2@2 a2@3 a#2@2 e2 g2", AO: "d2 ~@4 d2 c2 ~@2 c2 ~@2", AP: "b1 ~@2 b1@2 a#1@3 e2@2 g2 a#2",
  AQ: "a2 ~@4 a2 e2 ~@2 e2 ~@2", AR: "a2 ~@2 a2@2 d2@3 a#2@2 a2 d2", AS: "g2 ~@4 c3 f3 ~@2 d3 ~@2",
  AT: "c#3@4 d#3@8 d3@3 ~@9", AU: "g1 ~@7",
})).s("gm_acoustic_bass").gain(0.33).pan(0.4)

// chords · piano
const piano = note("<~@11 A B ~ A C ~ D A E B ~@2 F B ~@30 G ~ G ~ G ~ G H I B ~ A C ~ D A E B ~@2 J@2>".pickRestart({
  A: "~@2 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~", // G5
  B: "[d5,g5] ~@7", C: "[d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5]@3 ~@9",
  D: "~@2 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5]@3 ~@9", // G5
  E: "[d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~", // G5
  F: "~@10 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~ [d5,g5] ~", G: "~@9 f#5 g5@6 [g3,g4]@8",
  H: "~@11 f#5 g5@6 ~@6", I: "~@11 f#5 g5@4 [g3,g4]@8", J: "[~ [d5,d6]@3]/2",
})).s("gm_piano").gain(0.33).pan(0.6)

// other · alto sax
const alto_sax = note(`<
  ~@23 A B C D E F G H I J K L M@5 ~ N ~@2 O@2 ~@2 P Q R ~ S T S U V W X Y Z AA AB AC ~@13
>`.pickRestart({
  A: "~@11 a#4", B: "~@2 b4@9 a#4", C: "~@2 b4@9 g4", D: "~@2 f#4@9 d#4", E: "~ e4@5", F: "e4 ~@11",
  G: "~ c4 c#4 d4 d#4 e4", H: "e4@3 ~ a#4 b4", I: "a4@5 f4 e4@2 d#4@3 d4", J: "~@9 d5 b4 d5", K: "b4@11 a#4",
  L: "~ b4 a#4 b4 g4 f#4 d#4 d4", M: "[~@6 a#4@5 a4@15 ~@4 a#3@5 b3@15 ~@4 b3@5 a#3]/5", N: "~@6 a#3@5 b3",
  O: "~@4 g3@2 ~@6 g3@3 ~@9", P: "~@4 b3@3 ~@3 d4@2 f4@3 ~@3 d4@3 ~@3", Q: "b3@3 ~@3 d#4@4 d4@12 ~@2",
  R: "g4@5 ~ e4@5 d#4", S: "d4@3 ~@7 d4@2 c#4@3 ~@3 c#4@3 ~@3", T: "c4@3 ~@3 c4@4 d4@8 ~@6",
  U: "c4@3 ~@3 c4@4 b3@8 ~@6", V: "d4@3 ~@7 d4@2 d4@3 ~@3 d4@3 ~@3", W: "d4@3 ~@3 d4@4 c4@8 ~@6",
  X: "b3@3 ~@7 b3@2 b3@3 ~@3 b3@3 ~@3", Y: "c4@3 ~@3 d4@4 c#4@8 ~@6", Z: "c4@3 ~@7 c4@2 d4@3 ~@3 d4@3 ~@3",
  AA: "c#4@3 ~@3 c#4@4 c4@8 ~@6", AB: "b3@3 ~@7 e4@2 b4@3 ~@3 f#4@3 ~@3", AC: "b3@4 f#4@8 e4@3 ~@9",
})).s("gm_alto_sax").gain(0.48).pan(0.4)

// other · tenor sax
const tenor_sax = note(`<
  A B A C D E A F G H A B A B A C D E A F G H A I J K L M N O P Q R S T U@5 ~ V ~@2 W@2 A B X Y Z ~ AA AB AA AC AD AE AF
  AG AH AI AJ AK A B A C D E A F G H A AL ~
>`.pickRestart({
  A: "g3@3 ~@7 d4@2 g4@3 ~@3 d4@3 ~@3", B: "g3@3 ~@7 d4@2 g#4@4 g#3@8", C: "g3@3 ~@7 g#4@2 g4@4 f4@8",
  D: "d#4@3 ~@7 f4@2 d#4@3 ~@3 d4@3 ~@3", E: "c4@3 ~@7 d4@2 c4@4 g#3@8", F: "g3@3 ~@7 d4@2 g4@4 d4@8",
  G: "d#4@3 ~@7 g#3@2 d4@3 ~@3 g#3@3 ~@3", H: "d#4@3 ~@7 a3@2 d4@4 g#3@8", I: "g3@3 ~@19 a4@2", J: "~@2 g4@9 g4",
  K: "~@2 f#4@9 e4", L: "~@2 d#4@9 c4", M: "~ a#3@5", N: "c4 ~@11", O: "~ f#3 g3 g#3 a3 a#3", P: "b3@3 ~ g4 f#4",
  Q: "f#4@5 d#4 d4@2 c#4@3 c4", R: "~@9 a4 g#4 g4", S: "f#4@11 a4", T: "~ g4!2 f#4 e4 d#4 c4 b3",
  U: "[~@6 f#4@5 f4@15 ~@4 a3@5 a3@15 ~@4 f3@5 e3]/5", V: "~@6 a3@5 a3", W: "~@4 e3@2 ~@6 e3@3 ~@9",
  X: "~@4 a3@3 ~@3 c4@2 c#4@3 ~@3 c4@3 ~@3", Y: "a3@3 ~@3 c4@4 b3@12 ~@2", Z: "e4@5 ~ c4@5 d4",
  AA: "c4@3 ~@7 c4@2 b3@3 ~@3 b3@3 ~@3", AB: "a#3@3 ~@3 a#3@4 b3@8 ~@6", AC: "a#3@3 ~@3 a#3@4 a3@8 ~@6",
  AD: "a#3@3 ~@7 a#3@2 a3@3 ~@3 a3@3 ~@3", AE: "c4@3 ~@3 c4@4 a3@8 ~@6", AF: "a3@3 ~@7 a3@2 a3@3 ~@3 a3@3 ~@3",
  AG: "a3@3 ~@3 a3@4 g#3@8 ~@6", AH: "g3@3 ~@7 g3@2 c4@3 ~@3 c4@3 ~@3", AI: "b3@3 ~@3 b3@4 a#3@8 ~@6",
  AJ: "a3@3 ~@7 b3@2 f#4@3 ~@3 c4@3 ~@3", AK: "a3@4 c4@8 b3@3 ~@9", AL: "g3 ~@7",
})).s("gm_tenor_sax").gain(0.48).pan(0.4)

// other · tenor sax
const tenor_sax_2 = note(`<
  ~@23 A B C D E F G H I J K L M@5 ~ N ~@2 O@2 ~@2 P Q R ~ S T S U V W X U Y Z AA AB ~@13
>`.pickRestart({
  A: "~@11 d4", B: "~@2 e4@9 b3", C: "~@2 c4@9 a#3", D: "~@2 a3@9 f#3", E: "~ f3@5", F: "a3 ~@11",
  G: "~ d#3 e3 f3 f#3 g3", H: "a3@3 ~ c#4 c4", I: "d4@5 g3 f#3@2 f3@3 e3", J: "~@9 d#4 d4 c#4", K: "c4@11 d4",
  L: "~ e4 c#4 c4 a#3 a3 f#3 e3", M: "[~@6 c4@5 b3@15 ~@4 c#3@5 d3@15 ~@4 d#3@5 d3]/5", N: "~@6 c#3@5 d3",
  O: "~@4 a2@2 ~@6 a2@3 ~@9", P: "~@4 g3@3 ~@3 a3@2 g3@3 ~@3 a3@3 ~@3", Q: "g3@3 ~@3 a3@4 g#3@12 ~@2",
  R: "c#4@5 ~ a3@5 b3", S: "g#3@3 ~@7 g#3@2 g3@3 ~@3 g3@3 ~@3", T: "f#3@3 ~@3 f#3@4 a3@8 ~@6",
  U: "f#3@3 ~@3 f#3@4 f3@8 ~@6", V: "g3@3 ~@7 g3@2 f3@3 ~@3 f3@3 ~@3", W: "g3@3 ~@3 g3@4 d#3@8 ~@6",
  X: "g3@3 ~@7 g3@2 f#3@3 ~@3 f#3@3 ~@3", Y: "d3@3 ~@7 d3@2 g#3@3 ~@3 g#3@3 ~@3", Z: "g3@3 ~@3 g3@4 f#3@8 ~@6",
  AA: "d3@3 ~@7 g3@2 d#4@3 ~@3 g#3@3 ~@3", AB: "g3@4 a3@8 f#3@3 ~@9",
})).s("gm_tenor_sax").gain(0.48).pan(0.4)

// other · baritone sax · "Bari Sax"
const baritone_sax = note(`<
  A B A C D E A F G H A B A B A C D E A F G H A I J K L M N O P Q R S T U@5 ~ V ~@2 W@2 X Y Z AA AB ~ AC AD AE AD AF AG
  AH AI AJ AK AL AM A B A C D E A F G H A AN ~
>`.pickRestart({
  A: "g3@3 ~@7 d4@2 g4@3 ~@3 d4@3 ~@3", B: "g3@3 ~@7 d4@2 g#4@4 g#3@8", C: "g3@3 ~@7 g#4@2 g4@4 f4@8",
  D: "d#4@3 ~@7 f4@2 d#4@3 ~@3 d4@3 ~@3", E: "c4@3 ~@7 d4@2 c4@4 g#3@8", F: "g3@3 ~@7 d4@2 g4@4 d4@8",
  G: "d#4@3 ~@7 g#3@2 d4@3 ~@3 g#3@3 ~@3", H: "d#4@3 ~@7 a3@2 d4@4 g#3@8", I: "g3@3 ~@19 f4@2", J: "~@2 d4@9 e4",
  K: "~@2 d#4@9 c#4", L: "~@2 c4@9 a3", M: "~ b3@5", N: "g3 ~@11", O: "~ a2 a#2 b2 c3 c#3", P: "d3@3 ~ e4 d#4",
  Q: "b3@5 c3 b2@2 a#2@3 a2", R: "~@9 f#4 f4 e4", S: "d#4@11 f4", T: "~ d4 e4 d#4 c#4 c4 a3 g3",
  U: "[~@6 d#4@5 d4@15 ~@4 g2@5 g2@15 ~@4 g2@5 g2]/5", V: "~@6 g2@5 g2", W: "~@4 d2@2 ~@6 d2@3 ~@9",
  X: "g2@3 ~@7 d3@2 g3@3 ~@3 d3@3 ~@3", Y: "g2@3 ~@7 d3@2 g#3@4 g#2@8", Z: "~@4 f2@3 ~@3 e2@2 d#2@3 ~@3 d#2@3 ~@3",
  AA: "d2@3 ~@3 f2@4 e2@12 ~@2", AB: "a2@5 ~ d3@5 g2", AC: "e2@3 ~@7 e2@2 a2@3 ~@3 a2@3 ~@3",
  AD: "d2@3 ~@3 d2@4 g2@8 ~@6", AE: "a#2@3 ~@7 a#2@2 a2@3 ~@3 a2@3 ~@3", AF: "c3@3 ~@7 c3@2 b2@3 ~@3 b2@3 ~@3",
  AG: "a#2@3 ~@3 a#2@4 a2@8 ~@6", AH: "d3@3 ~@7 d3@2 c3@3 ~@3 c3@3 ~@3", AI: "b2@3 ~@3 b2@4 a#2@8 ~@6",
  AJ: "a2@3 ~@7 a2@2 e2@3 ~@3 e2@3 ~@3", AK: "a2@3 ~@3 a2@4 d2@8 ~@6", AL: "g2@3 ~@7 c3@2 a3@3 ~@3 d3@3 ~@3",
  AM: "c#3@4 d#3@8 d3@3 ~@9", AN: "g3 ~@7",
})).s("gm_baritone_sax").gain(0.48).pan(0.4)

// other · trumpet · "Trumpet 1"
const trumpet = note("<~@48 [~@4 b5@3 ~@3 c6@2 c#6@3 ~@3 c6@3 ~@3] [b5@3 ~@3 c6@4 e6@12 ~@2] [d6@5 ~ d6@5 d6] ~@26>")
  .s("gm_trumpet").gain(0.64).pan(0.6)

// other · muted trumpet · "Trumpet 2"
const muted_trumpet = note("<~@12 A@2 B C D E F@2 G H I B ~@40 A@2 B C D E F@2 G H I B ~>".pickRestart({
  A: "[a#4@4 a#4@28 ~ c5 c#5@2 d5@12]/2", B: "b4 ~@7", C: "~@2 b4", D: "c5@4 c#5@19 ~", E: "d5@3 ~@9 d5@4 c5@8",
  F: "[a#4@3 ~@19 g4@18 b4@4 b4@4]/2", G: "c5@2 c5@7 ~@3", H: "c5 c5@3 c5@2", I: "a#4@8 ~ c5 c#5@2 d5@12",
})).s("gm_muted_trumpet").gain(0.56).pan(0.6)

// other · trumpet · "Trumpet 2"
const trumpet_2 = note(`<
  ~@48
  [~@4 g5@3 ~@3 a5@2 a#5@3 ~@3 g5@3 ~@3]
  [g5@3 ~@3 f5@4 g#5@12 ~@2]
  [a#5@5 ~ g5@5 a5]
  ~@26
>`).s("gm_trumpet").gain(0.56).pan(0.6)

// other · trumpet · "Trumpet 3"
const trumpet_3 = note(`<
  ~@48
  [~@4 d5@3 ~@3 e5@2 d#5@3 ~@3 d#5@3 ~@3]
  [d5@3 ~@3 d#5@4 e5@12 ~@2]
  [g5@5 ~ e5@5 e5]
  ~@26
>`).s("gm_trumpet").gain(0.56).pan(0.6)

// other · muted trumpet · "Trumpet 4"
const muted_trumpet_2 = note("<~@12 A@2 B C D E F@2 G H I B ~@40 A@2 B C D E F@2 G H I B ~>".pickRestart({
  A: "[d5@4 d5@28 ~ d#5 e5@2 f5@12]/2", B: "d5 ~@7", C: "~@2 d5", D: "g5@4 g5@19 ~", E: "f#5@3 ~@9 f#5@4 d#5@8",
  F: "[d5@3 ~@19 b4@18 d5@4 d5@4]/2", G: "f#5@2 f#5@7 ~@3", H: "f5 f5@3 d#5@2", I: "d5@8 ~ d#5 e5@2 f5@12",
})).s("gm_muted_trumpet").gain(0.56).pan(0.6)

// other · trumpet · "Trumpet 4"
const trumpet_4 = note("<~@36 A B C D E F G@2 H I J K L M N ~@26>".pickRestart({
  A: "~@6 d5@2 d5 d5@2 d5", B: "d5 g4 a#4@7 ~@3", C: "~@4 e4@2 g4@3 ~ e5@2 d5@3 ~ c5@2 b4 c5 ~ c#5 ~@2",
  D: "d5@3 ~ b4@2 c5 d5 c5 b4 a4 ~ f4 ~@5 e4@2 d4@4", E: "~@4 e4 g4 a4 a#4 b4 c#5 d5 c#5",
  F: "d5@3 [c5,c#5] [a#4,b4] [g#4,a4] g4@4 a#4@14", // C#maj7 Bmaj7 Amaj7
  G: "[~@4 e5@2 d5@2 g4@2 c5@2 b4@2 ~@2 a4@2 g4@2 ~@2 b3@8 ~@4 d4@2 f4@2 g#4@2 b4@2 d5@3 ~ e5@2]/2",
  H: "f5@2 ~@2 e5@3 ~@2 d5 c#5 ~ c5@4 e4@8", I: "~@4 c4@2 e4@2 g4@2 b4@2 d5@2 e5 d5 c5@2 b4@6",
  J: "~@8 e4@2 g4@2 b4@2 d5@2 b4@2 g4@2 e4@3 ~", K: "~@3 g4@3 b4 e5@3 ~@2 d5 b4 ~ g4 e4 ~ a4 g4 ~ e4 d4 ~",
  L: "~@2 a#4@2 ~ a4 g4@2 ~ a4@2 ~", M: "a#4@2 ~ a4@2 a#4@6 ~", N: "c5@5 ~ c5@5 b4",
})).s("gm_trumpet").gain(0.64).pan(0.6)

// other · trombone
const trombone = note(`<
  A B A C D E A F G H A B A B A C D E A F G H A B ~@22 A I J K L ~@13 A B A C D E A F G H A M ~
>`.pickRestart({
  A: "g2@3 ~@7 d3@2 g3@3 ~@3 d3@3 ~@3", B: "g2@3 ~@7 d3@2 g#3@4 g#2@8", C: "g2@3 ~@7 g#3@2 g3@4 f3@8",
  D: "d#3@3 ~@7 f3@2 d#3@3 ~@3 d3@3 ~@3", E: "c3@3 ~@7 d3@2 c3@4 g#2@8", F: "g2@3 ~@7 d3@2 g3@4 d3@8",
  G: "d#3@3 ~@7 g#2@2 d3@3 ~@3 g#2@3 ~@3", H: "d#3@3 ~@7 a2@2 d3@4 g#2@8", I: "g2@3 ~@7 d3@2 a3@4 g#2@8",
  J: "~@4 d4@3 ~@3 e4@2 f4@3 ~@3 e4@3 ~@3", K: "f4@3 ~@3 a4@4 g#4@12 ~@2", L: "g4@5 ~ f#4@5 f4", M: "g2 ~@7",
})).s("gm_trombone").gain(0.48).pan(0.6)

// other · muted trumpet · "Trombone"
const muted_trumpet_3 = note("<~@12 A@2 B C D E F@2 G H I B ~@40 A@2 B C D E F@2 G H I B ~>".pickRestart({
  A: "[g4@4 g4@28 ~ g#4 a4@2 a#4@12]/2", B: "g4 ~@7", C: "~@2 g4", D: "a4@4 a4@19 ~", E: "a4@3 ~@9 a4@4 f#4@8",
  F: "[g4@3 ~@19 e4@18 g4@4 g4@4]/2", G: "a#4@2 a#4@7 ~@3", H: "a4 a4@3 f#4@2", I: "g4@8 ~ g#4 a4@2 a#4@12",
})).s("gm_muted_trumpet").gain(0.56).pan(0.7)

// other · trombone
const trombone_2 = note(`<
  ~@48
  [~@4 f3@3 ~@3 e3@2 a#3@3 ~@3 c4@3 ~@3]
  [b3@3 ~@3 b3@4 d4@12 ~@2]
  [c#4@5 ~ a#3@5 a3]
  ~@26
>`).s("gm_trombone").gain(0.56).pan(0.7)

// other · trombone
const trombone_3 = note("<~@48 A B C ~ D E D F G H I J K L ~@15>".pickRestart({
  A: "~@4 a#3@3 ~@3 a3@2 g#3@3 ~@3 a3@3 ~@3", B: "g3@3 ~@3 a3@4 g#3@12 ~@2", C: "c4@5 ~ c4@5 b3", D: "f3 f#3",
  E: "f3@2 e3 d3", F: "f3 g3 a#3 g3", G: "a3 g3", H: "a3 ~ b3 g3", I: "g3@3 f3 e3 d3", J: "d4@3 ~", K: "b3@2 a#3 e3",
  L: "a#3@2 a3@2 g3@8 ~ f3@10 ~, ~@6 g3 ~@5",
})).s("gm_trombone").gain(0.56).pan(0.7)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!24 ~@12 [~ x ~ x]!15 [~@3 x] ~@12 [~ x ~ x]!11 ~@2>").gain(0.31)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A@4 B C ~ A ~ A ~ A ~@2 A ~ D A ~@3 A ~@3 A ~@2 D E ~@3 A@3 ~ A ~@2 A@2 F G H A ~ A@2 ~@7 D C ~ A ~ A ~ A ~@2 A ~
// … 45 more lines

More by Ellington