Strudelify
Deacon Blues cover art

Aja

Deacon Blues

Steely Dan

KeyE minorTempo120 bpm
0:00/0:00
// Deacon Blues — Steely Dan
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 1/4 at bar 8, 4/4 at bar 9, 1/4 at bar 143, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "piano" named as a piano, played on piano (its clarinet patch is not one); ch 2 "sax" named as a reed, played on alto sax (its shakuhachi patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 187 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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@7 B C D@2 E F G@3 H I J K L M N B C O@2 E F P@2 Q R S T U V W X Y Z AA AB AC AD AE@3 AF AG AH AI AJ AK@2 AL AM AN AO
  AP AQ B C D@2 E F AR@3 H I J K L M N B C D@2 E F AS@2 Q R S T U V W X Y Z AA AB AC AD AE@3 AF AG AH AI AJ AK@2 AL AM
  AN AT AU@2 AV AW@2 AX AY AZ BA BB BC BD BE BF BG BH AY BI@2 BG BJ@2 BK@3 BL@7 BM@8 BN@8 BO@8 BP@8 BQ@7 BR@3
>`.pickRestart({
  A: "[~@18 [c2,c3,b3,c4,e4,g4]@12 [b2,a3,d4,e4,g4]@11 ~ [a3,c4,d4,f4]@11 [a2,g3,c4,f4]@12 ~ [d2,d3]@12 [c#2,c#3,b3,e4,a4]@12 [c2,c3,b3,d4,e4,g4]@12 [b2,a3,d4,g4]@12 [d#2,d#3,g3,a#3,d4,f4]@18 g#3@17 ~@12 g6@6 ~, ~@41 a#2@12 ~@12 [c#4,f#4,a4]@13 ~@54 [e2,e3]@19 g#4@2 d5 g5@6 d6@7 ~, ~@66 [d4,g4]@9 d4@4 g#4@5, ~@149 g#3@19, ~@151 g4@8 d5@9]/7", // Cmaj7 Em7 Dm7 F D A Cmaj7 G …
  B: "[g2,f#3]@23 ~, [b3,e4]@7 ~", C: "[f2,a3,d4], d#3@5 ~",
  D: "[[g3,d4]@10 ~@2 f2@14 ~ g2@3 a2@3 c3@5 ~ d3@3 a2@2 ~ f2@2 ~, a2@4 [d#3,a3,d4]@11 ~, b3 ~@5]/2", // G5 D
  E: "~ e4@21 ~@2, g2, [f#3,b3]@11 ~, ~ d#4@2 ~@21", F: "[a3,d4]@7 ~, f2, d#3@19 ~@5",
  G: "[[g3,b3,d4]@10 ~@39 g4@20 ~@3, a2@6 [c4,e4]@17 ~ [c4,e4]@10 ~@2, ~@12 f#3@21 b5@9 d2@6 f2@23 ~, ~@4 d2@6 f#5@5 ~@9, ~@8 e5@7 a3@8 ~]/3", // G C
  H: "[e2,g#3,b3,d4,f4]", I: "[a2,g3,a3,c4,e4]", J: "[a#2,g#3,d4,g4]", K: "[e2,g#3,b3,d4,e4]",
  L: "[b2,a3,b3,d#4,f#4]@23 ~", M: "[b2,b3,d4,f4,a4] [e3,b3,d4,e4,g#4]",
  N: "[b2,b3,d4,f4,a4]@7 ~@5 [e2,e3,g#3,d4,g4]@11 ~", // Bm7b5 E7
  O: "[[g3,d4]@10 ~@14 g#5 ~@2 g2@3 [a2,d6]@3 c3@5 ~ d3@3 a2@2 ~ f2@2 ~, a2@4 [d#3,a3,d4]@11 ~, b3@8 ~@4 f2@14 ~@7 c6@12 ~@3, ~@6 a5@5 ~]/2", // G5 D5 D
  P: "[[g3,b3,d4,f#4]@10 ~@10 e5@2 f#5@2 ~@6 f#5@3 e5@10 ~@5, a2@4 a2@11 ~, ~@12 [c#4,f#4]@31 ~@5, ~@24 b5@19 ~@5]/2", // Gmaj7 F#5
  Q: "[a3,c4,e4,g4]@19 ~@5, f2", R: "[g#3,b3,d4,f4]@3 ~, e2@23 ~", S: "[a2,g3,a3,c4,e4]@23 ~",
  T: "[g2,g3,a#3,d4,f4]@2 [g2,a#3,d4,f4,a4] [f#2,a#3,c#4,e4,g#4]", U: "[a3,c4,g4]@7 ~, [f2,e4]@23 ~",
  V: "[e2,b3,d4,e4,g4]", W: "[d2,f#3,a3,c4,e4]", X: "[g2,f3,a3,c4,e4]@23 ~", Y: "[g3,a3,c4,e4]@11 ~, a2",
  Z: "[e3,d4,e4], [b3,g4]@11 ~", AA: "[a3,c4,d4,f4]@7 ~, d3", AB: "[b3,c4,e4,g4]@7 ~, c3",
  AC: "[a3,a#3,d4,f4]@7 ~, a#2@23 ~", AD: "[a2,g3,c4,e4]@11 ~ [g3,b3,c4,e4]@9 ~@3, a3@8 ~@4 g2@11 ~",
  AE: "[[f#2,f#3,a3,c4,e4]@2 ~@4 [f3,e4]@13 ~@2 [e2,b3,e4,g4]@11 ~ [a3,c4,e4,g4]@11 ~@4 [a2,e4]@24, ~@5 [a3,c4]@13 ~@3 d4@9 ~@17 g3@22 ~@3, ~@6 f2@15 ~@12 f2@14 ~ [a3,c4]@22 ~@2]/3", // F#m7b5 Fmaj7 Em Am7 A5 Am
  AF: "[e3,b3,d4,e4,g4]@23 ~", AG: "[a3,c4,d4,f4]@19 ~@5, d3@11 ~", AH: "[c2,c3,b3,c4,e4,g4]@3 ~",
  AI: "[a3,f4]@7 ~, a#2@23 ~, [a#3,d4]@19 ~@5", AJ: "[a3,c4,e4,g4]@3 ~ [g3,c4,e4]@3 ~, a2@11 b3@8 ~@5, ~@12 g2@11 ~",
  AK: "[[f#2,f#3,a3,c4,e4]@2 ~@4 [f3,a3,c4,e4]@13 ~@2 [e2,b3,e4,g4]@12 [a3,c4,e4,g4]@12 ~@3, ~@2 f2@5 d4@3 ~ f2@5]/2", // F#m7b5 Fmaj7 Em Am7
  AL: "[g3,a3,c4,e4]@5 ~, a2", AM: "[e3,b3,d4,e4,g4]@5 ~", AN: "[d2,d3,c#4,f#4,a4] [c#2,c#3,b3,e4,a4]",
  AO: "[c2,c3,b3,d4,e4,g4]@12 [b2,a3,d4,g4]@11 ~", AP: "[d#2,d#3,g3,a#3,d4,f4]@23 ~", AQ: "[e2,e3,g#3,d4,g4]@11 ~",
  AR: "[[g3,b3,d4]@10 ~@2 d2@29 ~@8 g4@20 ~@3, a2@6 [c4,e4]@17 ~ [c4,e4]@10 ~@2, ~@12 f#3@32 ~ a3@24 ~@3, ~@42 d2@6 f2@23 ~]/3", // G C
  AS: "[[g3,b3,d4,f#4]@10 ~@2 [c#4,f#4]@31 ~@5, a2@4 a2@11 ~]/2", AT: "[c2,c3,b3,d4,e4,g4]@2 [b2,a3,d4,g4] ~",
  AU: "[[a#2,g#3,d4,g4]@20 ~@3 [b2,b3,d4,g4]@22 ~@3]/2", AV: "[c3,b3,e4,g4]@23 ~, c4@7 ~",
  AW: "[[b3,d4,e4,g4]@5 ~ a2@6, e3@23 [c#4,f#4]@21 ~@4, ~@8 g3@7 ~]/2", AX: "[f#3,c4,f4]@7 ~, d3@23 ~",
  AY: "[f3,b3,e4]@7 ~, g2", AZ: "[b2,a3,d#4,g4]@23 ~", BA: "[b3,d4,e4,g4]@5 ~, e3", BB: "[g3,c#4,f#4]@19 ~@5, a2",
  BC: "[a3,c4,e4,g4]@9 ~@3 [a#3,e4,a4]@8 ~@4, f2@12 f#2@11 ~", // Am7 A
  BD: "[g3,b3,d4,f#4]@3 ~ [b2,g4]@4, g2 ~, c4 ~@11 [a3,d#4]@10 ~@2", BE: "[c3,b3,e4,g4]@23 ~, c4@5 ~",
  BF: "[b3,d4,e4,g4]@5 ~, e3@23 ~", BG: "[g3,c#4,f#4]@7 ~, a2@23 ~", BH: "[f#3,c4,f4]@5 ~, d3@23 ~",
  BI: "[[b2,g4]@23 ~ [b3,e4,g4]@21 ~@3, [a3,d#4]@21 ~@2 d4@20 ~@5, ~ e3]/2", // Em Adim
  BJ: "[[a3,c4,e4,g4]@9 ~@3 [a#3,e4,a4]@8 ~@3 [g3,b3,d4]@8 ~@5 [b2,a3,d#4,g4]@11 a3, f2@11 ~ f#2@11 g2@12 ~@13, ~@23 f#4@10 ~@15]/2", // Am7 A G Baug
  BK: "[[c2,c3,b3,c4,e4,g4]@12 [b2,a3,d4,e4,g4]@11 ~ [a3,c4,d4,f4]@11 [a2,g3,c4,f4]@12 ~ [d2,d3]@12 [c#2,c#3,b3,e4,a4]@12, ~@23 a#2@12 ~@12 [c#4,f#4,a4]@13 ~@12]/3", // Cmaj7 Em7 Dm7 F D A F#m
  BL: "[[c2,c3,b3,d4,e4,g4]@12 d4@12 [d#2,d#3,g3,a#3,d4,f4]@18 g#3@17 ~@12 g6@6 ~ [g2,f#3]@23 ~ [f2,a3,d4]@24 [g3,d4]@10 ~@2 f2@14 ~ g2@3 a2@3 c3@5 ~ d3@3, ~@12 [b2,a3,g4]@15 ~@15 [e2,e3]@19 g#4@2 d5 g5@6 d6@7 ~@91, ~@21 [d4,g4]@9 d4@4 g#4@5 ~@24 b3@4 ~@17, ~@59 g#3@19 [b3,e4]@21 ~@3 d#3@20 ~@4 a2@12 [d#3,a3,d4]@30, ~@61 g4@8 d5@9 ~@90]/7", // Cmaj7 D#maj7 Gmaj7 Dm G5 Em E G5 …
  BM: "[a2@2 ~ f2@2 ~@2 e4@21 ~@2 [a3,d4]@21 ~@3 [g3,b3,d4,f#4]@10 ~@2 [c#4,f#4]@31 ~@5 [a3,c4,e4,g4]@19 ~@5 [g#3,b3,d4,f4]@18 ~@6 [a2,g3,a3,c4,e4]@23 ~ [g2,g3,a#3,d4,f4]@12 [g2,a#3,d4,f4,a4]@6, ~@6 g2@24 f2@24 a2@12 a2@33 ~@3 f2@24 e2@23 ~@43, ~@6 [f#3,b3]@22 ~@2 d#3@19 ~@143, ~@7 d#4@2 ~@183]/8", // D5 Gmaj7 F#5 Am7 G#dim Am7 Gm7 B5
  BN: "[[f#2,a#3,c#4,e4,g#4]@6 [a3,c4,g4]@21 ~@3 [e2,b3,d4,e4,g4]@24 [d2,f#3,a3,c4,e4]@24 [g2,f3,a3,c4,e4]@23 ~ [g3,a3,c4,e4]@22 ~@2 [e3,d4,e4]@24 [a3,c4,d4,f4]@21 ~@3 [c3,b3,c4,e4,g4]@18, ~@6 [f2,e4]@23 ~@73 a2@24 [b3,g4]@22 ~@2 d3@24 ~@18]/8", // F#7 Am7 Em7 D7 Fmaj7 Am7 E7 Dm7 …
  BO: "[~@6 [a3,a#3,d4,f4]@21 ~@3 [a2,g3,c4,e4]@11 ~ [g3,b3,c4,e4]@9 ~@3 [f#2,f#3,a3,c4,e4]@2 ~@4 [f3,e4]@13 ~@2 [e2,b3,e4,g4]@11 ~ [a3,c4,e4,g4]@11 ~@4 [a2,e4]@24 [e3,b3,d4,e4,g4]@23 ~ [a3,c4,d4,f4]@19 ~@5 [c2,c3,b3,c4,e4,g4]@18, ~@6 a#2@23 ~ a3@8 ~@4 g2@11 ~@6 [a3,c4]@13 ~@3 d4@9 ~@17 g3@22 ~@27 d3@22 ~@20, ~@60 f2@15 ~@12 f2@14 ~ [a3,c4]@22 ~@68]/8", // A#maj7 Am7 Cmaj7 F#m7b5 Fmaj7 Em Am7 A5 …
  BP: "[~@6 [a3,f4]@21 ~@3 [a3,c4,e4,g4]@9 ~@3 [g3,c4,e4]@9 ~@3 [f#2,f#3,a3,c4,e4]@2 ~@4 [f3,a3,c4,e4]@13 ~@2 [e2,b3,e4,g4]@12 [a3,c4,e4,g4]@12 ~@3 [g3,a3,c4,e4]@20 ~@4 [e3,b3,d4,e4,g4]@20 ~@4 [d2,d3,c#4,f#4,a4]@12 [c#2,c#3,b3,e4,a4]@12 [c2,c3,b3,d4,e4,g4]@12 [b2,a3,d4,g4]@6, ~@6 a#2@23 ~ a2@11 ~ g2@11 ~@7 f2@15 ~@12 f2@15 a2@24 ~@66, ~@6 [a#3,d4]@19 ~@16 b3@8 ~@26 d4@9 ~@108]/8", // Dm Am7 C F#m7b5 Fmaj7 Em Am7 Em7 …
  BQ: "[~@6 [a#2,g#3,d4,g4]@20 ~@3 [b2,b3,d4,g4]@22 ~@3 [c2,c3,b3,c4,e4,g4]@12 [b2,a3,d4,e4,g4]@11 ~ [a3,c4,d4,f4]@11 [a2,g3,c4,f4]@12 ~ [d2,d3]@12 [c#2,c#3,b3,e4,a4]@12 [c2,c3,b3,d4,e4,g4]@12 [b2,a3,d4,g4]@12 [d#2,d#3,g3,a#3,d4,f4]@18, ~@77 a#2@12 ~@12 [c#4,f#4,a4]@13 ~@54]/7", // Gm G Cmaj7 Em7 Dm7 F D A …
  BR: "[g#3@17 g#3@48 ~@7, [e2,e3,d4,g4]@2 ~]/3", // Em7
})).s("gm_piano").gain(0.31)

// chords · alto sax · "sax"
const alto_sax = note(`<
  ~@25 A B C@5 D E F@4 G ~@8 H@5 I@2 ~ J@6 ~@2 K@3 ~ L@3 ~@3 M N O@2 ~@2 A B C@5 D E F@4 G ~@13 I@2 ~ P@5 Q@5 R@3 S ~
  Q@5 R@3 S ~@10 T ~ U@8 V@5 ~@12 W@3 X@2 Y@3 ~@9
>`.pickRestart({
  A: "b3 ~", B: "~@22 a3 ~",
  C: "[[b3,e4]@23 [a3,d4]@21 ~@3 f#4@10 ~@2 a4@33 ~@3 [c4,e4]@24 ~, ~@47 b3@45 ~@28, ~@47 d4@8 ~@65]/5", // E5 D5 C
  D: "~ g#3, [d4,f4]", E: "[c4,e4]@11 [c4,e4]@13, g3@23 ~",
  F: "[~@11 [f4,a4]@5 ~@2 g#4@5 ~@24 e4@23 ~ [c4,e4]@24 ~, ~@17 e4@5 ~ d4@22 ~@51, ~@12 g4@23 ~@13]/4", // F C
  G: "[c4,e4]@11 ~", // C
  H: "[~@11 [c4,e4]@11 ~ [g4,b4]@17 ~ [e4,g4]@5 ~ [f4,a4]@23 ~ [e4,g4]@11 ~ [c4,e4]@5 ~ [e4,g4]@6 ~ f4@23 ~, ~@95 d4@24 ~]/5", // C G Em F Em C Em
  I: "[~@5 a4@6 g4@5 ~ e4@6 d4@3 e4@2 d4 c4@15 ~@4]/2",
  J: "[~@11 [c4,e4]@11 ~ [e4,g4]@20 ~@4 f#4@12 e4@11 ~ a4@7 ~@2 a4 a#4 a4 g4@24 ~@12 g4@23 ~@2, ~@107 d4@35 ~@2]/6", // C Em
  K: "[~@18 d4@9 d#4@3 f4@2 g4@3 ~ d4@32 ~@4]/3", L: "[~@18 e4@9 f#4@3 a4@3 b4@3 a4@31 ~@5]/3", M: "d4", N: "d#4",
  O: "[e4@11 d4@12 f4@12 [f4,g4]@11 g4 ~]/2", // Fsus2
  P: "[~@11 [c4,e4]@11 ~ [e4,g4]@20 ~@4 f#4@12 e4@11 ~ a4@7 ~@2 a4 a#4 a4 g4@24 ~@13]/5", // C Em
  Q: "[~@23 g4@6 ~ f#4@5 e4@5 ~ g4@6 f#4@6 e4@6 d4@12 c#4@24 c4@24 ~]/5", R: "[b3@23 d4@48 ~]/3", S: "e4",
  T: "~ b3@2 ~",
  U: "[~@4 a3 ~ [b3,e4]@23 [a3,d4]@21 ~@3 f#4@10 ~@2 a4@33 ~@3 [c4,e4]@24 ~@13 g#3@12 [c4,e4]@11 [c4,e4]@13 ~@11 [f4,a4]@5 ~ e4, ~@53 b3@45 ~@52 g3@23 ~@19, ~@53 d4@8 ~@65 [d4,f4]@24 ~@42]/8", // E5 D5 C F Dm
  V: "[g#4@5 ~@24 e4@23 ~ [c4,e4]@24 ~ [c4,e4]@22 ~@20, ~@5 d4@22 ~@93, ~@3 g4@23 ~@34]/5", // C
  W: "[~@11 a4@6 g4@5 ~ e4@6 d4@3 e4@2 d4 c4@15 ~@22]/3", X: "[~@17 [c4,e4]@11 ~ [e4,g4]@19]/2",
  Y: "[~@5 f#4@12 e4@11 ~ a4@7 ~@2 a4 a#4 a4 g4@24 ~@7]/3",
})).s("gm_alto_sax").gain(0.26)

// chords · alto sax · "sax" · soft notes
const alto_sax_soft = note("<~@22 A@5 ~@5 B ~@27 C ~@16 D@4 ~@5 B ~@54 E@5 ~@4 F ~@36>".pickRestart({
  A: "[~@23 b3@24 [a3,d4]@24 d4@11 ~ [a3,c4]@35 ~@2, ~@23 e4@23 ~@74]/5", B: "~@8 g#3 ~@15", C: "g#3@23 ~",
  D: "[e4@23 [a3,d4]@24 d4@11 ~ [a3,c4]@35 ~@2, b3@25 ~@71]/4", // D5 Am
  E: "[~@6 e4@23 [a3,d4]@24 d4@11 ~ [a3,c4]@35 ~@20, ~@6 b3@25 ~@89]/5", F: "~@14 g#3 ~@9",
})).s("gm_alto_sax").gain(0.15)

// chords · pad poly · "Synth Horns"
const pad_poly = note(`<
  ~@60 A@2 B C@3 D@3 E F G@2 H I J K L@2 M@2 N@5 O P Q@4 R ~@8 S@5 ~@8 T@3 U@2 ~ V@3 ~ T@3 U@2 ~ V@3 ~@8 W@8 X@4 Y@5 ~@7
  Z@6 ~@16
>`.pickRestart({
  A: "[~@23 b3@24 ~]/2", B: "a3", C: "[g3@12 a3@35 b3@24 ~]/3", D: "[a3@23 g3@12 f#3@6 ~ b3@18 a3@11 ~]/3",
  E: "e3@23 ~", F: "f3", G: "[g3@23 g#3@23 ~@2]/2", H: "g#3", I: "a3@11 ~", J: "a3@11 ~ g#3@12", K: "a3@11 b3@11 ~@2",
  L: "[e4@23 [a3,d4]@24 ~, b3@25 ~@23]/2", M: "[b3@11 c4@35 a3 ~]/2",
  N: "[[b3,e4]@23 [a3,d4]@21 ~@3 f#4@10 ~@2 a4@33 ~@3 [c4,e4]@24 ~, ~@47 b3@45 ~@28, ~@47 d4@8 ~@65]/5", // E5 D5 C
  O: "~ g#3, [d4,f4]", P: "[c4,e4]@11 [c4,e4]@13, g3@23 ~",
  Q: "[~@11 [f4,a4]@5 ~@2 g#4@5 ~@24 e4@23 ~ [c4,e4]@24 ~, ~@17 e4@5 ~ d4@22 ~@51, ~@12 g4@23 ~@13]/4", // F C
  R: "[c4,e4]@11 ~", // C
  S: "[~@11 [c4,e4]@11 ~ [g4,b4]@17 ~ [e4,g4]@5 ~ [f4,a4]@23 ~ [e4,g4]@11 ~ [c4,e4]@5 ~ [e4,g4]@6 ~ [f4,c5]@24, ~@95 d4@24 ~]/5", // C G Em F Em C Em F5
  T: "[~@23 [g4,e5]@6 ~ a4@5 ~ b4@6 [g4,e5]@5 ~ a4@5 ~ b4@6 g4@12, ~@29 d5@6 ~@12 d5@5 ~@20]/3", U: "[a4@47 ~]/2",
  V: "[[d4,g4]@23 [g4,b4]@48 ~]/3", // G5 G
  W: "[~@6 e4@23 [a3,d4]@24 ~ b3@11 c4@35 a3 ~ [b3,e4]@23 [a3,d4]@21 ~@3 f#4@10 ~@2 a4@31, ~@6 b3@25 ~@118 b3@43, ~@149 d4@8 ~@35]/8", // D5 E5 D5
  X: "[~@5 [c4,e4]@24 ~@13 g#3@12 [c4,e4]@11 [c4,e4]@13 ~@11 [f4,a4]@5 ~ e4, ~@30 [d4,f4]@24 g3@23 ~@19]/4", // C F Dm
  Y: "[g#4@5 ~@24 e4@23 ~ [c4,e4]@24 ~ [c4,e4]@22 ~@20, ~@5 d4@22 ~@93, ~@3 g4@23 ~@34]/5", // C
  Z: "[~@17 [c4,e4]@11 ~ [g4,b4]@17 ~ [e4,g4]@5 ~ [f4,a4]@23 ~ [e4,g4]@11 ~ [c4,e4]@5 ~ [e4,g4]@6 ~ [f4,c5]@24 ~@18, ~@101 d4@24 ~@19]/6", // C G Em F Em C Em F5
})).s("gm_pad_poly").gain(0.31)

// chords · pad poly · "Synth Horns" · soft notes
const pad_poly_soft = note("<~@63 A@3 ~ B@3 ~@3 C D ~@3 E@3 ~@5 F ~@56 G@3 ~@4 H ~@36>".pickRestart({
  A: "[~@18 d4@9 d#4@3 f4@2 g4@3 ~ d4@32 ~@4]/3", B: "[~@18 e4@9 f#4@3 a4@3 b4@3 a4@31 ~@5]/3", C: "d4", D: "d#4",
  E: "[~@23 d4@11 ~ a3@35 ~@2]/3", F: "~@8 g#3 ~@15", G: "[~@5 d4@11 ~ a3@35 ~@20]/3", H: "~@14 g#3 ~@9",
})).s("gm_pad_poly").gain(0.15)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A@6 B C D E@2 F G H@2 I J K L M N O P Q R S@2 T U V@2 W X K Y Z AA AB AC AD AE AF AG AH AI AJ@2 AK AL AM AN AO AI AP@2
  AQ AR AS AT@2 AU C D E@2 F G H@2 I J K L M N O P Q R S@2 T U AV@2 W X K Y Z AA AB AC AD AE AF AG AH AI AW@2 AX AL AM
  AN AO AI AY@2 AQ AR AS AZ BA@2 BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BV BY@6 BZ CA@3 CB
  CC@3 CD@4 CE CF@5 CG CH CI@5 CJ CK CL CM@3 CN@8 CO@2 ~
>`.pickRestart({
  A: "[~@18 c3@12 b2@11 ~ a#2@11 ~ a2@11 ~ d3@11 ~ c#3@12 c3@12 b2@11 ~ d#3@17 ~ e3@12]/6", B: "e2@23 ~",
  C: "g3 ~@2 d3 ~@2 g2@15 d2@3", D: "f2@7 g2", E: "[a2@8 ~ c3@3 f2@15 g2@3 a2@2 ~ c3@6 d3@2 ~ a2@3 f2@3]/2",
  F: "g2@19 ~@2 g2@3", G: "f2@20 ~ g2@3", H: "[a2@4 d2@7 f#2@3 g2 ~]/2", I: "~@7 f3, f2", J: "e3@11 ~ e2@11 ~",
  K: "a2@20 ~ a2@3", L: "a#2@19 ~@2 a#2@3", M: "e2@20 ~ a#2@3", N: "b2@20 ~ a#2@3", O: "b2@3 e2@2 ~",
  P: "b2@3 e3 ~@2 e3@3 b2@3 e2@11 ~, ~@5 f3@2 ~@17", Q: "g2@20 ~ f#2@2 ~", R: "f2@20 ~ g#2@2 ~",
  S: "[a2@8 ~ c3@3 f2@18 ~@3 g2@3 a2@2 ~ c3 ~@2 f3@3 f#3@3]/2", T: "g3@19 ~@2 f#3@2 ~", U: "f3@20 ~ e2@3",
  V: "[a2@8 ~ e2@3 a2@15 a3 a#3 b3@3 ~ e3@3 a3@5 ~ e3@3 e2@3]/2", W: "f2@19 ~@2 f2@3", X: "e2@12 e3@11 ~",
  Y: "g2@8 ~ g2@3 g3@5 ~ f#3@5 ~", Z: "f3@7 c3", AA: "e3@21 c3@2 ~", AB: "d3@23 ~", AC: "g2@15 d3@3 g3@5 ~",
  AD: "a2@7 ~@2 a2@2 ~ a2@7 ~@2 d3@2 ~", AE: "e3@7 ~@2 e3@2 ~ e3@8 ~ a2@3", AF: "d3@6 ~@3 d3@2 ~ d3@8 ~ a2@3",
  AG: "c3@7 ~@2 c3@2 ~ c3@8 ~ g2@3", AH: "a#2@7 ~@2 a#2@2 ~ a#2@8 ~ f2@3", AI: "a2@7 ~@2 a2@3 g2@6 ~@3 g2@3",
  AJ: "[f#2@3 ~@3 f2@5 ~@3 c3 ~ d3 f3@2 ~@2 e3@9 c3@3 f2@9 g2@5 ~]/2", AK: "a2@7 ~@2 a2@2 ~ a2@8 d3@3 ~",
  AL: "e3@7 ~@2 e3@2 ~ e3@8 ~ a2@2 ~", AM: "d3@7 ~@2 d3@2 ~ d3@8 ~ a2@3", AN: "c3@6 ~@3 c3@2 ~ c3@8 ~ g2@3",
  AO: "a#2@7 ~@2 a#2@2 ~ a#2@7 ~@2 a#2@2 ~",
  AP: "[f#2@3 ~@3 f2@6 ~@3 c3 d3 f3@2 ~@2 e3@8 ~ c3@3 f2@5 ~ f2@2 ~ g2@5 ~]/2", AQ: "a2@6 ~@3 a2@2 ~ a2@11 ~",
  AR: "e3@7 ~@2 e3@2 ~ e3@9 ~@3", AS: "d3@7 ~@2 d3@3 c#3@7 ~@5", AT: "[c3@7 ~@2 c3@2 ~ b2@10 ~ d#3@23 ~@2]/2",
  AU: "e2@2 ~ e2@2 ~ e2@2 ~ e2@2 ~ e2@2 ~ d2@2 ~ e2@2 ~ f#2@2 ~",
  AV: "[a2@8 ~ e2@3 a2@15 [a3,a#3] ~@2 b3@3 e3@3 a3@5 ~ e3@3 e2@3]/2", // A#maj7
  AW: "[f#2@3 ~@3 f2@5 ~@3 c3 d3 ~@2 f3@3 e3@9 c3@3 f2@9 g2@5 ~]/2", AX: "a2@7 ~@2 a2@2 ~ a2@8 ~ d3@3",
  AY: "[f#2@3 ~@3 f2@6 ~@3 c3 ~ d3 f3@2 ~ e3@8 ~ c3@3 f2@5 ~ f2@2 ~ g2@5 ~]/2", AZ: "c3@7 ~@2 c3@2 ~ b2@10 ~@2",
  BA: "[a#2@22 ~ b2@23 ~@2]/2", BB: "c3@7 ~@2 c3@2 ~ c3@7 ~@2 g2@3", BC: "e2@7 ~@2 e2@2 ~ e2@7 ~@2 e2@3",
  BD: "a2@6 ~@3 a2@2 ~ a2@7 ~@2 a2@3", BE: "d3@6 ~@3 d3@2 ~ d3@8 ~ a2@2 ~",
  BF: "g2@7 ~@2 g2@2 ~ g2@4 ~@2 g2@2 ~ a2@2 ~", BG: "b2@6 ~@3 b2@2 ~ b2@7 ~@2 b2@3", BH: "e3@6 ~@3 e3@2 ~ e3@8 ~ b2@3",
  BI: "a2@7 ~@2 a2@2 ~ a2@7 ~@2 a2@2 ~", BJ: "f2@11 ~ f#2@11 ~", BK: "g2@11 ~ b2@10 ~@2",
  BL: "c3@6 g2@3 a2@2 ~ c3@2 ~ e3@2 ~ g2@2 ~ f2@2 ~", BM: "e2@7 ~@2 e2@2 ~ e2@7 ~@2 e2@2 ~",
  BN: "a2@7 ~@2 a2@2 ~ a2@7 ~@2 a2@3", BO: "d3@7 ~@2 d3@2 ~ d3@7 ~@2 d3@3", BP: "g3@7 ~@2 g3@2 ~ g3@4 ~@2 g2@2 ~ a2@3",
  BQ: "b2@6 ~@3 b2@2 ~ b2@8 ~ b2@3", BR: "e3@6 ~@3 e3@2 ~ e3@8 ~ b2@2 ~", BS: "a2@6 ~@3 a2@2 ~ a2@6 ~@3 a2@2 ~",
  BT: "f2@11 ~ f#2@10 ~@2", BU: "g2@11 ~ b2@9 ~@3", BV: "c3@12 b2@11 ~", BW: "a#2@11 ~ a2@11 ~", BX: "d3@11 ~ c#3@12",
  BY: "[d#3@17 ~ e3@12 e2@23 ~ g2@20 ~ f#2@2 ~ f2@20 ~ g#2@2 ~ a2@8 ~ c3@3 f2@18 ~@3 g2@3 a2@2 ~ c3 ~@2]/6",
  BZ: "f3 f#3 g3@6", CA: "[~@3 f#3@2 ~ f3@20 ~ e2@3 a2@8 ~ e2@3 a2@15 [a3,a#3] ~@2 b3@3 e3@3 a3@5 ~]/3",
  CB: "e3 e2 f2@6", CC: "[~@3 f2@3 e2@12 e3@11 ~ a2@20 ~ a2@3 g2@8 ~ g2@3 g3@5 ~]/3",
  CD: "[f#3@5 ~ f3@21 c3@3 e3@21 c3@2 ~ d3@23 ~ g2@15 d3@3]/4", CE: "g3@5 ~ a2@7 ~@2 a2@2 ~ a2@6",
  CF: "[~@3 d3@2 ~ e3@7 ~@2 e3@2 ~ e3@8 ~ a2@3 d3@6 ~@3 d3@2 ~ d3@8 ~ a2@3 c3@7 ~@2 c3@2 ~ c3@8 ~ g2@3 a#2@7 ~@2 a#2@2 ~ a#2@8 ~ f2@3 a2@7 ~@2 a2@3 g2@6]/5",
  CG: "~@3 g2@3 f#2@3 ~@3 f2@5 ~@3 c3 d3 ~@2", CH: "f3 e3@3 c3 f2@3",
  CI: "[g2@5 ~ a2@7 ~@2 a2@2 ~ a2@8 ~ d3@3 e3@7 ~@2 e3@2 ~ e3@8 ~ a2@2 ~ d3@7 ~@2 d3@2 ~ d3@8 ~ a2@3 c3@6 ~@3 c3@2 ~ c3@8 ~ g2@3 a#2@7 ~@2 a#2@2 ~ a#2@6]/5",
  CJ: "~@3 a#2@2 ~ a2@7 ~@2 a2@3 g2@6", CK: "~@3 g2@3 f#2@3 ~@3 f2@6 ~@3 c3 ~ d3",
  CL: "f3@2 ~ e3@8 ~ c3@3 f2@5 ~ f2@2 ~",
  CM: "[g2@5 ~ a2@6 ~@3 a2@2 ~ a2@11 ~ e3@7 ~@2 e3@2 ~ e3@9 ~@3 d3@7 ~@2 d3@3 c#3@6]/3",
  CN: "[~@6 c3@7 ~@2 c3@2 ~ b2@10 ~@2 a#2@22 ~ b2@23 ~@2 c3@12 b2@11 ~ a#2@11 ~ a2@11 ~ d3@11 ~ c#3@12 c3@12 b2@11 ~ d#3@17 ~]/8",
  CO: "[e3@12 e2@23 ~@13]/2",
})).s("gm_acoustic_bass").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B C ~ D@38 E F D@6 E F D@44 E F D@6 E F D@4 G ~ D@8 ~@2 D@8 ~@2 H@4 ~@2 I J@21 K L I J@5 K L I J@3 M ~ C A@3 N O
  ~@2
>`.pickRestart({
  A: "x!2", B: "x ~ x!2", C: "~ x", D: "x ~@2 x!2 ~@2 x", E: "x ~ x ~@4 x", F: "~@3 x ~@4",
  G: "x ~@8 x ~@2 x ~@2 x!2 ~@7", H: "~ x ~ x", I: "~@2 x ~@2 x!2 ~", J: "~ x!2 ~@2 x!2 ~", K: "~ x!2 ~ x ~@3",
  L: "~ x ~@3 x ~@2", M: "~@3 x ~@2 x ~@8 x ~@2 x ~@2 x!2 ~", N: "x!2 ~@2", O: "x",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A@15 B A@15 C A@6 D E A@6 D E A@5 F A@15 B A@15 C A@6 D E A@6 D E A@4 G H I A@7 ~@2 A@8 ~@8 J K@14 L J K@5 M N J
  K@5 M N J K@3 O P ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x ~@2", C: "~ x!2 ~", D: "x ~ x ~@4 x", E: "~@3 x ~ x ~@2", F: "x!6 ~@2",
  G: "x ~@8 x ~@7 x ~@4 x!2", H: "~ x ~@6", I: "x!2 ~ x", J: "~ x", K: "x!2", L: "x ~ x!2", M: "x!3 ~",
  N: "~ x ~@3 x ~ x", O: "x ~@5 x ~@8 x ~@7 x", P: "~@4 x!2 ~@3 x ~@14",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@22 A ~@15 B ~@6 C D ~@6 C D ~@5 E ~@15 A ~@15 B ~@6 C D ~@6 C D ~@5 F ~@42 G ~@5 H I G ~@5 H I G ~@4 J G ~@7
>`.pickRestart({
  A: "~@20 x!2 ~@2", B: "~@19 x ~ x ~@2", C: "~@16 x!2 ~@6", D: "~@4 x!2 ~@13 x ~ x ~@2",
  E: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@7 x!2 ~@2", F: "~@15 x!2 ~@2 x ~ x ~@2", G: "~ x ~ x ~@20", H: "~@22 x!2",
  I: "~@10 x!2 ~@12", J: "~@21 x!2 ~",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@2 C D E ~ F@8 G F@7 G F@7 G F@7 ~@6 H I ~@6 H I ~@6 G F@7 G F@7 G F@7 G F@7 ~@6 H I ~@6 H I ~@26 J@2 C ~@3 K F@7 L
  F@7 M ~@5 N I O ~@5 N I O ~@5 P Q C@2 R O ~@2
>`.pickRestart({
  A: "~@18 x ~@2 x ~ x", B: "x ~@2 x ~ x!2 ~ x ~@2 x!2 ~@2 x ~ x!2 ~@2 x ~ x",
// … 24 more lines

More by Steely Dan