Strudelify
Aja cover art

Aja

Aja

Steely Dan

KeyE minorTempo110 bpm
0:00/0:00
// Aja — Steely Dan
// 110 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 33, 4/4 at bar 33, 3/4 at bar 62, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 3 "Lead Gtr" named as a guitar, played on overdriven guitar (its lead 8 bass lead patch is not one)
// note: Full arrangement: all 216 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// other · tenor sax
const tenor_sax = note("<~@136 A B C D E@2 F G H I J K L M N O@2 P@2 Q R S T U@2 V W X Y Z AA ~@49>".pickRestart({
  A: "~@12 f#5@2 ~ e5", B: "f#5@4 ~@2 b5 f#5@4 ~ e5 ~ f#5@2", C: "~@2 b5 ~@7 f#5 ~ e5 ~ f#5@2",
  D: "~@2 c#6 ~ f#5@3 ~ e5 ~ f#5@3 ~ c#6 ~",
  E: "[~@5 c#6 ~ b5 f#5@3 ~@3 b5@6 b5 a#5 g#5 [e5,f#5] [b4,c#5,d#5] [f#4,g#4,a#4] [d#4,e4] ~@5]/2", F: "~@3 d#6",
  G: "~@2 b5@3 ~ g#5@5 ~ f#5 ~ d#5 ~", H: "c#5@3 ~@6 e5 g5 a5 g5@2 ~ g#5",
  I: "f5 c#5 a#4 ~@3 c#6 ~ a#5@2 ~ f#5@2 f#5@2 ~", J: "f5@2 ~ d#5@2 ~@9 d#6 [a#5,c6]",
  K: "g5 ~@5 c#6 [a5,b5] f#5 ~ c6 [g#5,a#5] f5 ~@3", L: "b5 [g5,a5] e5 ~@13", M: "~@4 g#4@5 ~ a#4@6",
  N: "b4@4 a#4@3 ~@9", O: "[~@8 e5@19 ~@5]/2", P: "[~@4 f#5@2 ~ e5 f#5@4 ~@2 b5 f#5@4 ~ e5 ~ f#5@3 ~ b5 ~@5]/2",
  Q: "~@2 f#5 ~ e5 ~ f#5@3 ~ c#6 ~ f#5@3 ~", R: "e5 ~ f#5@3 ~ c#6 ~@6 c#6 ~ b5",
  S: "f#5@3 ~@3 b5@6 b5 a#5 g#5 [e5,f#5]", T: "[b4,c#5,d#5] [f#4,g#4,a#4] [d#4,e4] ~@13",
  U: "[~@4 d#6@5 ~ b5@3 ~ g#5@5 ~ f#5 ~ d#5 ~ c#5@3 ~@5]/2", V: "~ e5 g5 a5 g5@2 ~ g#5 f5 c#5 a#4 ~@3 c#6 ~",
  W: "a#5@2 ~ f#5@2 f#5@2 ~ f5@2 ~ d#5@2 ~@3", X: "~@6 d#6 [a#5,c6] g5 ~@5 c#6 [a5,b5]",
  Y: "f#5 ~ c6 [g#5,a#5] f5 ~@3 b5 [g5,a5] e5 ~@5", Z: "~@3 g#4", AA: "~@2 a#4@6 b4@4 a#4@3 ~",
})).s("gm_tenor_sax").gain(0.35)

// chords · acoustic guitar steel · "Rhythm Gtr"
const acoustic_guitar_steel = note(`<
  ~@2 A B ~@2 A B C@2 D E F@2 G@2 H@2 I@2 J@2 K L M N O@2 P@2 Q R@5 S T C U V W F X G Y H Z I AA J AB AC AD M AE O AF P
  AG@7 AH@10 AI AJ@2 AK@2 AL@3 AM AN AO@5 AP@2 AQ AR@2 AS@4 AT AU@8 AV AW AX AY AZ@2 BA BB@3 BC BD@2 BE BF BG BH@8 BI@8
  BJ@2 BK BL@4 BM@8 BN@2 BO@2 BP@7 BQ@8 BR BS Y H Z I AA J AB AC BT@2 BU O AF P BV@6 BW@2 BX BY BW@2 BX BY BW@2 BX BY
  BW@2 BX BY BW@2 ~
>`.pickRestart({
  A: "~@2 c#6 ~ a#5 ~ g#5@3 ~ g#5@3 ~ f#5 ~", B: "f5@2 f#5 ~ f5 ~ d#5@7 ~@3",
  C: "[b3,d#4,f#4,a#4]@3 ~ [b3,d#4,f#4,a#4]@3 ~ [b3,d#4,f#4,a#4]@3 ~ [b3,d#4,f#4,a#4]@3 ~", // Bmaj7
  D: "[a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~", // Am
  E: "[f#3,b3,d#4]@3 ~ [f#3,b3,d#4]@3 ~ [f#3,g#3,b3]@3 ~ [f#3,g#3,b3]@3 ~", // B G#m7
  F: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~", // A
  G: "[c4,e4,g4,b4]@3 ~ [c4,e4,g4,b4]@3 ~ [c4,e4,g4,b4]@3 ~ [c4,e4,g4,b4]@3 ~", // Cmaj7
  H: "[c#4,e4,f#4,a4]@3 ~ [c#4,e4,f#4,a4]@3 ~ [c#4,e4,f#4,a4]@3 ~ [c#4,e4,f#4,a4]@3 ~", // F#m7
  I: "[d4,f#4]@3 ~ [d4,f#4]@3 ~ [d4,f#4]@3 ~ [d4,f#4]@3 ~", // D
  J: "[d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~", // G
  K: "[c#4,e4]@3 ~ [c#4,e4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~", // C#m A#m
  L: "[a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~", // A#m
  M: "[c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~", // G#7
  N: "[c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@7 ~", // G#7
  O: "[d4,g#4,b4]@3 ~ [d4,g#4,b4]@3 ~ [d4,g#4,b4]@3 ~ [d4,g#4,b4]@3 ~", // G#dim
  P: "[c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~", Q: "[a3,c4,e4]@7 ~ [a3,b3,d4]@7 ~",
  R: "[[c4,f4,g4]@8 ~@4 [b3,e4,f#4]@27 ~@5 [f#4,a#4,c#5]@27 ~@7 c#6 ~]/5", S: "a#5 ~ g#5@3 ~ g#5@3 ~ f#5 ~ f5@2 f#5 ~",
  T: "f5 ~ d#5@7 ~@3 [b3,d#4,f#4,a#4]@3 ~", // Bmaj7
  U: "[b3,d#4,f#4,a#4]@3 ~ [b3,d#4,f#4,a#4]@3 ~ [b3,d#4,f#4,a#4]@3 ~ [a3,c4,e4]@3 ~", // Bmaj7 Am
  V: "[a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [f#3,b3,d#4]@3 ~", // Am B
  W: "[f#3,b3,d#4]@3 ~ [f#3,g#3,b3]@3 ~ [f#3,g#3,b3]@3 ~ [a3,c#4,e4]@3 ~", // B G#m7 A
  X: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [c4,e4,g4,b4]@3 ~", // A Cmaj7
  Y: "[c4,e4,g4,b4]@3 ~ [c4,e4,g4,b4]@3 ~ [c4,e4,g4,b4]@3 ~ [c#4,e4,f#4,a4]@3 ~", // Cmaj7 F#m7
  Z: "[c#4,e4,f#4,a4]@3 ~ [c#4,e4,f#4,a4]@3 ~ [c#4,e4,f#4,a4]@3 ~ [d4,f#4]@3 ~", // F#m7 D
  AA: "[d4,f#4]@3 ~ [d4,f#4]@3 ~ [d4,f#4]@3 ~ [d4,g4,b4]@3 ~", // D G
  AB: "[d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [c#4,e4]@3 ~", // G C#m
  AC: "[c#4,e4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~", // C#m A#m
  AD: "[a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~", // A#m G#7
  AE: "[c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@7 ~ [d4,g#4,b4]@3 ~", // G#7 G#dim
  AF: "[d4,g#4,b4]@3 ~ [d4,g#4,b4]@3 ~ [d4,g#4,b4]@3 ~ [c4,e4,g4]@3 ~", // G#dim C
  AG: "[[c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [a3,c4,e4]@7 ~ [a3,b3,d4]@7 ~ [c4,f4,g4]@8 ~@4 [b3,e4,f#4]@27 ~@5 [a4,c#5,e5]@4 ~@2 [a4,d5,f#5]@21 ~@11 [e4,a4,c#5]@2]/7", // C Am Bm7 Csus4 Bsus4 A D A
  AH: "~@2 [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@2", AI: "~@2 [g4,b4,d5]@5 ~ [a4,c#5,e5]@5 ~@3",
  AJ: "~@6 [d4,g4,b4]@3 ~ [f4,a4,c5]@5 ~", AK: "[b4,e5,g#5,b5] ~@5 [b4,e5,g#5,b5]@7 ~@3",
  AL: "~@6 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~", AM: "[a4,c#5,e5]@5 ~@9 [d4,g4,b4]@2",
  AN: "~@2 [f4,a4,c5]@5 ~@7 [d4,g4,b4]@2", // F G
  AO: "[~@2 [f4,a4,c5]@5 ~ [b4,g#5,b5] ~@5 [b4,e5,g#5,b5]@7 ~@3 [b4,e5,g#5,b5] ~@5 [b4,e5,g#5,b5]@7 ~@3 [g4,b4,d5,g5]@27 ~@9 [d5,e5,g5]@4]/5", // F E G Em7
  AP: "[~@2 [c5,e5,f#5]@5 ~ [b4,c5,e5]@4 ~@2 [a4,b4,d5]@7 ~@7 [d5,e5,g5]@4]/2", AQ: "~@2 [c5,d5,f#5]@5 ~ [b4,c5,e5]@8",
  AR: "[[a4,b4,d5]@27 ~@5]/2", // Bm7
  AS: "[[f#4,a#4,c#5]@4 ~@2 [g4,b4,d5]@6 ~@2 [a4,c#5,e5]@6 ~@2 [g4,b4,d5]@5 ~ [b4,e5,g#5,b5]@21 ~@3 [d5,g5,b5]@5 ~@3 [c5,f5,a5]@4]/4", // F# G A G E G F
  AT: "~@4 [a5,c6,e6]@5 ~@3 [g5,b5,d6]@4", // Am G
  AU: "[~@10 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@7 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~ [a4,c#5,e5]@5 ~@7]/8", // A G A G A G A G …
  AV: "~@2 [d4,g4,b4]@3 ~ [f4,a4,c5]@5 ~@5", AW: "~@2 [d4,g4,b4]@3 ~ [f4,a4,c5]@5 ~ [b4,e5,g#5,b5] ~@3",
  AX: "~@2 [b4,e5,g#5,b5]@7 ~@3 [b4,e5,g#5,b5] ~@3", AY: "~@2 [b4,e5,g#5,b5]@7 ~@7",
  AZ: "~@2 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~@5", BA: "~@2 [e4,a4,c#5]@3 ~ [g4,b4,d5]@5 ~ [a4,c#5,e5]@4",
  BB: "[~@10 [d4,g4,b4]@3 ~ [f4,a4,c5]@5 ~@7 [d4,g4,b4]@3 ~ [f4,a4,c5]@5 ~ [b4,g#5,b5] ~@5 [b4,e5,g#5,b5]@6]/3", // G F G F E
  BC: "~@4 [b4,e5,g#5,b5] ~@5 [b4,e5,g#5,b5]@6", BD: "[~ [g4,b4,d5,g5]@7]/2", BE: "~@4 e5@3 [c5,e5,f#5], ~ [d5,g5]",
  BF: "~@2 b4@3 [a4,b4]@3, ~ [c5,e5]@3", BG: "~@7 c5, ~ [d5,e5,g5]",
  BH: "[~@44 [f#4,a#4,c#5]@4 ~@56 [f5,a5]@5 ~@3 [a5,c6,e6]@5 ~@3 [b5,d6]@5 ~@3, ~ e5@29 g5@2, ~ c5@17 b5@6 g5@2 c5@6, ~@2 b4@23 [g4,b4]@39, ~@12 a4@39 ~@7 [a4,c#5]@70]/8", // F# F Am Bm G A
  BI: "[b5@5 ~@3 [f5,a5]@5 ~@11 f4@5 ~@3 [a#4,d#5,f5]@11 ~@5 [a#4,d#5,f5] ~@5 a4@12 a4@8 [a4,d5,e5]@12 [a4,d5,e5]@4 [a4,d5,e5]@12 [a4,d5,e5]@4 [a4,d5,e5]@12 [a4,c#5,d5,e5]@10, g5, d5@3 c5@13, ~@8 c5@8 e5@8 a4@8 d5@16 d5@6 [c#5,d5,e5]@20 c#5 ~@11 c#5 ~@3 c#5 ~@11 c#5 ~@3 c#5 ~@21, ~ [g4,b4]@7]/8", // F A#sus4 Asus4 A C#m G
  BJ: "[~ [a4,e5]@4 [a4,e5]@6 [a4,e5]@2 [a4,e5]@3, ~@2 c#5@5 ~@3 [c#5,d5] ~@11 [c#5,d5] ~@3 [c#5,d5] ~@5]/2", // A5 Dmaj7
  BK: "~@3 [a4,e5]@2 [a4,e5]@3, ~@6 [c#5,d5] ~@3 [c#5,d5] ~@5", // A5 Dmaj7
  BL: "[~@22 g#5@22 ~@15 f#5@2 f5@3, ~@3 [a#4,d5]@29, ~@6 f5@55 ~@3, ~@7 [b4,d#5]@25, ~@7 f#5@4 e5@21]/4", // A# B
  BM: "[~@8 [g#4,c#5] ~@47 [d5,d#5,f5]@16 d#5@6 [a4,c#5,d5] ~ [a4,c#5,d5,e5]@5 ~@5 [a4,c#5,d5,e5] ~@3 [a4,c#5,d5,e5] ~@3 [a4,c#5,d5,e5] ~@11 [a4,c#5,d5,e5] ~@3 [a4,c#5,d5,e5] ~@11 [a4,c#5,d5,e5] ~, e5@53 ~@75, ~ f5@6 ~@9, ~@7 [f#4,g#4]@57, ~@5 b4@11]/8", // C#5 Dm Dmaj7 A F#sus2
  BN: "[~@2 [a4,c#5,d5,e5] ~@11 [a4,c#5,d5,e5]@12 [a4,c#5,d5,e5]@5 ~]/2", // A
  BO: "~@2 [a4,c#5,d5,e5] ~@11 [a4,c#5,d5,e5] ~", // A
  BP: "[~@2 [a4,c#5,d5,e5] ~@27 g#5@22 ~@15 f#5@2 ~@11 c#5 ~@5 g#4@26, ~ [a#4,d5]@7, ~@14 f5@55 f5@12 ~@31, ~@11 b4@45, ~@11 f#5@4 e5@21 e5@20]/7", // A A#
  BQ: "[[c5,f5]@8 ~@52 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [f#3,b3,d#4]@3 ~ [f#3,b3,d#4]@3 ~ [f#3,g#3,b3]@3 ~ [f#3,g#3,b3]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~, ~@3 [b4,e5]@29]/8", // F5 B Am B G#m7 A E5
  BR: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [c4,e4,g4]@3 ~", // A C
  BS: "[c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4,b4]@3 ~", // C Cmaj7
  BT: "[[a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [a#3,c#4]@3 ~ [c4,d#4,f#4]@3 ~ [c4,d#4,f#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~, ~@12 g#4@7 ~@13]/2", // A#m Cdim G#7
  BU: "[c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [c4,d#4,f#4,g#4]@3 ~ [d4,g#4,b4]@3 ~", // G#7 G#dim
  BV: "[[c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~@17 f4@8 ~@4 [e4,f#4]@11 ~@5 b4@8 ~@6 d5@17 ~@3 [a4,c5,d#5,e5] ~@5, ~@12 c4@24 ~@20 e5@31 ~@9, ~@20 b3@31 ~@19 c5@13 ~@13]/6", // C Esus2 Am
  BW: "~@6 [a4,c5,d#5,e5] ~@3 [a4,c5,d#5,e5] ~@5", BX: "~@6 [a4,c5,d#5,e5] ~ [a4,c5,d5,e5]@5 ~@3",
  BY: "~@2 [a4,c5,d5,e5] ~@3 [a4,c5,d5,e5] ~@3 [a4,c5,d#5,e5] ~@5", // Am
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.1)

// other · epiano1 · "ElecPiano"
const epiano1 = note(`<
  ~@2 A B ~@2 A B ~@2 C ~@2 D E F G H ~@14 I@2 ~ J K L ~ M N ~ O@2 P@2 Q@2 ~@13 R S@2 ~@9 T U V W X ~ Y ~ Z AA AB AC ~
  AD ~ AE AF ~ AG@2 AH ~@11 AI AJ AK AL ~ AM AN ~ AO AP AQ AR ~ AS ~ AT AU ~ AV AW@2 ~@45 M N ~ AX@2 P@2 Q@2 ~@13 R AY
  ~@21
>`.pickRestart({
  A: "~@2 a#4 ~ f#5 ~ a#4 ~ g#4 ~ f5@3 ~ g#4 ~", B: "g#4 ~ f5 ~ f#4 ~ d#5@7 ~@3", C: "~@2 e6 [c#6,d6] a5@9 ~@3",
  D: "a3@11 ~@5", E: "~@6 a5 [g5,g#5] b5@4 ~@2 a4 [f#4,g4], ~@8 e5 ~@7", F: "b4@11 ~@5, e4 ~@15",
  G: "~@6 b5 e5 e6 ~ e5 b4 e5 ~ b4 e4", H: "b4@11 ~@5", I: "[~@2 e4 [f#4,a4] d5@19 ~@9, ~@4 b4 ~@27]/2",
  J: "~@14 a#4 ~", K: "f#5 ~ a#4 ~ g#4 ~ f5@3 ~ g#4 ~ g#4 ~ f5 ~", L: "f#4 ~ d#5@7 ~@7", M: "~@14 e6 [c#6,d6]",
  N: "a5@9 ~@7", O: "[~@2 e6 [c#6,d6] a5 ~ e5 [c#5,d5] a4 ~ e4 [c#4,d4] a3@11 ~@9]/2",
  P: "[~@2 a5 [g5,g#5] b5@4 ~@2 a4 [f#4,g4] b4@11 ~@9, ~@4 e5 ~@7 e4 ~@19]/2", // G#maj7 Gmaj7
  Q: "[~@2 b5 e5 e6 ~ e5 b4 e5 ~ b4 e4 b4@11 ~@9]/2", R: "~@14 e4 [f#4,a4]", S: "[d5@19 ~@13, b4 ~@31]/2",
  T: "~@14 e5 ~", U: "e5 ~ e5 ~ e5 ~ e5 ~ e5 ~@3 d5 ~ c#5 ~", V: "~@2 d5 ~@5 d5 ~@3 c#5 ~ b4 ~",
  W: "~@2 b4 ~@5 d5 ~@3 c#5 ~@3", X: "b4 ~@15", Y: "e5 ~@3 e5 ~ f#5 ~@9", Z: "~@6 e5 ~ e5 ~ e5 ~ e5 ~ e5 ~",
  AA: "e5 ~@3 d5 ~ c#5 ~@3 d5 ~@5", AB: "d5 ~@3 c#5 ~ b4 ~@3 b4 ~@5", AC: "d5 ~@3 c#5 ~@3 b4 ~@7",
  AD: "~@8 e5 ~@3 e5 ~ f#5 ~", AE: "~@8 d5 ~@5 c#5 ~", AF: "~@4 a4 ~@11",
  AG: "[~@8 [b3,c4,e4]@4 ~@2 [a3,b3,d4]@7 ~@7 [d4,e4,g4]@4]/2", AH: "~@2 [c4,d4,f#4]@5 ~ [b3,c4,e4]@5 ~@3",
  AI: "~@10 e5 ~ e5 ~ e5 ~", AJ: "e5 ~ e5 ~ e5 ~@3 d5 ~ c#5 ~@3 d5 ~", AK: "~@4 d5 ~@3 c#5 ~ b4 ~@3 b4 ~",
  AL: "~@4 d5 ~@3 c#5 ~@3 b4 ~@3", AM: "~@12 e5 ~@3", AN: "e5 ~ f#5 ~@13", AO: "~@2 e5 ~ e5 ~ e5 ~ e5 ~ e5 ~ e5 ~@3",
  AP: "d5 ~ c#5 ~@3 d5 ~@5 d5 ~@3", AQ: "c#5 ~ b4 ~@3 b4 ~@5 d5 ~@3", AR: "c#5 ~@3 b4 ~@11",
  AS: "~@4 e5 ~@3 e5 ~ f#5 ~@5", AT: "~@4 d5 ~@5 c#5 ~@5", AU: "a4 ~@15", AV: "~@2 [b3,c4,e4]@2 ~ [a3,b3,d4]@3",
  AW: "[~@8 [d4,e4,g4]@4 ~@2 [c4,d4,f#4]@5 ~ [b3,c4,e4]@5 ~@7]/2", AX: "[~@12 a3@11 ~@9]/2", AY: "d5, b4 ~@15",
})).s("gm_epiano1").gain(0.35)

// chords · piano
const piano = note(`<
  A@2 B@2 C D E@2 F@3 G H@2 I@2 J@2 K L M@2 N@2 O P Q R S T U V@3 W X@3 Y Z@2 AA@8 AB AC AD AE AF AG AH AI@2 AJ@2 AK@3
  AL@2 AM AN@10 AO AP@2 AQ@2 AR@3 AS AT AU@5 AV@2 AW AX AY AZ@4 BA BB@8 BC BD BE BF BG@2 BH BI@3 BJ BK@2 BL@2 BM@2 BN@2
  BO BP@2 BQ BR BQ BS BT BU BV BW@2 BX BV BW@2 BY@3 BZ CA@3 CB@2 CC CD@2 CE@2 CD@2 CF@3 CG CH CI@2 CJ@3 Y Z@2 AA@8 AB AC
  AD AE AF AG AH AI@2 AJ@2 CK@3 BX BV BW@2 CL BV BW@2 CL BV BW@2 CL BV BW@2 CL BV BW@2 ~
>`.pickRestart({
  A: "[[f#3,a#3,c#4,d#4]@5 ~@5 f#4 ~ f#5 ~ c#5 d#5@5 ~@2 a#4@3 ~ f#4@3 ~ c#4 ~]/2", B: "[[f#3,a#3,d#4]@27 ~@5]/2",
  C: "[f#3,a#3,c#4,d#4]@5 ~@5 f#5@3 ~ c#5 [c5,c#5]", D: "a#4@4 ~@2 f#4 ~ c#4@2 ~ f#4@2 c#4@2 c#4",
  E: "[d#4@21 ~@5 f#3 ~ f#4 ~ f#3 ~]/2",
  F: "[[a#3,d#4] ~ b3 ~ a#3 ~ [g#3,d#4]@6 ~@2 [a#3,d#4]@5 ~ [b3,d#4]@3 ~ c#4 ~ d#4 ~@3 [a3,c4,e4]@10 ~@4 [a3,c4,e4]@3 ~]/3", // D#5 G#5 D#5 B Am
  G: "[f#3,b3,d#4]@5 ~@3 [f#3,g#3,b3]@5 ~@3", H: "[[a3,c#4,e4]@24 ~@4 d4 ~@3]/2", I: "[[g3,b3,e4]@25 ~ g4@3 ~ d4 ~]/2",
  J: "[[a3,c#4,e4]@27 ~@5]/2", K: "[d4,f#4]@8 ~@4 [c#4,e4]@3 ~", L: "[b3,d4]@3 ~ [a3,c#4]@3 ~ [b3,d4] ~ [c#4,e4]@5 ~",
  M: "[[b3,d4]@4 ~@2 [a3,c#4]@5 ~ [g3,b3]@9 ~@3 [g3,b3]@2 ~ [a3,c#4]@2 [b3,d4]@2 ~]/2", // Bm A G A Bm
  N: "[[c#4,e4]@5 ~@3 [a#3,c#4]@11 ~ [c4,d#4]@3 ~ [c#4,e4]@4 ~@2 [c4,d#4] ~]/2", // C#m A#m Cm C#m Cm
  O: "[c4,d#4]@5 ~@3 [f#3,a#3,c4] ~ [f#3,a#3,c#4] ~@3 [f#3,a#3,d#4] ~", // Cm Cm7b5 F# D#m
  P: "~@2 [f#3,a#3,c#4] ~@3 c4 c#4 [f#3,a#3,c4]@5 ~@3", Q: "[d4,f#4]@5 ~@3 [b3,d4]@3 ~ d5 ~ [a4,f#5]@2",
  R: "~ [f#4,d5]@6 ~ [g3,b3]@2 ~ [b3,d4]@2 [d4,f#4]@2 ~", S: "[d4,f#4]@5 ~@3 [c4,e4]@2 ~ [f#4,a4]@2 [d4,f#4]@2 ~",
  T: "[c4,e4]@8 ~@4 [c4,e4]@3 ~", U: "[a3,c4,e4]@5 ~@3 [a3,b3,d4]@5 ~@3",
  V: "[[c4,f4,g4]@8 ~@4 [b3,e4,f#4]@21 ~@5 a#3@3 ~ f#4 ~ [f#3,a#3,c#4]@4]/3", W: "~@6 g#4 ~ f#5 ~ [g#4,c#5] d#5@5",
  X: "[~@2 [d#4,g#4]@3 ~ [c#4,f#4]@3 ~ c#4 ~ [f#3,a#3,c#4,d4]@21 ~@5 f#3 ~ f#4 ~ f#3 ~ [a#3,d#4] ~ b3 ~]/3", // G#5 F#5 F# D#5
  Y: "a#3 ~ [g#3,d#4]@6 ~@2 [a#3,d#4]@5 ~", // G#5 D#5
  Z: "[[b3,d#4]@3 ~ c#4 ~ d#4 ~@3 [a3,c4,e4]@10 ~@4 [a3,c4,e4]@3 ~ [f#3,b3,d#4]@4]/2", // B Am B
  AA: "[~@4 [f#3,g#3,b3]@5 ~@3 [a3,c#4,e4]@24 ~@4 d4 ~@3 [g3,b3,e4]@25 ~ g4@3 ~ d4 ~ [a3,c#4,e4]@27 ~@5 [d4,f#4]@8 ~@4 [c#4,e4]@3 ~ [b3,d4]@3 ~]/8", // G#m7 A Em A D C#m Bm
  AB: "[a3,c#4]@3 ~ [b3,d4] ~ [c#4,e4]@5 ~ [b3,d4]@4", AC: "~@2 [a3,c#4]@5 ~ [g3,b3]@8",
  AD: "~@4 [g3,b3]@2 ~ [a3,c#4]@2 [b3,d4]@2 ~ [c#4,e4]@4", AE: "~@4 [a#3,c#4]@11 ~",
  AF: "[c4,d#4]@3 ~ [c#4,e4]@4 ~@2 [c4,d#4] ~ [c4,d#4]@4", // Cm C#m Cm
  AG: "~@4 [f#3,a#3,c4] ~ [f#3,a#3,c#4] ~@3 [f#3,a#3,d#4] ~@3 [f#3,a#3,c#4] ~", // Cm7b5 F# D#m F#
  AH: "~@2 c4 c#4 [f#3,a#3,c4]@5 ~@3 [d4,f#4]@4", // Cm7b5 D
  AI: "[~@4 [b3,d4]@3 ~ d5 ~ [a4,f#5]@3 [f#4,d5]@6 ~ [g3,b3]@2 ~ [b3,d4]@2 [d4,f#4]@2 ~ [d4,f#4]@4]/2", // Bm D G Bm D
  AJ: "[~@4 [c4,e4]@2 ~ [f#4,a4]@2 [d4,f#4]@2 ~ [c4,e4]@8 ~@4 [c4,e4]@3 ~ [a3,c4,e4]@4]/2", // C F#m D C Am
  AK: "[~@4 [a3,b3,d4]@5 ~@3 [c4,f4,g4]@8 ~@4 [b3,e4,f#4]@21 ~@3]/3", // Bm7 Csus4 Bsus4
  AL: "[~@2 a#3@3 ~ f#4 ~ [a4,c#5,e5]@4 ~@2 [a4,d5,f#5]@13 ~@3 e3 ~]/2", AM: "~@2 e3 ~ g3@3 ~@7 [e3,a3,c#4]@2",
  AN: "~@2 [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@2", AO: "~@2 [g3,b3,d4]@5 ~ [a3,c#4,e4]@5 ~@3",
  AP: "~@6 [d3,g3,b3]@3 ~ [f3,a3,c4]@5 ~", AQ: "[b3,e4,g#4,b4] ~@5 [b3,e4,g#4,b4]@7 ~@3",
  AR: "~@6 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~", AS: "[a3,c#4,e4]@5 ~@9 [d3,g3,b3]@2",
  AT: "~@2 [f3,a3,c4]@5 ~@7 [d3,g3,b3]@2", // F G
  AU: "[~@2 [f3,a3,c4]@5 ~ [b3,e4,g#4,b4] ~@5 [b3,e4,g#4,b4]@7 ~@3 [b3,e4,g#4,b4] ~@5 [b3,e4,g#4,b4]@7 ~@3 [g3,b3,d4]@27 ~@9 [d4,e4,g4]@4]/5", // F E G Em7
  AV: "[~@2 [c4,d4,f#4]@5 ~ [b3,c4,e4]@4 ~@2 [a3,b3,d4]@7 ~@7 [d4,e4,g4]@4]/2", // D7 Cmaj7 Bm7 Em7
  AW: "~@2 [c4,d4,f#4]@5 ~ [b3,c4,e4]@5 ~@3", AX: "[b3,c4,e4]@5 ~@5 a3 [b3,c4] d4 ~ d4 [b3,c4]", AY: "a3@11 ~@5",
  AZ: "[[f#3,a#3,c#4]@4 ~@2 [g3,b3,d4]@6 ~@2 [a3,c#4,e4]@6 ~@2 [g3,b3,d4]@5 ~ e4@21 ~@3 [d4,g4,b4]@5 ~@3 [c4,f4,a4]@4]/4", // F# G A G F
  BA: "~@4 [f4,a4,c5]@5 ~@3 [d4,g4,b4]@4", // F G
  BB: "[~@10 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@7 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@5 ~@7]/8", // A G A G A G A G …
  BC: "~@2 [d3,g3,b3]@3 ~ [f3,a3,c4]@5 ~@5", BD: "~@2 [d3,g3,b3]@3 ~ [f3,a3,c4]@5 ~ [b3,e4,g#4,b4] ~@3",
  BE: "~@2 [b3,e4,g#4,b4]@7 ~@3 [b3,e4,g#4,b4] ~@3", BF: "~@2 [b3,e4,g#4,b4]@7 ~@7",
  BG: "~@2 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~@5", BH: "~@2 [e3,a3,c#4]@3 ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@4",
  BI: "[~@10 [d3,g3,b3]@3 ~ [f3,a3,c4]@5 ~@7 [d3,g3,b3]@3 ~ [f3,a3,c4]@5 ~ [b3,e4,g#4,b4] ~@5 [b3,e4,g#4,b4]@6]/3", // G F G F E
  BJ: "~@4 [b3,e4,g#4,b4] ~@5 [b3,e4,g#4,b4]@6", BK: "[~@4 [g3,b3,d4]@27 ~]/2",
  BL: "[~@8 [d4,e4,g4]@5 ~ [c4,d4,f#4]@5 ~ [b3,c4,e4]@4 ~@2 [a3,b3,d4]@6]/2", // Em7 D7 Cmaj7 Bm7
  BM: "[~@8 [d4,e4,g4]@4 ~@2 [c4,d4,f#4]@5 ~ [b3,c4,e4]@5 ~@3 [b3,c4,e4]@4]/2", // Em7 D7 Cmaj7
  BN: "[~@6 a3 [b3,c4] d4 ~ d4 [b3,c4] a3@11 ~@5 [f#3,a#3,c#4]@4]/2", BO: "~ [g3,b3,d4]@3 ~ [a3,c#4,e4]@3",
  BP: "[~@2 [g3,b3,d4]@5 ~ e4@21 ~@3]/2", BQ: "[d4,g4,b4]@5 ~@3 [c4,f4,a4]@5 ~@3",
  BR: "[f4,a4,c5]@5 ~@3 [d4,g4,b4]@5 ~@3", BS: "[g3,b3,e4]@5 ~@3 [f3,a3,c4]@5 ~@3", BT: "[a#3,d4,d#4,f4]@11 ~@5",
  BU: "[a#3,d4,d#4,f4] ~@5 [a3,c#4,d4,e4]@7 ~@3", BV: "~@2 [a3,c#4,d4,e4] ~@3 [a3,c#4,d4,e4] ~@3 [a3,c#4,d4,e4] ~@5",
  BW: "~@6 [a3,c#4,d4,e4] ~@3 [a3,c#4,d4,e4] ~@5", BX: "~@6 [a3,c#4,d4,e4]@7 ~@3",
  BY: "[~@6 [a#3,d4,f4]@6 ~@2 [b3,d#4,f#4]@6 ~@2 [e4,g#4,b4]@13 ~@5 [d#4,g4,a#4]@5 ~@3]/3", // A# B E D#
  BZ: "[d4,f#4,a4]@5 ~@3 [c#4,e4,g#4]@5 ~@3", // D C#m
  CA: "[[c4,e4,g4]@5 ~@3 [c#4,f4,g#4] ~@5 [b3,e4]@21 ~@5 [g3,b3,e4]@5 ~@3, ~@7 g#3@13 ~@4]/3", // C C# E5 Em
  CB: "[[a3,c4,e4]@5 ~@3 [a#3,d4,d#4,f4]@11 ~@5 [a#3,d4,d#4,f4] ~@5 [a3,c#4,d4,e4] ~]/2", // Am A# A
  CC: "[a3,c#4,d4,e4]@5 ~@5 [a3,c#4,d4,e4] ~@3 [a3,c#4,d4,e4] ~", CD: "~@2 [a3,c#4,d4,e4] ~@11 [a3,c#4,d4,e4] ~",
  CE: "[~@2 [a3,c#4,d4,e4] ~@11 [a3,c#4,d4,e4]@7 ~@5 [a3,c#4,d4,e4] ~@3 [a3,c#4,d4,e4] ~]/2", // A
  CF: "[~@2 [a3,c#4,d4,e4] ~@11 [a#3,d4,f4]@6 ~@2 [b3,d#4,f#4]@6 ~@2 [e4,g#4,b4]@13 ~@5]/3", // A A# B E
  CG: "[d#4,g4,a#4]@5 ~@3 [d4,f#4,a4]@5 ~@3", CH: "[c#4,e4,g#4]@5 ~@3 [c4,e4,g4]@5 ~@3",
  CI: "[[c#4,f4,g#4] ~@5 [b3,e4]@21 ~@5, ~@3 g#3@13]/2", // C# E5
  CJ: "[[c4,f4,g4]@8 ~@4 [b3,e4,f#4]@8 ~@6 e5 [a5,b5] d6@11 ~@5 [a#3,d#4] ~ b3 ~]/3", // Csus4 Bsus4 Asus2 D#5
  CK: "[~@4 [a3,b3,d4]@5 ~@3 [c4,f4,g4]@8 ~@4 [b3,e4,f#4]@24]/3", CL: "~@6 [a3,c#4,d4,e4] ~ [a3,c#4,d4,e4]@5 ~@3",
})).s("gm_piano").gain(0.27).pan(0.9)

// bass · fretless bass · "Bass"
const bass = note(`<
  A@2 B@2 A@2 C@2 D@3 E F@2 G@2 H@2 I J K@2 L M N O P Q R@2 S T@7 U V W X@2 Y@2 Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL
  AM AN@3 AO@2 AP AQ@10 AR AS@2 AT@2 AU@3 AV AW AX@5 AY@2 AZ BA@2 BB@4 BC BD BE@6 BF BG BH BI BJ BK@2 BL BM BN BO BP
  BQ@2 BR@2 BS@4 BT BU@2 BV@3 BW BX BY BZ CA@2 CB BZ CA@2 CC@3 CD CE@3 CF@2 CG CH@2 CI@2 CH@2 CJ@3 CK CL CM@2 CN@3 U V W
  X@2 Y@2 Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL AM AN@3 CO BZ CP@2 CQ BZ CP@2 CQ BZ CP@2 CQ BZ CP@2 CQ BZ CP@2 CR
>`.pickRestart({
// … 193 more lines

More by Steely Dan