Strudelify

Reelin' In the Years

Steely Dan

KeyA majorTempo125 bpm
0:00/0:00
// Reelin' In the Years — Steely Dan
// 125 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 26, 4/4 at bar 26, 2/4 at bar 50, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 147 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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 · pan flute
const pan_flute = note(`<
  ~@17 A B C D E F G H I@2 J@4 K@2 L@2 J@4 I@2 M N@2 O@2 P Q R S T U T V T W T V T U T V T S T ~@33 A X C D Y F G H I@2
  J@4 K@2 L@2 J@4 I@2 ~@25
>`.pickRestart({
  A: "~@3 e5@2 ~ d5 ~ d5 ~ d5@3 ~ d5 ~ d5 ~ c#5 ~ c#5 ~ c#5 ~", B: "b4@2 b4@3 ~ b4@2 a4@2 a4@6 ~@4 b4 ~ c#5 ~",
  C: "d5@2 ~ d5@2 ~ d5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~",
  D: "b4@2 b4@2 b4@2 a4@2 a4@6 ~ e5@2 ~ f#5@2 ~ g5@3", E: "~@2 g5!2 ~ g5 g5@2 ~ g5@2 ~ g5@2 ~ f#5@2 ~ f#5@2 ~ f#5@2 ~",
  F: "f5@2 ~ f5@2 ~ f5@2 ~ a5@2 ~ e5@6 ~@3 a4@2 ~", G: "d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~",
  H: "b4@2 ~ a4@2 ~ a4@4 ~@8 e4@2 ~ e4@2 ~", I: "[f#4@2 ~ a4@2 ~ a4@2 ~ f#4@2 ~ b4@4 ~@2 a4@14 ~@16]/2",
  J: "[f#4@2 a4@2 a4@2 a4@2 ~ f#4@2 ~ b4@4 ~@2 a4@14 ~@10 e4@2 ~ e4@2 ~]/2",
  K: "[f#4@2 ~ a4@2 ~ b4@2 ~ f#4@2 ~ b4@4 ~@2 a4@14 ~@10 e4@2 ~ e4@2 ~]/2",
  L: "[f#4@2 a4@2 a4@2 a4@2 ~ f#4@2 ~ b4@4 ~@2 a4@14 ~@16]/2", M: "~@15 e5@2 ~ d5@2 d5@2 d5@2",
  N: "[d5@2 d5@2 d5@2 c#5@2 c#5@2 c#5@2 b4@2 b4@3 ~ b4@2 a4@2 a4@6 ~@6 c#5@2 d5@2 ~ d5@2 ~ d5@2 ~ c#5@2 ~]/2",
  O: "[c#5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~ b4@2 b4@2 b4@2 a4@2 a4@6 ~@4 f#5@2 ~ g5@3 g5@4 ~@2 g5@2 ~ g5@2 ~]/2",
  P: "g5@2 ~ f#5@2 ~ f#5@2 ~ f#5@2 ~ f5@2 ~ f5@2 ~ f5@2 ~ a5@2 ~", Q: "e5@6 ~@3 a4@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~",
  R: "c#5@2 ~ c#5@2 ~ c#5@2 ~ c#5@2 ~ b4@2 ~ a4@2 ~ a4@4 ~@2", S: "~@6 e4@2 ~ e4@2 ~ f#4@2 ~ a4@2 ~ a4@2 ~ f#4@2 ~",
  T: "b4@2 ~ a4@7 ~@2", U: "~@12 f#4@2 a4@2 a4@2 a4@2 ~ f#4@2 ~", V: "~@6 e4@2 ~ e4@2 ~ f#4@2 a4@2 a4@2 a4@2 ~ f#4@2 ~",
  W: "~@6 e4@2 ~ e4@2 ~ f#4@2 ~ a4@2 ~ b4@2 ~ f#4@2 ~", X: "b4@2 b4@3 ~ b4@2 a4@2 a4@6 ~@6 c#5@2",
  Y: "~@2 g5@3 ~ g5@2 ~ g5@2 ~ g5@2 ~ f#5@2 ~ f#5@2 ~ f#5@2 ~",
})).s("gm_pan_flute").gain(0.44).pan(0.4)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B C@8 D@2 E F G H E F I@2 E F G H E J K@7 L@3 M@2 N@2 M@2 N O M@2 N@2 M@2 P@2 Q R S T Q
  U S ~ Q R S T Q U S V W@2 V@2 W@2 V@2 W X V Y W X Z@8 AA@3 E F G H E F I@2 E F G H E J P AB AC AD AE AF AG AD AH AI AJ
  AK V AI AJ AK V AI AJ AK V AI AJ AK V AL
>`.pickRestart({
  A: "g3@2 ~ a3@2 ~ b3@2 ~ [b3,d4,g4]@5 ~ d4@2 ~ e4@2 ~ d4@2 ~", // G
  B: "a3@2 ~ b3@2 ~ c#4@2 ~ [c#4,e4,a4]@5 ~ e4@2 ~ f#4@2 ~ e4@2 ~", // A
  C: "[a3@2 ~ b3@2 ~ c#4@2 ~ [c#4,e4,a4]@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@5 ~ e5@2 ~ f#5@2 ~ g5@7 ~@2 a5@2 ~ f#5@7 ~@2 a5@2 ~ f5@7 ~@2 a5@2 ~ e5@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@3]/8", // A
  D: "[~@6 a5@2 ~ c#5@19 ~@8 g3@2 ~ g3@2 ~ b3@2 ~ d4@2 ~]/2",
  E: "[b3,d4,g4]@2 ~ [b3,d4,g4]@2 ~ e4@2 ~ d4@2 ~ g3@2 ~ g3@2 ~ b3@2 ~ d4@2 ~", // G
  F: "[b3,d4,g4]@2 ~ [b3,d4,g4]@2 ~ e4@2 ~ d4@2 ~ a3@2 ~ a3@2 ~ c#4@2 ~ e4@2 ~", // G
  G: "[c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 ~ f#4@2 ~ e4@2 ~ a3@2 ~ a3@2 ~ c#4@2 ~ e4@2 ~", // A
  H: "[c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 ~ f#4@2 ~ e4@2 ~ g3@2 ~ g3@2 ~ b3@2 ~ d4@2 ~", // A
  I: "[[c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 ~ f#4@2 ~ e4@2 ~ [a3,c#4,e4]@16 ~@8 g3@2 ~ g3@2 ~ b3@2 ~ d4@2 ~]/2", // A
  J: "[b3,d4,g4]@2 ~ [b3,d4,g4]@2 ~ e4@2 ~ d4@2 ~ f#3@2 ~ f#3@2 ~ [a4,c#5,f#5]@2 ~ [a4,c#5,f#5]@2 ~", // G F#m
  K: "[f#3@2 ~ f#3@2 ~ [a4,c#5,f#5]@2 ~ [a4,c#5,f#5]@2 ~ f#3@2 ~ f#3@2 ~ [a4,c#5,f#5]@2 ~ c#5@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@5 ~ e5@2 ~ f#5@2 ~ g5@7 ~@2 a5@2 ~ f#5@7 ~@2 a5@2 ~ f5@7 ~@2 a5@2 ~ e5@3]/7", // F#m
  L: "[~@3 d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@19 ~@8]/3",
  M: "g3@2 ~ g3@2 ~ b3@2 ~ d4@2 ~ [b3,d4,g4]@2 ~ [b3,d4,g4]@2 ~ e4@2 ~ d4@2 ~", // G
  N: "a3@2 ~ a3@2 ~ c#4@2 ~ e4@2 ~ [c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 ~ f#4@2 ~ e4@2 ~", O: "[a3,c#4,e4]@2 ~",
  P: "f#3@2 ~ f#3@2 ~ [a4,c#5,f#5]@2 ~ [a4,c#5,f#5]@2 ~ f#3@2 ~ f#3@2 ~ [a4,c#5,f#5]@2 ~ [a4,c#5,f#5]@2 ~", // F#m
  Q: "b4@2 ~ b4@4 ~ g4 ~ a4 ~ b4@2 ~ b4@4 ~ g4 ~ a4 ~",
  R: "b4 ~ c#5 ~ d5 ~ c#5 ~ c#5 ~ a4 ~ g4 ~ a4 ~ b4 ~ c#5 ~ b4 ~ a4 ~",
  S: "c#5@2 ~ c#5@4 ~ a4 ~ b4 ~ c#5@2 ~ c#5@4 ~ a4 ~ b4 ~", T: "f#5 e5 c#5 a5 e5 c#5 f#5 e5 c#5 a5 e5 c#5",
  U: "b4 ~ c#5 ~ d5 ~ c#5 ~ b4 ~ a4 ~ g4 ~ a4 ~ b4 ~ c#5 ~ b4 ~ a4 ~",
  V: "f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~ f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~", W: "d5 b4 a4 f#5 b4 a4 d5 b4 a4 f#5 b4 a4",
  X: "d5@2 b4@2 a4@2 f#5@2 b4@2 a4@2 [a4,b4,d5]@3 ~ [b4,c#5,e5]@3 ~ [d5,e5,g5]@3 ~", // Bm7 C#m7 Em7
  Y: "f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~ [b4,c#5,e5]@3 ~ [d5,e5,g5]@3 ~ [b4,c#5,e5]@3 ~", // C#m7 Em7 C#m7
  Z: "[[b4,c#5,e5]@30 ~@3 c#5@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@5 ~ d5@2 ~ e5@2 ~ f#5@7 ~@2 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@5 ~ e5@2 ~ f#5@2 ~ g5@7 ~@2 a5@2 ~ f#5@7 ~@2 a5@2 ~ f5@7 ~@2 a5@2 ~ e5@5 ~ d5@2 ~ e5@2 ~ f#5@3]/8", // C#m7
  AA: "[~@6 a5@2 ~ e5@7 ~@2 a5@2 ~ d5@7 ~@2 a5@2 ~ c#5@19 ~@8 g3@2 ~ g3@2 ~ b3@2 ~ d4@2 ~]/3",
  AB: "f#3@2 ~ f#3@2 ~ [a4,c#5,f#5]@2 ~ [a4,c#5,f#5]@2 ~ b4@2 ~ b4@4 ~ g4 ~ a4 ~", // F#m
  AC: "b4@2 ~ b4@4 ~ g4 ~ a4 ~ b4 ~ c#5 ~ d5 ~ c#5 ~ c#5 ~ a4 ~",
  AD: "g4 ~ a4 ~ b4 ~ c#5 ~ b4 ~ a4 ~ c#5@2 ~ c#5@4 ~ a4 ~ b4 ~",
  AE: "c#5@2 ~ c#5@4 ~ a4 ~ b4 ~ f#5 e5 b4 ~ a4 ~ a5 e5 d5 ~ c#5 ~",
  AF: "f#5 e5 d5 ~ c#5 ~ a5 e5 d5 ~ c#5 ~ b4@2 ~ b4@4 ~ g4 ~ a4 ~",
  AG: "b4@2 ~ b4@4 ~ g4 ~ a4 ~ b4 ~ c#5 ~ d5 ~ c#5 ~ b4 ~ a4 ~",
  AH: "c#5@2 ~ c#5@4 ~ a4 ~ b4 ~ f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~",
  AI: "f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~ b5@2 a5@2 g5@2 b5@2 a5@2 g5@2", AJ: "b5 a5 g5 b5 a5 g5 b5 a5 g5 b5 a5 g5",
  AK: "b5@2 a5@2 g5@2 b5@2 a5@2 g5@2 f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~", AL: "f#5 ~ e5 ~ c#5 ~ a5 ~ e5 ~ c#5 ~@13",
})).s("gm_electric_guitar_jazz").gain(0.27).pan(0.1)

// chords · piano
const piano = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B C@8 D@2 E F B G E F H@2 E F B G E I J@8 K@2 A@2 B@2 A@2 B L A M@2 N O@8 ~@4 P@7 ~@66
>`.pickRestart({
  A: "[a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2 [a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3, [g2,g3]@2 ~ [g2,g3]@2 ~", // Bm7 G
  B: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [a2,a3]@2 ~ [a2,a3]@2 ~", // C#m7 A
  C: "[[b3,c#4,e4]@2 ~ [b3,c#4,e4]@6 [a2,c#4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [d3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [c#3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@5 ~ [c#3,e4]@2 ~ [d3,f#4]@2 ~ [e3,g4]@5 ~ [b2,e4]@2 ~ [e3,g4]@2 ~ [d#3,f#4]@5 ~ [b2,d#4]@2 ~ [d#3,f#4]@2 ~ [d3,f4]@5 ~ [b2,d4]@2 ~ [d3,f4]@2 ~ [c#3,e4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [c#3,e4]@2 ~ [b2,d4]@3, [a2,a3] ~@31]/8", // C#m7 A Bm C#m D D5 D C#m …
  D: "[~@3 [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@19 ~@8 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, ~@9 [g2,g3]@2 ~]/2", // F#7 Bm A Bm7 G
  E: "[a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [g2,g3]@2 ~ [g2,g3]@2 ~", // Bm7 G
  F: "[a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [g2,g3]@2 ~ [a2,a3]@2 ~", // Bm7 C#m7 G A
  G: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [a2,a3]@2 ~ [g2,g3]@2 ~", // C#m7 Bm7 A G
  H: "[[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [a2,a3,b3,c#4,e4]@16 ~@8 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [a2,a3]@2 ~@7 [g2,g3]@2 ~]/2", // C#m7 A Bm7 A G
  I: "[a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [g2,g3]@2 ~ [f#2,f#3]@2 ~", // Bm7 C#m7 G F#
  J: "[[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@5 ~ [a2,c#4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [d3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [c#3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@5 ~ [c#3,e4]@2 ~ [d3,f#4]@2 ~ [e3,g4]@5 ~ [b2,e4]@2 ~ [e3,g4]@2 ~ [d#3,f#4]@5 ~ [b2,d#4]@2 ~ [d#3,f#4]@2 ~ [d3,f4]@5 ~ [b2,d4]@2 ~ [d3,f4]@2 ~ [c#3,e4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@3, [f#2,f#3]@4 ~@2 [f#2,f#3]@3 ~@87]/8", // C#m7 A Bm C#m D D5 D C#m …
  K: "[~@3 [a2,c#4]@2 ~ [c#3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@19 ~@8]/2", // A C#m Bm F#7 Bm A
  L: "[a2,a3,b3,c#4,e4]@2 ~", // A
  M: "[[a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2 [a3,b3,d4]@2 ~ a3@9 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@9 [b3,c#4,e4]@3 [b3,c#4,e4]@9, [g2,g3]@2 ~ [g2,g3]@2 ~ a2@2 ~ a2@2 ~, ~@5 d4@11, ~@5 b3@2 ~ a3@4 a3@4]/2", // Bm7 C#m7 G
  N: "[c#4,e4] [c#4,e4]@3 [c#4,e4] [c#4,e4]@3, b3, a3!2, a2@2 ~ a2@2 ~", // C#m
  O: "[[a3,b3,d4]@3 [a3,b3,d4]@9 [a3,b3,d4]@3 b3@9 [g2,g3]@8 ~@7 b3@9 [b3,c#4,e4]@3 [b3,c#4,e4]@9 [b3,c#4,e4]@3 e4@9 [f#2,f#3]@8 ~@4 [f#2,f#3]@8 ~@100, [g2,g3]@8 ~@4 [g2,g3]@8 ~@4 b3@15 ~@24 [b3,c#4]@129, ~@5 [a3,d4]@59, ~@9 [g2,g3]@2 ~ [f#2,f#3]@2 ~ [f#2,f#3]@2 ~ e4@30]/8", // Bm7 G C#m7 F# G Bsus2 D5 G …
  P: "[[g2,d3,a3,b3,d4]@3 [g2,d3,b3]@9 [g2,d3,b3]@3 [g2,d3]@9 d3@3 ~@21 [a2,e3]@2 ~ [a2,e3]@11 ~ [a2,e3]@9 [a2,e3]@3 [a2,e3]@12 ~@12 g2@11 ~@10 [g2,d3]@2 ~ [g2,d3]@11 ~@34, ~@3 [a3,d4]@12 [a3,d4]@81 b3@62 ~@10, ~@15 b3@33 c#4@110 ~@10, ~@24 g2@24 b3@39 [a2,e3]@71 ~@10, ~@27 d3@83 ~@58]/7", // G G5 A5 G5 D5 A5
})).s("gm_piano").gain(0.27).pan(0.9)

// bass · fretless bass
const bass = note(`<
  ~ A@2 B@2 C@2 B@2 C@2 B@2 C@2 B D@8 E@2 F G H I F G J@2 F G H I F K L@8 M@2 F@2 H@2 F@2 H N F@2 H@2 F@2 O@2 P@2 Q@2 R
  P S Q P@2 Q@2 R P S Q C@2 B@2 C@2 B@2 C T U V W T X@8 Y@3 F G H I F G J@2 F G H I F K Z AA P AB Q AC P AB Q AC P AB Q
  AC P AB Q AC P AB Q AC P AB Q AD
>`.pickRestart({
  A: "g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~ e3@2 ~ e3@2 ~ d3@2 ~ e3@2 ~",
  B: "a2@2 ~ a2@2 ~ a3@2 ~ a3@2 ~ f#3@2 ~ f#3@2 ~ e3@2 ~ e3@2 ~",
  C: "g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~ e3@2 ~ e3@2 ~ d3@2 ~ d3@2 ~",
  D: "[a2@2 ~ a2@2 ~ a3@2 ~ a2@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@5 ~ c#3@2 ~ d3@2 ~ e3@5 ~ b2@2 ~ e3@2 ~ d#3@5 ~ b2@2 ~ d#3@2 ~ d3@5 ~ b2@2 ~ d3@2 ~ c#3@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@3]/8",
  E: "[~@3 f#2@2 ~ b2@2 ~ a2@19 ~@8 g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~]/2",
  F: "g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~ g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~",
  G: "g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~ a2@2 ~ a2@2 ~ a3@2 ~ a3@2 ~",
  H: "a2@2 ~ a2@2 ~ a3@2 ~ a3@2 ~ a2@2 ~ a2@2 ~ a3@2 ~ a3@2 ~",
  I: "a2@2 ~ a2@2 ~ a3@2 ~ a3@2 ~ g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~",
  J: "[a2@2 ~ a2@2 ~ a3@2 ~ a3@2 ~ a2@16 ~@8 g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~]/2",
  K: "g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~ f#2@2 ~ f#2@2 ~ c#3@2 ~ c#3@2 ~",
  L: "[e3@2 ~ e3@2 ~ f#3 ~ e3 ~ c#3 ~ f#2@2 ~ f#2@2 ~ c#3@2 ~ a2@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@5 ~ c#3@2 ~ d3@2 ~ e3@5 ~ b2@2 ~ e3@2 ~ d#3@5 ~ b2@2 ~ d#3@2 ~ d3@5 ~ b2@2 ~ d3@2 ~ c#3@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@3]/8",
  M: "[~@3 a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@19 ~@8]/2", N: "a2@2 ~",
  O: "f#2@2 ~ f#2@2 ~ c#3@2 ~ c#3@2 ~ e3@2 ~ e3@2 ~ f#3 ~ e3 ~ c#3 ~",
  P: "g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~",
  Q: "a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~", R: "g2@2 ~ g2@5 ~ g2@2 ~ g2@2 ~ g2@5 ~ g2@2 ~",
  S: "a2@2 ~ a2@5 ~ a2@2 ~ a2@2 ~ a2@5 ~ a2@2 ~", T: "g4@2 ~ d4@2 ~ g4@2 ~ d4@2 ~ g2@3 ~ a2@3 ~ c3@3 ~",
  U: "a2@2 ~ e4@2 ~ a4@2 ~ e4@2 ~ a4 ~ a4 ~ e4 ~ a4@2 ~ e4@2 ~", V: "a4@2 ~ e4@2 ~ a4@2 ~ g#4@2 ~ a2@3 ~ c3@3 ~ a2@3 ~",
  W: "g2@2 ~ d4@2 ~ g4@2 ~ d4@2 ~ g4 ~ g4 ~ d4 ~ g4@2 ~ d4@2 ~",
  X: "[a2@30 ~@3 a2@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@5 ~ b2@2 ~ c#3@2 ~ d3@5 ~ a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@5 ~ c#3@2 ~ d3@2 ~ e3@5 ~ b2@2 ~ e3@2 ~ d#3@5 ~ b2@2 ~ d#3@2 ~ d3@5 ~ b2@2 ~ d3@2 ~ c#3@5 ~ b2@2 ~ c#3@2 ~ d3@3]/8",
  Y: "[~@3 a2@2 ~ d3@2 ~ c#3@5 ~ a2@2 ~ c#3@2 ~ b2@5 ~ f#2@2 ~ b2@2 ~ a2@19 ~@8 g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~]/3",
  Z: "e3@2 ~ e3@2 ~ f#3 ~ e3 ~ c#3 ~ f#2@2 ~ f#2@2 ~ c#3@2 ~ c#3@2 ~",
  AA: "e3@2 ~ e3@2 ~ f#3 ~ e3 ~ c#3 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~",
  AB: "g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~",
  AC: "a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~", AD: "a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~@13",
})).s("gm_fretless_bass").gain(0.27)

// chords · ocarina
const ocarina = note(`<
  ~@24 A B@2 C@2 D@2 E@2 F@2 C@2 D@2 G@2 ~@8 H I J K L I M K N I J K L I M K ~@40 A B@2 C@2 D@2 E@2 F@2 C@2 D@2 G@2 ~@25
>`.pickRestart({
  A: "~@18 [a3,c#4]@2 ~ [a3,c#4]@2 ~", // A
  B: "[[b3,d4]@2 ~ [c#4,e4]@2 ~ [c#4,e4]@2 ~ [b3,d4]@2 ~ f#4@4 ~@2 f#4@14 ~@16, ~@3 d4@5 ~@4]/2", // Bm C#m Bm
  C: "[[b3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 ~ [b3,d4]@2 ~ d4@6 [c#4,e4]@14 ~@10 [a3,c#4]@2 ~ [a3,c#4]@2 ~, ~@3 f#4 ~@8]/2", // Bm D Bm C#m A
  D: "[[b3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 ~ [b3,d4]@2 ~ f#4@4 ~@2 f#4@14 ~@10 [a3,c#4]@2 ~ [a3,c#4]@2 ~, ~@3 d4@5 ~@4]/2", // Bm D Bm A
  E: "[[b3,d4]@2 ~ [d4,f#4]@2 ~ [d4,f#4]@2 ~ [b3,d4]@2 ~ d4@6 [c#4,e4]@14 ~@10 [a3,c#4]@2 ~ [a3,c#4]@2 ~, ~@3 f#4 ~@8]/2", // Bm D Bm C#m A
  F: "[[b3,d4] ~ [c#4,e4] ~ [c#4,e4] ~ [c#4,e4]@2 ~ [b3,d4]@2 ~ f#4@4 ~@2 f#4@14 ~@16, ~@3 d4@5 ~@4]/2", // Bm C#m Bm
  G: "[[b3,d4]@2 ~ [d4,f#4]@2 ~ [d4,f#4]@2 ~ [b3,d4]@2 ~ d4@6 [c#4,e4]@14 ~@16, ~@3 f#4 ~@8]/2", // Bm D Bm C#m
  H: "~@6 [a3,c#4]@2 ~ [a3,c#4]@2 ~ [b3,d4]@2 ~ [c#4,e4]@2 ~ [c#4,e4]@2 ~ [b3,d4]@2 ~", I: "f#4@2 ~ f#4@7 ~@2, d4@5 ~",
  J: "~@12 [b3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 ~ [b3,d4]@2 ~", K: "d4@3 [c#4,e4]@7 ~@2, f#4 ~@5",
  L: "~@6 [a3,c#4]@2 ~ [a3,c#4]@2 ~ [b3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 ~ [b3,d4]@2 ~", // A Bm D Bm
  M: "~@6 [a3,c#4]@2 ~ [a3,c#4]@2 ~ [b3,d4]@2 ~ [d4,f#4]@2 ~ [d4,f#4]@2 ~ [b3,d4]@2 ~", // A Bm D Bm
  N: "~@6 [a3,c#4]@2 ~ [a3,c#4]@2 ~ [b3,d4] ~ [c#4,e4] ~ [c#4,e4] ~ [c#4,e4]@2 ~ [b3,d4]@2 ~", // A Bm C#m Bm
})).s("gm_ocarina").gain(0.31).pan(0.6)

// chords · piano
const piano_2 = note(`<
  ~@81 A B@2 C@2 B@2 C@2 B D C E B D F@8 G@3 H I C J H I K@2 H I C J H L M N ~@7 O B P C J B P C J B P C J B P C Q
>`.pickRestart({
  A: "[a2,e3]@2 ~ [a2,e3]@7 ~@2 [a2,e3]@2 ~ [a2,e3]@7 ~@2", // A5
  B: "[a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [g2,g3]@2 ~ [g2,g3]@2 ~", // Bm7 G
  C: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [a2,a3]@2 ~ [a2,a3]@2 ~", // C#m7 A
  D: "[a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2 [a3,b3,d4]@3 ~ [b3,c#4,e4]@3 ~ [d4,e4,g4]@3 ~, [g2,g3]@2 ~ [g2,g3]@2 ~", // Bm7 C#m7 Em7 G
  E: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [b3,c#4,e4]@3 ~ [d4,e4,g4]@3 ~ [b3,c#4,e4]@3 ~, [a2,a3]@2 ~ [a2,a3]@2 ~", // C#m7 Em7 C#m7 A
  F: "[[a2,a3,b3,c#4,e4]@30 ~@3 [a2,c#4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [d3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@5 ~ [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [c#3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@5 ~ [c#3,e4]@2 ~ [d3,f#4]@2 ~ [e3,g4]@5 ~ [b2,e4]@2 ~ [e3,g4]@2 ~ [d#3,f#4]@5 ~ [b2,d#4]@2 ~ [d#3,f#4]@2 ~ [d3,f4]@5 ~ [b2,d4]@2 ~ [d3,f4]@2 ~ [c#3,e4]@5 ~ [b2,d4]@2 ~ [c#3,e4]@2 ~ [d3,f#4]@3]/8", // A Bm C#m D D5 D C#m A …
  G: "[~@3 [a2,d4]@2 ~ [d3,f#4]@2 ~ [c#3,e4]@5 ~ [a2,c#4]@2 ~ [c#3,e4]@2 ~ [b2,d4]@5 ~ [f#2,e4]@2 ~ [b2,d4]@2 ~ [a2,c#4]@19 ~@8 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, ~@15 [g2,g3]@2 ~]/3", // D5 D C#m A C#m Bm F#7 Bm …
  H: "[a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [g2,g3]@2 ~ [g2,g3]@2 ~", // Bm7 G
  I: "[a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [g2,g3]@2 ~ [a2,a3]@2 ~", // Bm7 C#m7 G A
  J: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [a2,a3]@2 ~ [g2,g3]@2 ~", // C#m7 Bm7 A G
  K: "[[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [a2,a3,b3,c#4,e4]@16 ~@8 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, [a2,a3]@2 ~@7 [g2,g3]@2 ~]/2", // C#m7 A Bm7 A G
  L: "[a3,b3,d4]@2 ~ [a3,b3,d4]@6 ~@3 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [g2,g3]@2 ~ [f#2,f#3]@2 ~", // Bm7 C#m7 G F#
  M: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@6 ~@3, [f#2,f#3]@2 ~ [f#2,f#3]@2 ~", // C#m7 F#
  N: "[b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@14, [f#2,f#3] ~@2", O: "~@12 [a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2, ~@3 [g2,g3]@2 ~",
  P: "[a3,b3,d4]@2 ~ [a3,b3,d4]@7 ~@2 [b3,c#4,e4]@2 ~ [b3,c#4,e4]@7 ~@2, [g2,g3]@2 ~ [a2,a3]@2 ~", // Bm7 C#m7 G A
  Q: "[b3,c#4,e4]@2 ~ [b3,c#4]@7 ~@14, [a2,a3] ~@2", // C#m7 Bsus2 A
})).s("gm_piano").gain(0.27)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@16 B@7 C D A@6 E D A@6 F B@8 ~ A@7 ~ A@33 G A G A G H I B@7 C D A@6 E D A@29 E A J
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4", D: "~@4 x!2 ~@2", E: "x!2 ~@2 x ~@3",
  F: "x!2 ~@2 x!2 ~ x", G: "x ~@2 x ~@8 x ~@3 x ~@3 x ~@3", H: "x", I: "~@3 x ~ x ~ x", J: "x!2 ~@6",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct("<~ A@23 B C A@6 B C A@15 ~ A@7 ~ A@33 B A B A B ~ B A@7 B C A@6 B C A@31 B>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@23 B C A@6 D C A@5 B E A@8 ~ A@7 F A@6 ~@2 A@25 G A G A G F H A@7 B C A@6 D C A@5 B ~ C A@7 B ~@16
>`.pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~@4 x!4", D: "x!5 ~@3", E: "~@7 x", F: "x",
  G: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@3 x ~@3", H: "~@3 x!5",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@39 A B ~@23 C@2 ~@54 A C D ~@7 A C@15 D>".pickRestart({
  A: "~@2 x!2", B: "x!3 ~", C: "x!4", D: "x!2 ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A B ~@6 B ~@15 C ~ D ~@6 D@2 ~@7 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~@7 D E D E D E D A ~@7 A B ~@6 B ~@8 B ~ B ~
  B ~ B ~ B ~@7 B@7 ~@2
>`.pickRestart({
// … 9 more lines

More by Steely Dan