Strudelify

Stormy Weather

Ellington

KeyE majorTempo78 bpm
0:00/0:00
// Stormy Weather — Ellington
// 78 bpm, 4/4, key E major. 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 46 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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
const piano = note(`<
  ~ A B C D E F G H I J K L@3 M N O P Q R S T U V W X Y Z AA AB AC AD AE@2 AF AG@4 AH AI@3 ~@2
>`.pickRestart({
  A: "g5 g#5@6 ~ [c#5,e5,g#5]@3 ~ [c#5,e5,g#5]@7 ~ [c#5,e5,g#5]@4 [a4,b4,e5]@11 ~ [a4,b4,c#5,e5]@4 ~@4 b4@4", // C#m Asus2 A
  B: "[f#4,a#4,c#5] ~@2 c#5 d5 [f#4,a4,b4,d#5]@5 ~@2, ~@12 [f#4,a4]@7 ~@29", // F# B7 F#m
  C: "~@8 [c#4,g#4,e5]@3 ~ [c#4,g#4,e5]@8 [c#4,g#4,c#5]@4 [b3,e4,a4,e5]@12 [b3,e4,a4,c#5]@4 ~@8", // C#m C#5 Esus4 A
  D: "[a#3,f#4,a#4,e5]@3 ~@3 [c#4,f#4,a4,c#5]@4 [g3,b3,g4]@3 ~ [c#5,e5,g5,b5] ~ [c#5,e5,g5,b5] ~ [c#5,e5,g5,b5]@4 ~@2", // F#7 F#m G C#m7b5
  E: "[b3,e4,g#4]@22 ~@2 [b3,c#4,e4]@7 ~ [e3,g#3,b3,c#4]@12 ~@4", // E C#m7
  F: "[e3,f#3,g3,a3,c#4]@11 ~ [e3,g3,b3,d4]@4 [e3,f#3,b3,d4]@6 ~@2", G: "[e3,g3,b3,d4]@9 ~ [c#3,e3,g3,b3]@12 ~@2",
  H: "[e3,f#3]@18 ~@2 [b2,d#3,f#3,a3]@20 g#5@7 ~", // Esus2 B7
  I: "b5@12 [b3,e4,g#4]@7 ~ [b3,d4,f4]@11 ~ [g#3,b3,d4]@3 ~ [b3,d4,f4]@3 ~ g#5@4 e5@4", // E Bdim G#dim Bdim
  J: "b5@18 ~@2 [c#5,e5,g#5,b5]@3 ~ [c#5,d#5,f#5,a5]@18 ~@6", // C#m7 D#m7b5
  K: "~@5 b5 c#6 d#6 e6 f6 f#6 g6 g#6@2 e6 ~ d6@2 c#6@2 b5 ~ g#5@2",
  L: "[f#5@12 [e4,f#4,a4,c#5]@8 [f#5,a5,b5,d#6]@12 d#5@4 d#6@8 [e2,e3,e5,g#5,b5]@20 ~@4 b4 a#4@2 ~ g#4@8 [b4,c#5,e5,g#5]@4 [g#4,b4,d5,f5]@8 ~@4 [a4,e5,f#5]@8 e4@4 [c#5,e5,f#5,b5]@8 [a4,c#5,d#5,f#5]@20 ~@4 [b3,d#4,g4]@4, ~@71 a4@2 ~@19 c#5@12 ~@40]/3", // F#m7 B7 E C#m7 G#dim F#m7 C#m7 D#m7b5 …
  M: "[b3,e4,g#4]@8 [g#3,b3,e4]@14 ~@2 [c#4,e4,f#4,a4]@3 ~@5 c#3@2 ~@2 [c#4,e4,f#4,a4]@3 ~@5 c#3@2 ~@2", // E F#m7
  N: "[c#4,d#4,f#4,a4]@3 ~@9 [a3,d4,g4]@8 [a3,b3,d#4,f#4]@12 b3@4 a3@8 b3@4", // D#m7b5 Dsus4 B7
  O: "g#3@4 c#5@4 e5@2 ~@2 f#5@4 g#5@2 ~@2 a5@4 b5@8 ~ g5@2 ~ c#5@12, ~@32 a#5@3 e5@2 ~@11",
  P: "~@8 e4@4 f#4@4 a4@4 c#5@4 g4@4 e4@2 ~@2 f#4@4 d#4@4 f#4@4 g#4@3 ~",
  Q: "[b3,e4,g#4]@11 ~@7 [b3,e4,g#4]@6, ~@2 g#3", R: "~@4 [a3,c#4,e4,f#4]@6 ~@2 [a3,b3,d#4,f#4]@11 ~, ~@10 c#4@13 ~",
  S: "[b3,e4,g#4]@8 ~@2 [b3,d4,f4,g#4] ~@5 [b3,d4,f4,g#4]@8", // E Bdim
  T: "~@12 [a4,c#5,e5,f#5]@8 [c5,d#5,f#5,a5]@12 [f#4,a4,b4,d#5]@3 ~ [d#4,f#4,a4,c5]@12", // F#m7 Cdim B7 D#dim
  U: "[e4,g#4,b4,c#5]@9 ~ [c#4,e4,g#4,b4]@2 ~@4 [b3,c#4,e4,g#4]@7 ~", // C#m7
  V: "[c#4,e4,a4]@6 ~@2 [b3,d4,e4,g#4]@2 ~@2 [b3,d4,e4,g#4]@3 ~@5 [b3,c#4,f4,g#4]@14 ~@2 [f4,g#4,b4,c#5]@10 ~@2", // A E7 C#7
  W: "[a2,c#3,e3,f#3]@6 ~@2 [a2,c#3,e3,f#3]@3 ~ [e3,f#3,a3,c#4]@8 [f#3,a3,c#4,d#4]@24 ~@4", // F#m7 D#m7b5
  X: "~@4 [g3,a3,b3,d4,e4]@3 ~ [g3,a3,b3,d4,e4]@3 ~ [g3,a3,b3,d4,e4]@3 ~ [g3,a3,b3,d4,e4]@3 ~ [g3,a3,b3,d4,e4]@3 ~", // Em7
  Y: "[a1,a2,g3,a3,c#4,e4] ~@5 [a1,a2,g3,a3,c#4,e4] ~@5 [a1,a2,g3,a3,c#4,e4] ~@11", // A7
  Z: "[e1,e2,g#3,b3,d4,e4] ~@10 [e1,e2,g#3,b3,d4,e4] ~@11 [e1,e2,g#3,b3,d4,e4] ~@21 [a1,a2,g3,a3,c#4,e4] ~@2", // E7 A7
  AA: "~@8 [a1,a2,g3,a3,c#4,e4] ~@11 [a1,a2,g3,a3,c#4,e4] ~@21 [e1,e2,g#3,b3,d4,e4] ~@5", // A7 E7
  AB: "~@5 [e1,e2,g#3,b3,d4,e4] ~@11 [e1,e2,g#3,b3,d4,e4] ~@3 g#5 ~@2 b4@2 ~ d#4 e4@4 d4@2 ~@2 b3@2 ~ [a1,a2,g3,a3,c#4,e4] ~@8, ~@11 e5 ~@12, ~@23 d5@2 ~@23", // E7 A7
  AC: "~@3 [a1,a2,g3,a3,c#4,e4] ~@10 [a1,a2,g3,a3,c#4,e4] ~@21 [e1,e2,g#3,b3,d4,e4] ~@11", // A7 E7
  AD: "[e1,e2,g#3,b3,d4,e4] ~@10 [e1,e2,g#3,b3,d4,e4] ~@7 e3@3 [b3,d4,e4,g#4]@8 e3@4 [b3,c#4,f4,g4]@14", // E7 C#7
  AE: "[~@4 [a#3,c#4,e4,f#4]@23 ~@11 [c#4,d#4,f#4,a4]@6 ~@2 [c#4,d#4,f#4,a4]@6 ~ [a3,b3,d#4,f#4]@3 ~@21 [b3,e4,g#4]@19]/2", // F#7 D#m7b5 B7 E
  AF: "~@5 [b3,d4,f4,g#4]@18 ~@2 [b3,d4,f4,g#4]@4 [c#4,e4,f#4,a4]@18 ~", // Bdim F#m7
  AG: "[~ [a3,c#4,d#4,f#4]@26 ~@10 [b3,c#4,e4,g#4]@6 ~@2 [b3,c#4,e4,g#4]@6 ~@2 [b3,c#4,f4,g#4]@22 ~@2 [c#4,e4,f#4,a4]@30 ~@2 [c#4,d#4,f#4,a4]@10 ~@2 [b3,d4,e4,g#4]@30 ~@10 [b3,c#4,f4,a4]@3 ~@9 [c#4,e4,f#4,a4]@18 ~]/4", // D#m7b5 C#m7 C#7 F#m7 D#m7b5 E7 C#aug F#m7
  AH: "~ [c4,d#4,f#4,a4]@24 ~@4 [b3,e4,g#4]@16 ~@3", // Cdim E
  AI: "[~ [g#3,b3,c#4,f4]@27 ~@3 e4@21 ~@3 d#5@24 ~@3 e5@37 ~@25, ~@28 f#3@23 ~@3 c5@25 ~ b4@38 ~@26, ~@29 a3@23 ~ a4@25 ~ g#4@39 ~@26, ~@30 c#4@22 f#4@26 ~@3 d#5@38 ~@25]/3", // C#7
})).s("gm_piano").gain(0.35)

// bass · acoustic bass
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P I Q R S T U V W X Y Z AA AB AC AD AE@4 AF@2 AG AH AI AJ@2 AK@2 ~
>`.pickRestart({
  A: "e2@23 ~ c#2@18 ~@2 c#2@2 ~@2", B: "f#2@19 ~ b1@18 ~@2 g2@4 f#2@4", C: "e2@9 ~ e2@2 c#2@6 c#3@5 ~",
  D: "f#2@2 c#2 f#1@2 b1@3 f#2 b2 b1@2", E: "e2@8 ~@2 e2@2 c#2@9 ~ c#2@2", F: "f#2@9 ~ f#2@2 b2@5 ~ b2@6",
  G: "e2@9 ~ c#2@8 e2@4 c#2@2", H: "f#2@9 ~ b1@8 b2 ~ f#2 ~ c#2 ~", I: "e2@9 ~ e2@2 f2@9 ~ f2@2",
  J: "f#2@7 ~ c#3@2 c3@2 b2@4 f#2@2 b1@4 d#2@2", K: "e2@4 b2 c3 c#3@3 c#2@3", L: "f#2 a2 b2 d#3",
  M: "e3@6 b2@4 e2@2 f2@11 ~", N: "f#2@4 c#3 c3 b2@3 b1@3", O: "e2@9 ~ e2@2 c#2@3 ~@3 c#3@3 ~@3",
  P: "f#2@5 ~ a2@4 b1@11 ~ d#2@2", Q: "f#2@7 ~ a2@2 a#2@2 b2@6 b1@6", R: "e2@4 b2 g#2 c#2@3 c#3@3",
  S: "f#2@4 c#3 c3 b2@2 b1@3 d#2", T: "e2@6 b2@4 e2@2 f2@9 ~ f2@2", U: "f#2@12 a2@8 b2@4 b1@10 ~ a#2 b2@12",
  V: "e2@17 ~@3 b1@4 e2@8 b2@4 b1@10 ~@2", W: "e2@7 ~ e2@3 ~ e2@3 ~@5 c#2@16 c#3@8 c#1@4", X: "f#1@3 a1@2 a#1 b1@6",
  Y: "~ e2 d2 b1 a1 g1", Z: "a1 ~@2 a1 ~@2 a1 ~@5", AA: "e1@4 ~@7 e1@4 ~@8 e1@4 ~@18 a1@3",
  AB: "~@4 a1@2 ~@4 a1@2 ~@9 e1@2 ~", AC: "~@5 e1@4 ~@8 e1@4 ~@18 a1@4 ~@5", AD: "~@3 a1@4 ~@7 a1@4 ~@18 e1@4 ~@8",
  AE: "[e1@4 ~@7 e1@4 ~@7 g#2@8 e2@4 c#2@11 e2@7 c#2@4 f#2@11 f#1@11 ~@8 f#2@6 ~@2 f#2@7 b1@4 ~@20 e2@24 f2@24 f#2@16 c#2@3]/4",
  AF: "[~ f#1@4 b1@12 b2@12 ~@8 e2@7 ~ e2@8 c#2@19 ~ c#2@4 f#2@8 f#1@4 a1@7]/2",
  AG: "~ a#1@4 b1@16 c#2@4 d#2@4 e2@2 ~@6 b1@4 c2@2 ~@5", AH: "~ c#2@8 ~@39",
  AI: "~@5 b1@20 d#2@4 e2@6 ~@2 e2@2 ~@2 e2@2 ~@5", AJ: "[~ c#2@26 ~@2 f#2@24 b1@25 ~@18]/2", AK: "[~@25 e1@70 ~]/2",
})).s("gm_acoustic_bass").gain(0.3)

// bass · slap bass 2
const bass_2 = note("<~@39 A@2 ~@5>".pickRestart({
  A: "[~@9 b3@4 c#4@3 ~ a2@4 b2@3 ~ e2@4 f#2@8 a2@4 f#3@12 ~@43]/2",
})).s("gm_slap_bass_2").gain(0.45)

// chords · percussive organ
const percussive_organ = note("<~@7 A B ~@7 C D E F G H I J K@2 L ~@3 M ~ N@3 O P@3 Q R ~@2 S T ~>".pickRestart({
  A: "~@11 c#7 e7@15 ~ c#7@4 e7 ~@2 g#6 a6@4 g6@4 e6 ~@3, ~@12 d#7 ~@35", B: "g6@2 e6 g6 ~ a6@6 ~",
  C: "~@40 [d#5,f#5,a5,b5]@3 ~ [d#5,f#5,a5,b5]@3 ~", D: "[d5,e5,g#5,b5] [d5,f5,g#5,b5]",
  E: "[c#5,e5,f#5,a5]@38 ~@2 [c#5,d#5,f#5,a5]@3 ~ [c#5,d#5,f#5,a5]@3 ~", F: "[b4,e5,g#5]",
  G: "[f#4,a4,c#5,e5]@23 ~ [f#4,a4,c#5,e5]@19 ~ [c5,d#5,f#5,a5]@4", H: "[b4,d5,e5,g#5]@11 [d5,e5,g#5,b5]",
  I: "[c#5,e5,f#5,a5] [f#6,a6,c7,d#7]", J: "[g#6,b6,e7]",
  K: "[[a6,c#7,e7]@11 ~ e7@8 [d7,f7]@24 ~@4 e6@20 [c6,d#6]@28, ~@3 [g#6,b6]@8 c#6@6 ~@7, ~ [a5,f#6]]/2", // A Dm Cm G#m D
  L: "~@8 [d5,e5,g5,a5,b5]@7 ~ [d5,e5,g5,a5,b5]@7 ~ [d5,e5,g5,a5,b5]@7 ~ [d5,e5,g5,a5,b5]@7 ~ [d5,e5,g5,a5,b5]@6 ~@2", // Em7
  M: "~@24 [a6,c#7,e7]@3 ~ [g#6,b6,d7]@11 ~@9", // A G#dim
  N: "[~@26 [c4,c#4] d#4 [f4,f#4] [g#4,a#4] [c5,c#5,d#5] [f5,f#5,g#5] a#5 ~ [b5,f6,g6]@18 [a#5,e6,f#6]@26 ~@8 c#6@15 b5@3 ~@33 [e5,g#5,b5]@7, ~@34 c#6@45 ~@7 [f#5,a5,d#6]@19 ~@39]/3", // C#maj7 F#maj7 G#sus2 Cm Fm G7 F#7 E …
  O: "~ [b5,d6]@20 ~@4 d6@4 [e5,f#5,a5,c#6]@14 ~@2 [e5,f#5,a5,c#6]@3, ~ [f5,g#5]@28 ~@19, ~@21 b5@8 ~@19", // Bm F#m7 Fm
  P: "[~ [e5,f#5,a5,c#6]@3 ~ [b4,d#5,f#5]@10 a5 b5 c#6@6 b5@13 ~ [c#5,e5,g#5,b5]@6 ~@2 [c#5,e5,g#5,b5]@6 ~@2 [c#5,f5,g#5,b5]@8 c#6@12 e6@2 f#6@2 g#6@4 e6@2 ~@2 e6@24 ~@2 e6 f#6 g#6@4 e6@2 ~@2 f#6@4 e6@2 d6 [a5,b5,c#6] [e5,f#5,g#5] d5 ~@13]/3", // F#m7 B C#m7 C#7 A E
  Q: "~@17 b5@3 ~ b5@4 c#6@3 ~ b5@19", R: "~ g5@26 ~@21", S: "~@36 [a7,a#7] b7@11", T: "a7 g7 e7 a7@6 ~ g7@7 e7@27 ~@4",
})).s("gm_percussive_organ").gain(0.2)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~@8 A@4 B@8 C@6 D@3 E F G@4 H I@3 J K L ~ M@2 ~>".pickRestart({
  A: "[~@49 b4@10 ~ [e4,g#4,b4]@5 ~@9 b4@9 ~ [f4,g#4,b4]@5 ~@8 [f#4,a4]@10 ~ [e4,f#4,a4]@4 ~@9 [a4,c#5]@9 ~@2 [f#4,a4,c#5]@5 ~@9 b4@9 ~ [e4,g#4,b4]@5 ~@8 [b4,d5]@10 ~ [g#4,b4,d5]@5 ~@7, ~@47 [e3,b3]@18 ~@7 d4@17 ~@7 c#4@17 ~@6 b3@17 ~@7 e3@18 ~@31, ~@48 [e4,g#4]@11 ~@12 b3@18 ~@6 f#3@18 ~@7 f#4@10 ~@14 e4@11 ~@13 f4@17 ~@7, ~@73 [f4,g#4]@10 ~@13 e4@11 ~@13 d#4@16 ~@8 b3@18 ~@5 b3@18 ~@7, ~@145 g#4@10 ~@13 g#4@10 ~@14]/4", // E Fdim F#m F#m7 A F#m E Bm …
  B: "[~ [a4,c#5]@9 ~@2 [f#4,a4,c#5]@5 ~@8 [a4,c#5]@9 ~@2 [f#4,a4,c#5]@5 ~@8 b4@10 ~ [e4,g#4,b4]@5 ~@9 b4@9 ~ [f4,g#4,b4]@4 ~@9 a4@9 ~@2 [e4,f#4,a4]@4 ~@9 c5@9 ~@3 a4@7 ~@5 b4@10 ~ [e4,g#4,b4]@5 ~@9 c#5@9 ~ [f#4,a4,c#5]@5 ~@8 [a4,c#5]@4 ~@8 e5@5 ~@3 [a4,b4]@24 ~@4 b4@10 ~ [e4,g#4,b4]@5 ~@9 b4@9 ~ [f4,g#4,b4]@5 ~@8 [f#4,a4]@10 ~ [e4,f#4,a4]@4 ~@9 [a4,c#5]@9 ~@2 [f#4,a4,c#5]@5 ~@9 b4@9 ~ [e4,g#4,b4]@5 ~@8 [b4,d5]@10 ~ [g#4,b4,d5]@5 ~@7, [a3,e4]@18 ~@5 [b3,e4]@17 ~@7 [e3,b3]@18 ~@8 [f4,g#4]@10 ~@13 [e4,f#4]@11 ~@11 b3@22 ~@3 [e3,b3]@18 ~@7 [a3,e4]@17 ~@6 a3@5 ~@7 b3@8 b3@25 ~@3 [e3,b3]@18 ~@8 [f4,g#4]@10 ~@13 e4@11 ~@13 d#4@16 ~@8 b3@18 ~@5 b3@18 ~@7, f#4@10 ~@14 f#4@10 ~@14 [e4,g#4]@11 ~@13 [b3,d4]@18 ~@5 [f#3,c#4]@18 ~@6 e4@20 ~@5 [e4,g#4]@11 ~@14 a4@10 ~@85 d4@17 ~@7 c#4@17 ~@6 b3@17 ~@7 e3@18 ~@31, ~@120 [f#4,a4]@11 ~ [f#4,c5]@7 ~@29 f#4@11 ~@13 [d#4,f#4]@5 ~@7 [e4,a4,b4]@6 ~@2 [d#4,f#4]@25 ~@3 [e4,g#4]@11 ~@12 b3@18 ~@6 f#3@18 ~@7 f#4@10 ~@14 e4@11 ~@13 f4@17 ~@7, ~@337 g#4@10 ~@13 g#4@10 ~@14]/8", // A F#m A F#m E Fdim F#m7 E …
  C: "[~ [a4,c#5]@9 ~@2 [f#4,a4,c#5]@5 ~@8 [a4,c#5]@9 ~@2 [f#4,a4,c#5]@5 ~@8 b4@10 ~ [e4,g#4,b4]@5 ~@9 b4@9 ~ [f4,g#4,b4]@4 ~@9 a4@9 ~@2 [e4,f#4,a4]@4 ~@9 c5@9 ~@3 a4@7 ~@5 b4@9 ~@2 [e4,g#4,b4]@5 ~@8 b4@9 ~@2 [e4,g#4,b4]@5 ~@8 c#5@3 ~@9 d5@5 ~@3 [f4,g#4,b4]@23 ~@5 a4@9 ~@2 [e4,f#4,a4]@5 ~@8 [c#5,d#5]@10 ~@2 [a4,c#5,d#5]@5 ~@6, [a3,e4]@18 ~@5 [b3,e4]@17 ~@7 [e3,b3]@18 ~@8 [f4,g#4]@10 ~@13 [e4,f#4]@11 ~@11 b3@22 ~@3 b3@17 ~@7 [b3,c#4]@18 ~@6 [a3,c#4]@6 ~@14 g#3@24 ~@4 [a3,c#4]@18 ~@7 a4@11 ~@13, f#4@10 ~@14 f#4@10 ~@14 [e4,g#4]@11 ~@13 [b3,d4]@18 ~@5 [f#3,c#4]@18 ~@6 e4@20 ~@5 c#4@17 ~@42 [d4,e4,g#4]@7 ~@2 c#4@24 ~@4 [e4,f#4]@10 ~@13 c#4@18 ~@7, ~@120 [f#4,a4]@11 ~ [f#4,c5]@7 ~@5 [e4,g#4]@10 ~@14 [e4,g#4]@10 ~@14 [e4,a4]@5 ~@7 b4@7 ~@53 f#4@18 ~@6]/6", // A F#m A F#m E Fdim F#m7 E …
  D: "[~@9 e5@5 ~@3 e5@5 ~@3 e5@5 ~@3 e5@5 ~@3 e5@5 ~@3 c#5@2 ~@11 c#5@2 ~@9 [g4,a4,c#5]@2 ~@22 e5@2 ~@9 [b4,e5]@3 ~@8 [d4,g#4,b4,e5]@2 ~@21 c#5@2, ~@7 [g4,a4]@6 ~@2 [g4,a4]@6 ~@2 [g4,a4]@6 ~@2 [g4,a4]@6 ~@2 [g4,a4]@6 ~@2 e4@3 ~@11 [g4,a4]@2 ~@33 [d4,g#4,b4]@2 ~@46, ~@8 [b4,d5]@5 ~@3 [b4,d5]@5 ~@3 [b4,d5]@5 ~@3 [b4,d5]@5 ~@3 [b4,d5]@5 ~@3 [a3,g4,a4]@3 ~@9 [a3,e4]@3 ~@9 [a3,e4]@3 ~@20 g#3@4 ~@8 [g#3,d4,g#4]@3 ~@8 g#3@3 ~@20 [a3,e4,g4,a4]@2 ~]/3", // A7 E5 E7 Gsus2 G#dim Bm A7 A5 …
  E: "~@10 c#5@2 ~@9 c#5@2 ~@20 [b4,e5]@2 ~@3, ~@8 a3@3 ~@8 a3@3 ~@19 g#3@4 ~@3, ~@9 [e4,g4,a4]@2 ~@9 [e4,g4,a4]@2 ~@20 [d4,g#4]@3 ~@3", // E5 A7 Ddim
  F: "~@6 [b4,e5]@3 ~@9 e5@2 ~@20 c#5@2 ~@6, ~@5 [g#3,d4,g#4]@3 ~@8 g#3@3 ~@20 [a3,e4,g4,a4]@2 ~@7, ~@17 [d4,g#4,b4]@2 ~@29", // E5 G#dim A7 G#dim
  G: "[~@4 c#5@2 ~@9 [a4,c#5]@2 ~@20 [b4,e5]@2 ~@9 [g#4,b4,e5]@2 ~@10 [b4,e5]@2 ~@21 f5@20 ~@3 e5@19 ~@9 [c#5,d#5]@5 ~@3 d#5@5 ~@3 [a4,c#5]@13 ~@11 b4@10 ~@2 b4@5 ~, ~@3 [a3,e4,g4,a4]@2 ~@9 [a3,e4,g4]@2 ~@19 g#3@4 ~@8 [g#3,d4]@3 ~@8 g#3@3 ~@20 g4@21 ~@31 [f#4,a4]@6 ~@2 [f#4,a4,c#5]@6 ~@2 [d#4,f#4]@15 ~@9 b3@18 ~, ~@36 [d4,g#4]@3 ~@20 [d4,g#4]@3 ~@18 c#4@23 ~ [c#4,f#4]@22 ~@6 c#4@6 ~@2 c#4@6 ~@2 b3@15 ~@9 e3@18 ~@2, ~@82 [b4,c#5]@21 ~@2 [a#4,c#5]@20 ~@48 [e4,g#4]@11 ~ [e4,g#4]@5 ~@2]/4", // A E5 E E5 C#sus2 A A7 G#dim …
  H: "~@7 [g#4,b4]@10 [f4,g#4,b4]@5 ~@9 a4@9 ~@2 [e4,f#4,a4]@4 ~@2, ~@5 [b3,d4]@18 ~@6 [f#3,c#4]@18 ~, ~@6 f4@10 ~@13 e4@11 ~@8, ~@15 f#4@5 ~@4", // G#m Fdim F#m7 Bm F#5
  I: "[~@6 [a4,c#5]@9 ~@2 [f#4,a4,c#5]@4 ~@18 e5@3 ~@5 e5@5 ~@2 [g#4,b4,d5]@22 ~@3 c#5@21 ~@3 c#5@21 ~@15 e5@5, ~@4 b3@17 ~@16 [b3,e4,g#4]@5 ~@3 [b3,e4]@7 ~ [b3,f4]@23 ~ [c#4,e4]@23 b3@23 ~@14 [b3,e4]@7, ~@5 d#4@16 ~@80 e4@23 ~@20, ~@5 f#4@10 ~@23 b4@5 ~@3 [g#4,b4]@6 ~@26 [f#4,a4]@23 ~ [f#4,a4]@23 ~@13 [g#4,b4]@6]/3", // A F#m G#dim E E5 Bdim C#m E5 …
  J: "~@2 d5@22 ~@6 [a4,c#5]@17 ~, b3@23 ~@5 c#4@19 ~, ~ [f4,g#4,b4]@22 ~@6 [e4,f#4]@19", // A Fdim Esus2
  K: "~@3 [a4,c5]@25 ~@14 [b4,e5]@6, ~ [b3,d#4]@26 ~@13 b3@7 ~, ~@2 f#4@25 ~@14 [e4,g#4]@6 ~", // Am E5 B E
  L: "~ [g#4,b4,d5]@26 ~@21, [b3,f4]@13 ~@11", // G#dim Bdim
  M: "[~@28 f#5@67 ~, ~@25 e4@69 ~@2, ~@26 [g#4,b4]@69 ~, ~@27 d#5@67 ~@2]/2", // G#m
})).s("gm_electric_guitar_jazz").gain(0.18)

// other · trumpet
const trumpet = note("<~ A B C D ~@10 E F ~@7 G ~ H I ~@5 J@2 ~ K@2 L@2 M N ~@4>".pickRestart({
  A: "~@6 e6@5 ~ e6@8 c#6@4 e6@10 d#6 d6 c#6@3 ~@9",
  B: "e6@8 ~@4 e6@8 g6@8 a6@3 g6@2 a6@2 ~ g6@2 a6@2 g6@2 a6@2 g6 [e6,f6] [a5,b5,c6,d6] [d5,e5,f5,g5]", // Fmaj7 D7 Em7
  C: "~@8 e5@3 ~ e5@8 c#5@4 e5@6 ~@2 e5@2 d#5 d5@2 c#5@10 ~", D: "e5@3 ~@3 a4@4 g4@11 ~@3",
  E: "~@9 e5@3 ~ e5@6 ~@2 e5@3 ~ e5@3 ~@8 e5@4 ~@8", F: "e5@4 ~@5 e4@3 ~ g4@6 f#4@26 ~@3, ~@6 f#4 ~@17",
  G: "~@8 e5@3 ~ e5@7 ~ e5@14 ~@2 c#5@3 ~@9, ~@17 d#5 ~@6, ~@35 d5@2 ~@11", H: "~@8 e5@7 ~ d5@7 ~ b4@7 ~ a4@7 ~ g4@7 ~",
  I: "e4 ~@15", J: "[~@38 f#5@7 ~ f#5@7 f#5@3 ~@40]/2", K: "[~@37 e5@7 ~ e5@7 ~ d5@24 ~@19]/2",
  L: "[~@41 e5@20 d#5@2 d5@2 c#5@3 ~@9 g#4@19]/2", M: "~ g4@26 ~@14 b5@7", N: "~ d6@24 ~@23",
})).s("gm_trumpet").gain(0.7)

// other · alto sax
const alto_sax = note("<~ A B C D@2 E F G ~@6 H I ~@7 J ~ K L M ~ N ~@2 O@2 ~ P@2 Q R S T U@3 ~>".pickRestart({
  A: "~@8 g#4@3 ~ g#4@7 ~ g#4@4 a4@10 ~@2 a4@3 ~@9",
  B: "c#5@4 ~@8 c#5@7 d#5@6 e5@2 d#5 ~ d#5 ~@2 d#5 e5@2 d#5 ~ d#5 e5@2 d#5 e5@2 d#5 [d#5,e5] ~@3, ~@28 e5@2 ~ e5@2 ~@3 e5@2 ~@10", // Emaj7
  C: "~@8 g#4@4 g#4@6 ~@2 g#4@4 a4@10 ~@3 a4@7 ~@4",
  D: "[a#4@7 ~@5 c#5@7 ~ g4@21 ~@4 a#4@2 ~ e5@17 c#5@4 b4@4 c#5@8 ~ b4@2 ~@12, ~@44 g#4@2 ~ c#5@2 ~@47]/2",
  E: "~ g4@8 e4@4 f#4@8 e4@3 ~ g4@4 e4@3 f#4@8 ~ e4@3 c#4@4", F: "d4@20 b3@23 ~@5", G: "e4@8 b3@4 ~ d4@7 b3@22 ~@6",
  H: "~@8 e4@3 ~ e4@6 ~@2 e4@3 ~ e4@3 ~@9 e4@4 ~@8", I: "e4@2 ~@4 e4@3 ~ d#4@13 ~",
  J: "~@8 g#4@3 ~ g#4@7 ~ f4@15 ~ c#4@4 ~@8", K: "~@8 a4@7 ~ g4@7 ~ e4@7 ~ d4@7 ~ b3@7 ~", L: "a3 ~@15",
  M: "~@30 b4@4 c#5@4 b4@3 g4@4 e4@3", N: "~@24 b4@4 c#5@4 b4@4 g4@3 e4@3 ~@6", O: "[~@38 d#4@7 ~ d#4@7 b3@3 ~@40]/2",
  P: "[~@37 g#4@7 ~ g#4@7 ~ f4@24 ~@19]/2", Q: "~@41 g#4@7", R: "~ f4@15 ~ a4@3 ~@9 e4@19", S: "~ d#4@26 ~@15 g#4@6",
  T: "~ f4@16 e4@2 ~@2 b3 a3 g#3 f#3 ~@23, ~@19 d4@2 ~@27, ~@10 c#4 ~@13",
  U: "[~@37 e4@7 b3@7 d4@7 ~ c#4@7 b3@6 ~ g#3@69 ~@2]/3",
})).s("gm_alto_sax").gain(0.4)

// other · tenor sax
const tenor_sax = note("<~ A B C D E F G H ~@6 I J K L M N O P Q R S T U V ~ W ~@2 X@5 Y Z AA AB AC@3 ~>".pickRestart({
  A: "~@8 c#4@3 ~@2 c#4@6 ~ c#4@4 ~ e4@10 ~ e4@3 ~@9",
  B: "~ e4@5 ~@7 e4@6 ~ g4@5 a4@2 g4 ~ a4 g4 ~ a4 g4 a4@2 g4 a4 ~ a4@2 g4 a4@2 g4 ~ g4 ~, ~@38 g4@2 ~@5 a4@2 ~",
  C: "~@8 c#4@3 ~ c#4@5 ~@3 c#4@4 e4@11 ~@2 e4@5 ~@6", D: "f#4@6 ~@6 f#4@7 ~ b3@24 ~@4",
  E: "~ b4@16 g4@3 ~ g4@4 e4@7 ~ e4@2 ~@13", F: "c#4@12 ~ e4@12 ~ d4@18 ~@4", G: "g3@19 e3@27 ~@2",
  H: "e3@8 ~ b2@4 d3@7 ~ b2@21 ~@6", I: "~@8 d4@4 d4@6 ~@2 d4@3 ~ b3@3 ~@9 b3@3 ~@9", J: "c#4@4 ~@8 c#4@7 ~ b3@26 ~@2",
  K: "~@9 c#4@2 e4@9 d4@28, ~@4 b3 ~@19", L: "~@4 b3 c#4 g3 e3 f#3 ~@3", M: "~@8 b3@2 e4@2 d4@9 ~ d4@2",
  N: "c#4@3 ~@3 c#4@4 b3@2 d4@8 c#4@2 b3@2", O: "g#3@7 ~ b3@4 c#4@8 b3@3 ~ d4@4 b3@4 c#4@16", P: "~@2 e4 c#4@2 g3@7",
  Q: "g#3@12 ~@4 b3@4 e4@3 ~ g4@4 e4@4 g4@3 ~@13", R: "~@8 b3@3 ~ b3@7 ~ b3@15 ~ g#3@4 ~@8",
  S: "~@24 g4@3 ~ c#4@8 g3@3 ~@9", T: "~@8 b3@7 ~ a3@7 ~ g3@7 ~ e3@7 ~ d3@7 ~", U: "c#3 ~@15",
  V: "~@30 b3@4 c#4@4 b3@3 g3@4 e3@3", W: "~@24 b3@4 c#4@4 b3@4 g3@3 e3@3 ~@6",
  X: "[~@38 a3@7 ~ a3@7 a3@3 ~@29 b3@2 ~ e4@7 b3@6 d4@24 c#4@24 b3@9 a#3 a3 g#3 g3@8 ~@12 b3@7 ~ b3@7 ~ g#3@24 ~@12 c#4@7, ~@87 c#4@2 ~@151]/5",
  Y: "~ b3@4 d4@4 c#4@4 b3@4 g3@10 ~@14 b3@7", Z: "~ g#3@16 f3@3 ~@9 c#4@19", AA: "~ c4@26 ~@15 d4@6",
  AB: "~ c#4@17 ~@3 f#3 e3 [c#3,d3] b2 a2 g#2 ~@21, ~@9 b3 g#3 ~@13, ~@19 a3@2 ~@27", // Dmaj7
  AC: "[~@37 e4@7 b3@7 d4@7 ~ c#4@7 b3@7 f#3@68 ~@3]/3",
})).s("gm_tenor_sax").gain(0.4).pan(0.3)

// bass · baritone sax
const bass_3 = note("<A@2 B C ~ D E F G ~@7 H ~@11 I ~ J ~@9 K L M@3 ~>".pickRestart({
  A: "[~@24 c#3@3 ~@5 b2@4 g2@4 f#2@4 e2@26 ~@26]/2", B: "~@10 g2 f#2", C: "e2@5 ~@3", D: "e2@19 ~ e2@4 c#2@19 ~ c#2@4",
  E: "f#2@19 ~ f#2@4 b2@20 ~@4", F: "e2@4 ~ c#2@5 ~@2", G: "f#2@4 ~ b1@5 ~@2", H: "~@9 e2@4 b2@7 f#2@23 ~@5",
  I: "~@30 b2@4 c#3@4 b2@3 g2@4 e2@3", J: "~@24 b2@4 c#3@4 b2@4 g2@3 e2@3 ~@6", K: "~@41 e2@7", L: "~ c#2@26 ~@21",
  M: "[~@37 e3@7 b2@7 d3@7 ~ c#3@7 b2@7 e2@68 ~@3]/3",
})).s("gm_baritone_sax").gain(0.45)

// other · trombone
const trombone = note("<A@2 B C D E F G H ~@6 I J ~@7 K ~ L M ~@5 N@2 ~ O@2 P Q R S ~@4>".pickRestart({
  A: "[~@24 c#4@3 ~@5 b3@4 g3@4 f#3@4 e3@10 ~@2 c#4@3 ~@2 c#4@6 ~@2 c#4@4 a3@9 ~@2 a3@4 ~@8]/2",
  B: "e4@4 ~@8 e4@8 a4@7 b4@2 a4@2 ~ b4 a4 b4@2 a4 ~ a4 ~ b4 a4 ~ a4 b4@2 a4 ~, ~@37 b4@2 ~@3 b4@2 ~@4",
  C: "~@8 c#4@3 ~@2 c#4@6 ~ c#4@3 ~ b3@10 ~@3 b3@5 ~@6", D: "a#3@7 ~@5 c#4@7 ~ g3@27 ~",
  E: "~@8 c#4@3 ~@2 c#4@6 ~@2 c#4@4 b3@7 ~ b3@2 ~@13", F: "~ g3@16 f#3@3 e3@3 ~ g3@3 ~ e3@2 ~@2 f#3@8 e3@3 ~ c#3@2 ~@2",
  G: "g3@5 e3@6 ~", H: "~ e3@7 ~ b2@2 ~@2 d3@7 b2@20 ~@8", I: "~@8 d4@3 ~ d4@6 ~@2 d4@3 ~ b3@3 ~@9 b3@2 ~@10",
  J: "a3@4 ~@5 f#3@4 a3@6 ~ f#3@25 ~@3", K: "~@8 d4@3 ~ d4@7 ~ c#4@15 ~ b3@4 ~@8",
  L: "~@8 e4@7 ~ d4@7 ~ b3@7 ~ a3@7 ~ g3@7 ~", M: "e3 ~@15", N: "[~@38 c#4@7 ~ c#4@7 f#4@3 ~@40]/2",
  O: "[~@37 c#4@7 ~ c#4@7 ~ b3@24 ~@19]/2", P: "~@41 c#4@7", Q: "~ c#4@16 b3@3 ~@9 f#3@19", R: "~ a3@26 ~@14 e4@7",
  S: "~ g#4@22 ~@25",
})).s("gm_trombone").gain(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E B@2 F G H I J@3 B K L B J@6 M N O P Q R S T U V W X Y Z AA AB AC ~@5
>`.pickRestart({
  A: "~@6 x ~ x!2 ~ x", B: "x!2", C: "x ~@4 x ~@6", D: "x ~@4 x!2 ~@5", E: "x!12", F: "x ~@4 x ~@3 x ~ x",
  G: "x ~ x ~@3 x ~@3 x!2", H: "x", I: "x ~@10 x", J: "x ~@5 x ~@4 x", K: "x ~@4 x ~@2 x!2 ~ x", L: "x!4 ~ x ~@5 x",
  M: "x ~ x!2 ~ x!7", N: "x!4", O: "~ x!5", P: "x!3 ~", Q: "x ~@10 x ~@11 x ~@21 x ~@2", R: "~@4 x ~@5 x ~@10 x ~@2",
  S: "~@5 x ~@11 x ~@21 x ~@8", T: "~@3 x ~@10 x ~@21 x ~@11",
  U: "x ~@10 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@10 x ~@2", V: "~@8 x ~@10 x ~@18 x ~@7 x ~",
  W: "~@5 x ~@19 x ~@3 x ~@18", X: "~@5 x ~@11 x ~@11 x ~@18", Y: "~@5 x ~@11 x ~@19 x ~@7 x ~@2",
  Z: "~@5 x ~@19 x ~@3 x ~@11 x ~@6", AA: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2",
  AB: "~ x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", AC: "~ x ~@27 x ~@18",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@9 A@6 ~@2 A@6 B ~@10 C D E ~@9>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@41 x ~@6", D: "~@17 x ~@23 x ~@6", E: "~@17 x ~@30",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<A B C B D B@3 E ~@6 F G ~@7 H I J K L M N O P Q R ~ S T U V W ~@5>".pickRestart({
  A: "~@2 x!2", B: "~ x ~ x", C: "~@2 x!2 ~@8", D: "x ~@2 x ~ x ~@3 x ~@2", E: "~ x!2 ~", F: "~ x!3",
  G: "x ~@2 x ~ x ~@6", H: "~@2 x ~@2 x ~@2 x ~ x ~", I: "~@34 x!3 ~@11", J: "x", K: "x!3 ~",
  L: "x ~@10 x ~@11 x ~@21 x ~@2", M: "~@4 x ~@5 x ~@10 x ~@2", N: "~@5 x ~@11 x ~@21 x ~@8",
  O: "~@3 x ~@10 x ~@21 x ~@11", P: "x ~@10 x ~@10 x ~@22 x ~@2", Q: "~@8 x ~@16 x!5 ~ x ~@6 x ~@7 x ~",
  R: "~@5 x ~@42", S: "~@29 x ~@15 x ~@2", T: "~@5 x ~@11 x ~@23 x ~@6", U: "~@29 x ~@11 x ~@6",
  V: "~ x ~@27 x ~@7 x ~@10", W: "~ x ~@27 x ~@18",
// … 50 more lines

More by Ellington