Strudelify

Blue Jean

David Bowie

KeyA majorTempo215 bpm
0:00/0:00
// Blue Jean — BOWIE DAVID
// 215 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(215/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A B C D E F G H I F G J K L M N O E P Q R E S T U V W X Y Z AA AB A B C AC E F G AD@4 AE AF@4 AG@4 AH AI@3 AJ AK@7
  AL AM@2 AN@8 AO@5 AP@4 AH AQ@2 AR@8 AS@5 AT@4 AH AQ@2 AU@8 AV@8
>`.pickRestart({
  A: "~@4 a1@2 ~@2 a1@3 ~@5", B: "~@4 d2@2 ~@2 d2@3 ~@5", C: "a1@5 ~@3 e2@7 ~",
  D: "a1@5 ~@2 e2 ~@4 d#2@3 ~, ~@11 e2@2 ~@3", E: "d2@7 ~ a1@7 ~", F: "d2@4 a1@3 ~", G: "a1@7 ~ e2@7 ~",
  H: "a1@8 e2@2 ~@2 d#2@3 ~, ~@11 d2@2 ~@3", I: "e2@7 ~ b1@7 ~", J: "a1@4 ~@3 a2@2 ~@2 a2 e2@4", K: "~@2 a1 ~ a1 ~@3",
  L: "~@4 d2 ~@3 d2@3 ~@5", M: "a1@3 ~ e2@3 ~", N: "a1@5 ~@2 a1@2 ~@2 b1 c#2@3 ~", O: "d2@3 ~ a1@4",
  P: "a1@6 ~@2 e2@7 ~", Q: "a1@7 ~ e2@2 d2@4 ~@2, ~@10 c#2 ~@5", R: "e2@7 ~ b1@8", S: "a1 e2",
  T: "a2@3 ~ a1@4 b1@4 c#2@3 ~", U: "d2@2 a1 ~ f#1@4 g1@4 g#1@4", V: "a1@4 b1@4 c#2@4 d2@3 ~",
  W: "a1@4 b1@4 c#2@3 ~ d2@4", X: "e2 f#2 a2 g#2", Y: "f#2@2 c#2 ~ f#1@4 a1@3 ~ c#2@4", Z: "b1@4 d#2@3 ~ e2@4 f#2@4",
  AA: "b2@4 a2@4 g#2@4 f#2@3 ~", AB: "e2@2 e1 ~ e1 ~@3", AC: "a1@5 ~ e2 ~@3 e2@2 d#2@3 ~",
  AD: "[a1@8 e2@2 d2@2 d#2@3 e2@7 ~@2 b1@7 d2@8 ~ a1@6 ~ a1@7 ~@2 e2@7 ~]/4", AE: "a1@4 ~@2 a2 ~@3 a2 ~ e2@4",
  AF: "[d2@2 a1 ~ f#1@3 g1@4 ~ g#1@3 a1@4 b1@4 ~ c#2@3 d2@4 a1@4 b1@4 c#2@4 d2@4 e2@5 f#2@4 a2@4 g#2@4]/4",
  AG: "[f#2@2 c#2 ~ f#1@3 a1@3 ~@2 c#2@3 b1@4 d#2@3 ~ e2@4 f#2@4 b2@5 a2@3 g#2@4 ~ f#2@3 e2@4 e1@2 ~@2 e1@2 ~@7]/4",
  AH: "~@3 a1@2 ~@2 a1@3 ~@6", AI: "[~@3 d2@2 ~@2 d2@3 ~@5 a1@5 ~@3 e2@7 ~ a1@5 ~@2 e2 ~@4 d#2@3 ~@2, ~@21 e2 ~@2]/3",
  AJ: "d2@7 a1@7 ~@2",
  AK: "[d2@7 a1@6 ~@2 a1@7 ~ e2@8 a1@8 ~ e2@2 ~ d#2@3 ~ e2@6 ~@2 b1@7 ~ d2@8 a1@6 ~@2 a1@8 e2@7 ~ a1@4 ~@3 a2 ~@3 d2 d#2@4 ~, ~@21 d2 ~@34]/7",
  AL: "~@3 a1@2 ~@2 a1@2 ~@7", AM: "[~@3 d2 ~@3 d2@3 ~@5 a1@6 ~@2 e2@7 ~ a1]/2",
  AN: "[~@6 a1@2 ~@2 b1 c#2@3 ~ d2@6 ~@2 a1@8 d2@7 ~ a1@7 ~ a1@6 ~@2 e2@7 ~ a1@6 ~@2 e2@3 d2@4 ~ e2@7 ~ b1@8 d2@7 ~ a1@7 ~ a1@8 e2@8 a2, ~@74 c#2 ~@53]/8",
  AO: "[~@3 a1@4 b1@3 ~ c#2@3 ~ d2@2 ~ a1 f#1@4 g1@4 g#1@4 a1@4 b1@4 c#2@4 d2@3 ~ a1@4 b1@4 c#2@3 ~ d2@4 e2@4 f#2@4 a2@4 g#2@4 f#2]/5",
  AP: "[~@2 c#2 f#1@3 ~ a1@3 ~ c#2@3 ~ b1@4 d#2@3 ~ e2@4 f#2@4 b2@4 a2@4 g#2@4 f#2@3 ~ e2@4 e1@2 ~@2 e1@2 ~@7]/4",
  AQ: "[~@3 d2@2 ~@2 d2@3 ~@5 a1@5 ~@3 e2@7 ~ a1]/2",
  AR: "[~@6 e2 ~@4 d#2@3 ~ d2@7 ~ a1@7 ~ d2@8 a1@6 ~@2 a1@7 ~ e2@7 ~ a1@7 ~ e2@2 ~@2 d#2@3 ~ e2@6 ~@2 b1@7 ~ d2@8 a1@6 ~@2 a1@7 ~ e2@7 ~ a1, ~@5 e2 ~@31 d2 ~@26]/8",
  AS: "[~@6 a2 ~@3 a2 e2@4 d2@2 ~ a1 f#1@4 g1@4 g#1@4 a1@4 b1@4 c#2@4 d2@4 a1@4 b1@4 c#2@3 ~ d2@4 e2@4 f#2@3 ~ a2@4 g#2@4 f#2]/5",
  AT: "[~@2 c#2 f#1@4 a1@3 ~ c#2@3 ~ b1@4 d#2@3 ~ e2@4 f#2@4 b2@4 a2@4 g#2@4 f#2@3 ~ e2@4 e1@2 ~@2 e1@2 ~@7]/4",
  AU: "[~@6 e2 ~@4 d#2@3 ~ d2@7 ~ a1@7 ~ d2@8 a1@6 ~@2 a1@7 ~ e2@7 ~ a1@8 e2@2 d2@2 d#2@3 ~ e2@6 ~@2 b1@7 ~ d2@8 a1@6 ~@2 a1@7 ~ e2@7 ~ a1, ~@5 e2 ~@58]/8",
  AV: "[~@5 a2 ~@3 d2 ~ d#2@4 e2@7 ~ b1@7 ~ d2@8 a1@6 ~@2 a1@7 ~ e2@7 ~ a1@5 ~ c#2 ~@3 d2 ~ d#2@4 e2@7 ~ b1@7 d2@8 ~ a1@6 ~@2 a2@2 ~@4 a2@2 ~@5 a1@2 ~@2]/8",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · piano · "HONKY TONK"
const piano = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z@2 AA AB AC AD AE AF N AG AH AI AJ AK AL AM@3 AN@2 AO AP AQ AR AS
  AT AU AV AW AX AY AZ BA@7 BB BC@7 BD@5 BE@2 BF@2 BG@3 BH BI@7 BJ@2 BK@8 BL@2 ~ BM@7 BN@8 BO@3
>`.pickRestart({
  A: "~@4 [c#4,e4,a4] ~@3 [a2,c#4,e4,a4]@2 ~@6, ~@2 a2 ~@5", // A
  B: "~@4 [d3,d4,a4] ~@3 [d4,f#4,a4]@3 ~@5, ~@4 f#4@2 ~@2 d3 ~@7", C: "a2@3 [c#4,e4,a4] ~@3 e3 [c#4,e4,a4]@3 ~ a2@4",
  D: "[c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 [c#4,e4,a4]@2 ~ a3", // A
  E: "d3@2 ~ [d4,f#4,a4] a3 ~@3 [d4,f#4,a4]@2 ~@2 d3@4", // D
  F: "[d4,f#4,a4]@3 ~ a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@2 ~ e3", // D
  G: "a2@2 ~ [c#4,e4,a4] e3@3 ~ [c#4,e4,a4]@2 ~@2 a2@4", // A
  H: "[c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 [e4,a4]@3 [a3,b3], ~@12 c#4 ~@3", // A A5 Asus2
  I: "e3@2 ~ [d4,e4,g#4,b4] e3@4 b4@3 ~ e3@3 a3, ~@4 [d4,e4,g#4]@3 ~", // E7
  J: "[d4,f#4,a4]@4 a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@2 ~ e3, d3 ~@7", // D
  K: "a2@2 ~ [c#4,e4,a4] a2@2 ~@2 [c#4,e4,a4]@3 ~ e3@4, ~@4 e3 ~@11", // A
  L: "[c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 [c#4,e4,a4]@2 ~@2", // A
  M: "~@2 [e4,a4] ~ [a2,e4,a4] ~@3, ~@4 [a2,c#4] ~@3 c#4 ~@7", // A5 A
  N: "~@4 [d3,d4,f#4,a4] ~@3 [f#4,a4]@2 ~@6, ~@8 [d3,d4] ~@7", O: "a2@4 [c#4,e4,a4]@4 e3 ~@2 [c#4,e4,a4] a2@2 ~@2",
  P: "[c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] ~@3 e3 [c#4,e4,a4]@3 a3", Q: "d3@2 f#4 [d4,a4] a3@2 ~@2 [d4,f#4,a4]@3 ~ d3@4",
  R: "[d4,f#4,a4]@4 a3 ~ f#4 [d4,a4] d3 ~ a3 ~ [d4,f#4,a4]@2 ~ e3", S: "a2 ~ [c#4,e4,a4] ~ e3@3 ~ [c#4,e4,a4]@3 ~ a2@4",
  T: "[c#4,e4,a4]@3 ~ e3 ~ e4 [c#4,a4] a2 ~ e3 ~ [e4,a4]@2 [g#3,b3] ~, ~@12 c#4 ~@3", // A F#m A5 G#m
  U: "e3 ~ g#4 [d4,e4,b4] [e3,b3] ~@3 [d4,b4]@4 e3@2 ~@2, ~@4 [e4,g#4]@3 ~", // E7 E5 G E
  V: "[d4,f#4,a4]@3 ~ a3 ~ [d4,f#4,a4] ~ d3 ~ a3 ~ [d4,f#4,a4]@2 e3 ~, d3 ~@15", // D
  W: "a2@2 [c#4,e4] ~ e3@4 [c#4,e4,a4]@2 ~@2 [c#4,e4,g#4]@2 ~@2, ~@2 a4@2 ~@8 a4 ~@3", // C#m A C#m
  X: "[c#4,e4]@4 e3 ~ [c#4,e4]@2 a2 ~@2 e3 [c#4,e4,g4]@3 ~", // C#m C#dim
  Y: "[f#3,a3,d4]@4 [g3,b3,d4]@3 ~ [f#3,a3,d4]@3 ~@3 [f#3,d4]@2, ~@14 a3 ~", // D G D
  Z: "[~@2 [a3,d4] ~ [g3,b3,d4]@4 [f#3,a3,d4]@4 d4@2 ~@2 [a3,e4]@3 ~ [a3,d4,f#4]@3 ~ [c#4,e4]@4 a3 ~ [c#4,e4]@2, ~@14 c#4@5 ~@5 a3@2 ~@4 a3 ~]/2", // D5 G D A5 D C#m
  AA: "~@2 [a3,c#4,e4] ~ [a3,d4,f#4]@3 ~ [a3,c#4,e4]@4 e4@2 c#4 ~, ~@12 a3 ~@3", // A D A
  AB: "[f#3,a3]@2 [f#3,a3,c#4] ~@3 [f#3,a3,c#4]@4 ~@2 [f#3,a3,c#4]@3 ~, c#4 ~@15", // F#m
  AC: "f#3 ~ [f#3,a3,b3,d#4] ~@3 f#3 ~ [f#3,a3,b3,d#4]@2 [f#3,a3,b3,d#4] ~@5", // B7
  AD: "[f#3,a3,b3,d#4]@2 ~@2 [f#3,a3,b3,d#4]@2 ~@4 [f#3,a3,d#4]@3 ~ b3 ~, ~@10 b3 ~@5", // B7 D#dim
  AE: "[g#3,b3,e4]@3 ~ [a3,c#4,e4]@3 ~ [g#3,b3,e4]@3 ~@5", // E A E
  AF: "~@4 [a2,c#4,a4] ~@3 [a2,e4,a4]@2 ~@6, ~@4 e4@2 ~@2 c#4 ~@7", // A A5
  AG: "a2@4 [c#4,e4,a4]@4 e3 ~ [c#4,e4,a4] ~ a2@2 ~@2", // A
  AH: "[c#4,e4,a4]@3 ~ e3 ~ [c#4,e4,a4] ~@3 e3 ~ [c#4,e4,a4]@2 a3 ~", // A
  AI: "d3@2 [d4,f#4,a4] ~ a3@2 ~@2 [d4,f#4,a4]@3 ~ d3@4", // D
  AJ: "[d4,f#4,a4]@4 a3 ~ [d4,f#4,a4] ~ d3 ~ a3 ~ [d4,f#4,a4]@2 e3 ~", // D
  AK: "a2 ~ [c#4,e4,a4] e3@4 ~ [c#4,e4,a4]@3 ~ a2@4", // A
  AL: "[c#4,e4,a4]@3 e3 ~@2 [c#4,e4,a4] ~ a2 ~ e3 ~ [e4,a4]@2 [g#3,b3] ~, ~@12 c#4 ~@3", // A A5 G#m
  AM: "[e3 ~ [d4,e4,g#4,b4] [e3,b3] ~@4 [d4,b4]@4 e3@2 ~@2 [d4,a4]@3 ~ a3 ~ [d4,f#4,a4] ~ d3 ~ a3 ~ [d4,f#4,a4]@2 e3 a2@2 ~ [c#4,e4,a4] ~ e3@4 [c#4,e4,a4]@3 ~ [c#4,e4,g#4]@2 ~@2, ~@8 [e4,g#4]@6 ~ f#4@4 ~@25 a4 ~@3, ~@16 d3 ~@31]/3", // E7 E5 G D5 D A C#m E
  AN: "[[c#4,e4,g4]@3 e3 ~@3 a2 ~@2 e3 ~ [c#4,e4,g4]@3 [f#3,a3,d4]@3 ~ [d4,f#4,d5] [a4,c5,d5] ~@3 d2 ~ [d4,f#4,a4,c5,d5] ~@5, ~@6 [c#4,e4,g4]@2 ~@7 [a5,d6,f#6] ~@16]/2", // C#dim D D7 C#dim D
  AO: "[d4,f#4,a4,c5,d5] ~@3 [d2,d3] ~@2 [d4,f#4,a4,c5,d5] ~@3 d3 [d4,f#4,a4,c5,d5] ~@3", // D7 D D7
  AP: "a2@4 [a4,c#5,e5,a5] ~@3 a3 ~ [c#5,a5] [a4,e5,a5] ~@4", // A F#m A5
  AQ: "[a4,c#5,e5,a5] ~@3 [e3,a3] ~ c#5 [a4,e5,a5] ~@2 a3 [a2,c#3,e3,a3] [a4,c#5,e5,a5] ~@2 f#3", // A A5 A
  AR: "d#3 ~@2 f#5 [b4,d#5,f#5] ~@5 [b4,d#5,f#5] ~@5", // B
  AS: "[b4,d#5,f#5] ~@3 [d#3,f#3] ~ [b4,d#5,f#5] ~@3 [f#3,a3] a3 [b4,d#5,f#5,a5] ~@3", // B D#m B F#m B7
  AT: "a3 ~@3 [b4,d#5,f#5,a5] ~@3 [f#3,a3] ~@2 [b4,d#5,f#5,a5] ~@4", // B7 F#m B7
  AU: "e2@4 e3 ~ [e2,e3,b4,e5,g#5] e5 ~@8, ~@3 b5 ~@4", AV: "~@2 [a2,e4] ~ [a2,c#4,e4,a4] ~@3, ~@4 [c#4,a4] ~@11",
  AW: "~@4 [d3,d4,a4] ~@8 [b4,c#5,d5]@3, ~@2 f#4 ~ [d3,c#7,d7]@2 [e5,f#5,g5]@2, ~@9 [f#6,g6,a6,b6]@7, ~@5 [d6,e6]@3, ~@11 [a5,b5,c#6]@5", // D5 Bm Dmaj7 Em Gmaj7 Dsus2 A
  AX: "a2@2 [c#4,e4,a4] ~@3 e3 ~ [c#4,e4,a4]@2 ~@2 a2@4", // A
  AY: "[c#4,e4,a4]@3 e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 ~ a4@2 a3 ~, ~@11 [c#4,e4]@2 ~@3", // A C#m
  AZ: "d3@2 [d4,f#4,a4] a3 ~@4 [d4,f#4,a4]@2 ~ d3@4 ~", // D
  BA: "[[d4,f#4,a4]@3 a3 ~@2 [d4,f#4,a4] ~ d3 ~ a3 ~ a4@2 e3 a2@2 ~ [c#4,e4,a4] e3@3 ~ [c#4,e4,a4]@2 ~@2 a2@4 [c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] ~ a2 ~ e3 ~ c#4 ~ [a3,b3] e3@2 ~ [d4,e4,g#4,b4] e3@5 b4@3 e3@3 a3 ~ d3@2 ~ a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@2 ~ e3 a2@2 ~ [c#4,e4,a4] a2@2 ~@2 [c#4,e4,a4]@3 ~ e3@4 [c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 [c#4,e4,a4]@2 ~@3, ~@11 [d4,f#4]@2 ~@30 [e4,a4]@3 ~@10 [d4,e4,g#4]@6 ~ [d4,f#4,a4]@4 ~@16 e3 ~@28]/7", // D A Asus2 E7 D A D A5 …
  BB: "~@3 [a2,c#4,e4,a4] ~@3 [a2,e4,a4]@2 ~@7, ~@7 c#4 ~@8", // A A5
  BC: "[~@3 [d3,d4,f#4,a4] ~@3 [f#4,a4]@2 ~@6 a2@4 [c#4,e4,a4]@4 e3 ~@2 [c#4,e4,a4] a2@2 ~@3 c#4@2 ~ e3 ~@2 [c#4,e4,a4] ~@3 e3 [c#4,e4,a4]@3 a3 d3@2 ~ [d4,f#4,a4] a3@2 ~@2 [d4,f#4,a4]@3 ~ d3@4 [d4,f#4,a4]@4 a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@3 e3 a2@2 ~ [c#4,e4,a4] e3@4 [c#4,e4,a4]@3 ~ a2@4 [c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 [e4,a4]@3 [g#3,b3] e3, ~@7 [d3,d4] ~@23 [e4,a4]@3 ~@73 c#4 ~@4]/7", // D F#m A D A A5 G#m D …
  BD: "[~@2 [d4,e4,g#4,b4] [e3,b3] ~@3 b4@4 e3@2 ~@2 [d4,f#4,a4]@3 ~ a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@2 ~ e3 a2@2 ~ [c#4,e4,a4] e3@4 [c#4,e4,a4]@2 ~@2 [c#4,e4,g#4]@2 ~@2 [c#4,e4]@4 e3 ~@3 a2 ~@2 e3 [c#4,e4,g4]@3 ~ [f#3,a3,d4]@4 [g3,b3,d4]@3 ~ [f#3,a3,d4]@3 ~@4 [f#3,d4]@2, ~@7 [d4,e4,g#4]@6 ~@2 d3 ~@27 a4 ~@10 [c#4,e4]@2 ~@22 a3 ~]/5", // E7 E5 D A C#m C#dim D G …
  BE: "[~@2 [a3,d4] [g3,b3,d4]@3 ~ [f#3,a3,d4]@4 d4@2 ~@2 [a3,e4]@3 ~ [a3,d4,f#4]@3 ~ [c#4,e4]@4 a3 ~@2 [c#4,e4]@2, ~@14 c#4@5 ~@4 a3@2 ~@5 a3 ~]/2", // D5 G D A5 D C#m
  BF: "[~@2 [a3,c#4,e4] [a3,d4,f#4]@3 ~ [a3,c#4,e4]@4 e4@2 ~ c#4 [f#3,a3,c#4]@2 ~ [a3,c#4] ~@3 [f#3,a3,c#4]@4 ~ [f#3,a3,c#4]@3 ~ f#3, ~@11 a3 ~@6 f#3@2 ~@12]/2", // A D A F#m A F#m
  BG: "[~@2 [f#3,a3,b3,d#4] ~@3 f#3 [f#3,a3,b3]@2 ~ [f#3,a3,b3,d#4] ~@4 [f#3,a3,b3,d#4]@2 ~@2 [f#3,a3,b3,d#4]@2 ~@5 [f#3,a3,d#4]@3 ~ b3 [g#3,b3,e4]@3 ~ [a3,c#4,e4]@3 ~ [g#3,b3,e4]@3 ~@6, ~@7 d#4 ~@18 b3 ~@21]/3", // B7 D#dim E A E
  BH: "~@3 [a2,c#4,a4] ~@3 [a2,e4,a4]@2 ~@7, ~@3 e4@2 ~@2 c#4 ~@8", // A A5
  BI: "[~@3 [d3,d4,f#4,a4] ~@3 [f#4,a4]@2 ~@6 a2@4 [c#4,e4,a4]@4 e3 ~@2 [c#4,e4,a4] a2@2 ~@2 [c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] ~@3 e3 [c#4,e4,a4]@3 a3 d3@2 ~ [d4,f#4,a4] a3@2 ~@2 [d4,f#4,a4]@3 ~ d3@4 [d4,f#4,a4]@4 a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@3 e3 a2@2 ~ [c#4,e4,a4] e3@4 [c#4,e4,a4]@3 ~ a2@4 [c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~@2 e3 [e4,a4]@3 [g#3,b3] e3, ~@7 [d3,d4] ~@99 c#4 ~@4]/7", // D F#m A D A A5 G#m D
  BJ: "[~@2 [d4,e4,g#4,b4] [e3,b3] ~@3 [d4,b4]@4 e3@2 ~@2 [d4,f#4,a4]@4 a3 ~@2 [d4,f#4,a4] d3 ~@2 a3 [d4,f#4,a4]@2 ~ e3 a2, ~@7 [e4,g#4]@6 ~@2 d3 ~@16]/2", // E7 E5 G D E
  BK: "[~@2 [c#4,e4] e3@4 [c#4,e4,a4]@3 ~ [c#4,e4,g#4]@2 ~@2 [c#4,e4,g4]@4 e3 ~@3 a2 ~@2 e3 [c#4,e4,g4]@3 ~ [f#3,a3,d4]@3 ~ [d4,a4,c5]@2 ~ d2 [d4,b4]@2 ~ [d4,f#4,a4] ~@3 [d2,d3] [d4,a4,c5]@2 ~@2 [d4,g4,b4]@2 ~ [d4,f#4,a4]@3 ~ [d2,d3] [d4,a4,d5] ~@2 e3 a2@4 [a4,e5,g5]@2 ~ a3 [a4,f#5]@2 ~ [a4,c#5,e5] ~@3 a3 [a4,e5]@2 ~@2 f#5@2 ~ [c#5,e5]@4 [a2,a3] [a4,e5]@3 f#3 [b4,d#5,f#5]@2 ~@2 [b4,f#5]@2 ~ b3 [b4,e5,g#5]@2 ~@2 [b4,e5,g#5]@2 ~ [d#3,f#3,b3] [b4,a5]@2 ~@2 [b4,f#5,a5]@2 ~ b3 [b4,e5,g#5]@2 ~@2 [b4,e5,g#5]@2 ~ [f#3,b3] [b4,d#5,f#5], ~@2 a4@2 ~@7 a4 ~@10 [c#4,e4,g4]@2 ~@7 [a5,d6,f#6] ~@3 g#4 ~@3 g4 ~@7 g#4 ~@23 d5 ~@7 [d#5,g5] ~@3 a4@7 ~@5 b2@4 ~@29, ~@83 d5 ~@15 d#5 ~@11 f#5 ~@16]/8", // C#m A C#m C#dim D D7 G D …
  BL: "[[b4,d#5,f#5] ~ [f#3,b3] [b4,d#5,f#5] ~ g#5 g#5@4 [b2,d#3,f#3,b3] [b4,a5]@2 [f#2,a#2] b2 [e5,b5,e6]@2 ~@2 [e2,b5,e6]@2 ~ [e2,e3,e5,b5,e6]@2 [a5,c6,d6] [d5,e5,f5,g5] [a4,b4,c5,d5] [e4,f4,g4] [c4,d4,e4] [a3,b3] [d3,e3,f3,g3] a2, ~@5 [b4,e5]@4 ~@2 [e5,b5] ~@2 e2@3 ~@2 [e3,e5,a#5] ~@12, ~@15 a#5 ~@6 [a#5,d6] ~@9]/2", // B B5 B B7 F# E5 D7 Em7 …
  BM: "[~@3 [d3,d4,a4] ~@9 b4@2 a2@2 [c#4,e4,a4] ~@3 e3 ~ [c#4,e4,a4]@3 ~ a2@4 [c#4,e4,a4]@3 ~ e3 ~@2 [c#4,e4,a4] a2 ~ e3 ~ [c#4,e4,a4]@2 a3 ~ d3@2 [d4,f#4,a4] ~ a3 ~@3 [d4,f#4,a4]@2 ~@2 d3@4 [d4,f#4,a4]@3 ~ a3 ~ [d4,f#4,a4] ~ d3 ~ a3 ~ [d4,f#4,a4]@2 e3 ~ a2@2 [c#4,e4,a4] ~ e3@3 ~ [c#4,e4,a4]@2 ~@2 a2@4 [c#4,e4,a4]@4 e3 ~@2 [c#4,e4,a4] a2 ~ e3 ~ [e4,a4]@2 [a3,b3] ~ e3, ~@3 f#4@2 ~@2 [d3,c#7,d7]@4 [e5,f#5,g5,a5] [c#5,d5]@3 ~@92 c#4 ~@4, ~@8 [a6,b6]@7 ~@97, ~@9 [d6,e6,f#6,g6]@6 ~@97, ~@10 [b5,c#6]@5 ~@97]/7", // D5 A D A A5 Asus2 Dmaj7 F#m7 …
  BN: "[~ [d4,e4,g#4,b4] ~ e3@4 b4@3 e3@3 a3 ~ [d4,f#4,a4]@4 a3 ~ [f#4,a4] d4 d3 ~ a3 ~ [d4,f#4,a4]@2 e3 ~ a2@2 [c#4,e4,a4] ~ a2@2 ~@2 [c#4,e4,a4]@3 ~ e3@4 [c#4,e4,a4]@3 ~ e3 ~ [c#4,e4,a4] ~ a2 ~ e3 ~ [c#4,e4,a4]@2 ~@2 e3@2 [d4,e4,g#4,b4] ~ e3@4 b4@3 ~ e3@2 a3 ~ [d4,f#4,a4]@4 a3 ~ [d4,f#4,a4] ~ d3 ~ a3 ~ [d4,f#4,a4]@2 e3 ~ a2@2 [c#4,e4,a4] ~ a2@2 ~@2 [c#4,e4,a4]@3 ~ e3@4 [c#4,e4,a4]@3 ~ e3 ~ [c#4,e4,a4] ~ a2 ~ e3 ~ [c#4,e4,a4]@3 ~ e3, ~@7 [d4,e4,g#4]@6 ~@2 d3@2 ~@18 e3 ~@35 [d4,e4,g#4]@6 ~@2 d3@2 ~@18 e3 ~@28]/8", // E7 D F#m D A E7 D A …
  BO: "[~ [d4,e4,g#4,b4] ~ e3@4 [d4,e4]@4 e3@2 a3 ~ [d4,a4]@4 a3 ~ [d4,f#4,a4] ~ d3 ~ a3 ~ [d4,f#4,a4]@2 e3 ~ [a3,c#4,e4,a4]@2 ~@4 [a2,a3,c#4,e4,a4]@2 ~@5 [a2,e3,a3,c#4,e4,a4]@2 ~@2, ~@7 g#4@7 f#4@4 ~@30, ~@7 b4@3 ~@5 d3@2 ~@14 [a2,e3] ~@5 e3 ~@10]/3", // E7 Dsus2 D5 D A A5
})).s("gm_piano").gain(0.46)

// chords · electric guitar jazz · "JZ.GTR/SAX"
const electric_guitar_jazz = note(`<
  ~ A B C@8 ~@2 D E@8 ~@11 D E@8 ~@2 F@2 ~@2 G@2 H I J K L ~@10 K M ~@18 N M ~@9 O@2 ~@2 P@3 Q@2 K M ~@17
>`.pickRestart({
  A: "~@4 [e3,a3]@2 ~@2 [e3,a3]@3 ~@5", B: "~@4 [a3,d4]@2 ~@2 [a3,d4]@3 ~@5", C: "[~ [c#4,e4]@63]/8",
  D: "~ a3 a3@2, ~@4 e3@2 ~@2 e3@3 ~@5", E: "[~ a3 a3@30, ~@4 d4@2 ~@2 d4@3 ~@117]/8",
  F: "[~@7 b4@2 ~@2 b4@2 ~ a4@5 ~@13]/2", G: "[~@3 c#5@2 ~@3 b4@2 ~ b4@2 ~ a4@9 g#4@9]/2", H: "f#4", I: "~ d#4@13 ~@2",
  J: "[b3,e4]@2 ~ c#4@3 ~ [b3,e4]@4 ~@5, ~@2 [b3,e4]@3 ~@11", K: "~@3 [e3,a3]@2 ~@2 [e3,a3]@3 ~@6",
  L: "~@3 [a3,d4]@2 ~@3 a3@3 ~@5, ~@7 d4@3 ~@6", M: "~@3 [a3,d4]@2 ~@2 [a3,d4]@3 ~@6",
  N: "~@3 [e3,a3]@2 ~@2 [e3,a3]@4 ~@5", O: "[~@7 b4@2 ~@2 b4@2 a4@5 ~@14]/2",
  P: "[~@3 c#5@2 ~@2 b4@2 ~@2 b4@2 a4@10 g#4@8 f#4@17]/3",
  Q: "[d#4@14 ~ [b3,e4]@2 e4@2 c#4@3 ~ [b3,e4]@4 ~@5, ~@17 b3 ~@14]/2", // E5
})).s("gm_electric_guitar_jazz").gain(0.6)

// chords · alto sax · "JZ.GTR/SAX"
const alto_sax = note(`<
  ~@3 A B ~@3 C D E F G ~@2 F B ~@3 C D E F H ~@10 I@2 ~@3 J K L M@8 ~@4 N@8 O@4 N@8 P@8 ~@4 Q@8 R@8 ~@4 S@8 T@4 U@5
>`.pickRestart({
  A: "~@3 a3@3 [a3,c#4,e4] ~ [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@2 [a3,c#4,e4] ~", // A
  B: "[a3,c#4,e4] ~ [a3,d4,f#4] [a3,c#4,e4] ~@4", C: "~@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@6",
  D: "~@2 [g#3,b3,e4]@2 ~@2 [g#3,b3,e4] ~ [g#3,b3,e4]@2 [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~", // E
  E: "~@2 [f#3,a3,d4]@2 ~@2 [f#3,a3,d4] ~ [f#3,a3,d4]@2 [f#3,a3,d4] ~ [f#3,a3,d4]@3 ~", // D
  F: "~@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 [a3,c#4,e4] ~", // A
  G: "[a3,c#4,e4] ~@7", H: "[a3,c#4,e4,a4]@2 ~@2 g#4@2 g4@9 ~",
  I: "[~@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@2 ~@2 [a3,d4,f#4]@3 [a3,c#4,e4]@2 ~@8]/2", // A D A
  J: "~@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] [a3,c#4,e4]@2 ~@7", // A
  K: "~@2 [g#3,b3,e4]@2 ~@2 [g#3,b3,e4] [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3,e4]@3 ~@2", // E
  L: "~@2 [f#3,a3,d4]@2 ~@2 [f#3,a3,d4] [f#3,a3,d4]@3 [f#3,a3,d4] [f#3,a3,d4]@3 ~@2", // D
  M: "[~@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@113]/8", // A
  N: "[~@2 [a3,c#4,e4]@4 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] a3@4 [a3,d4,f#4]@3 [a3,c#4,e4]@60 [a3,c#4,e4]@4 [a3,c#4,e4] e4@11 [g#3,b3]@2 ~@2 [g#3,b3,e4] [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3]@3 ~@4 [f#3,d4]@2 ~@2 [f#3,a3,d4] [f#3,a3,d4]@3 [f#3,a3,d4] [f#3,d4]@3 ~@2, ~@15 [c#4,e4]@7 ~@65 c#4@41, ~@87 a3@27 a3@4 ~@5 a3@5, ~@98 e4@4 ~@5 e4@21]/8", // A D A G#m E G#m D C#m
  O: "[~@2 [a3,c#4,e4]@4 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] a3@4 [a3,d4,f#4]@3 [a3,c#4,e4]@42, ~@15 [c#4,e4]@7 ~@42]/4", // A D A C#m
  P: "[~@2 [a3,c#4,e4]@4 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] a4@2 ~@2 g#4@2 g4@10 ~@97, ~@15 [a3,c#4,e4]@113]/8", // A
  Q: "[~ [a3,c#4,e4]@5 [a3,c#4,e4] [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@3 [a3,c#4,e4] a3@4 [a3,d4,f#4]@3 [a3,c#4,e4]@60 [a3,c#4,e4]@3 [a3,c#4,e4]@2 e4@11 [g#3,b3,e4]@3 [g#3,b3] ~ [g#3,b3,e4]@2 [g#3,b3] ~ [g#3,b3]@3 ~@3 [f#3,d4]@2 ~@2 [f#3,d4] ~ [f#3,a3,d4]@2 [f#3,d4] ~ [f#3,d4]@3 ~@2, ~@15 [c#4,e4]@7 ~@65 c#4@41, ~@87 a3@26 a3@4 a3@2 ~@2 a3@2 a3@5, ~@101 e4@2 ~@2 e4@2 e4@21]/8", // A D A E G#m E G#m D …
  R: "[~ [a3,c#4,e4]@4 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@113]/8", // A
  S: "[~ [a3,c#4,e4]@4 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 a3@4 [a3,d4,f#4]@2 [a3,c#4,e4]@60 [a3,c#4,e4]@4 [a3,c#4,e4]@2 e4@10 [g#3,b3]@2 ~@2 [g#3,b3] ~ [g#3,b3,e4]@2 [g#3,b3,e4] [g#3,b3]@3 ~@4 [f#3,d4]@2 ~@2 [f#3,d4] ~ [f#3,a3]@2 [f#3,d4] ~ [f#3,d4]@3 ~@2, ~@15 [c#4,e4]@6 ~@66 c#4@41, ~@87 a3@26 a3@4 a3@2 ~@2 a3@2 a3@5, ~@97 e4@4 e4@2 ~@3 e4@22, ~@118 d4@3 ~@7]/8", // A D A G#m E G#m D F#m …
  T: "[~ [a3,c#4,e4]@4 c#4 ~ [a3,e4]@2 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] a3@4 [a3,d4,f#4]@3 e4@12 [g#3,b3]@2 ~@2 [g#3,b3,e4] [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3]@3 ~@4 [f#3,d4]@2 ~@2 [f#3,a3,d4] [f#3,a3,d4]@3 [f#3,a3,d4] [f#3,d4]@3 ~@3, ~@5 [a3,e4]@2 ~@14 a3@28 a3@4 ~@5 a3@6, ~@6 c#4@3 ~@5 [c#4,e4]@7 c#4@43, ~@33 e4@4 ~@5 e4@22]/4", // A A5 A D G#m E G#m D …
  U: "[~ [a3,c#4,e4]@4 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [a3,c#4,e4] a3@4 [a3,d4,f#4]@3 e4@12 [g#3,b3]@2 ~@2 [g#3,b3,e4] [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3]@3 ~@4 [f#3,d4]@2 ~@2 [f#3,a3,d4] [f#3,a3,d4]@3 [f#3,a3,d4] [f#3,a3,d4]@4 e4 e4@6 a4@2 ~@5 a4@3 ~, ~@14 [c#4,e4]@7 c#4@41 ~@7 e4@9 ~@2, ~@21 a3@28 a3@4 ~@9 [a3,c#4]@15 ~@3, ~@33 e4@4 ~@5 e4@20 ~ a4@2 ~@15]/5", // A D G#m E G#m D C#m A
})).s("gm_alto_sax").gain(0.6)

// other · tenor sax · "PRG.CHANGE"
const tenor_sax = note("<~@45 A B C D E F G H ~@71>".pickRestart({
  A: "~@3 c5@2 ~@5 c5@2 ~@4", B: "c5@2 b4@2 ~@2 f#4@2 ~@2 a4 ~@5", C: "~@2 a4@2 ~@2 f#4 ~ e4@2 ~@2 c#4@2 ~@2",
  D: "c4@2 c#4@2 c4 ~ a3@3 ~@7", E: "~@2 b3@2 ~@2 c#4 ~@2 d#4@2 ~@2 e4@2 ~", F: "f#4@2 ~ g#4 ~@2 a4 ~@3 b4 ~@5",
  G: "~@2 b4@2 a4@2 ~@2 [d#4,b4] ~ a4@2 g#4 ~ f#4@2, ~@10 e5 ~@3 b4 ~", H: "[d#4,e5] ~@2 b2 ~@2 e2@2 ~@8, ~ e4 ~@6",
})).s("gm_tenor_sax").gain(0.58)

// other · tenor sax · "PRG.CHANGE" · soft notes
const tenor_sax_soft = note("<~@45 [~@4 b4@2 a4@2 f#4 ~@3 b4@2 ~ a4] [~@2 a4 ~@5] ~@4 [~@6 f#4 ~@5 d#5 ~@3] ~@72>")
  .s("gm_tenor_sax").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B A B A B A@4 C D A B A E A E A@4 F G@6 C@2 H A E A E A I J K L M N O P Q N R S T ~ U V W A I X K X Y X@2 ~ Z X
  Y X Y X Y X@4 AA AB@6 AC ~ Z X Y X Y X Y X Y P AD P AE P AF AG AH AI T ~ AJ X AK X AK X AK X AK X@3 AK X AL AM AN ~
>`.pickRestart({
  A: "x!2", B: "x ~@7 x ~@2 x ~@4", C: "x", D: "~@11 x ~@3 x", E: "x ~@3 x!2 ~@2", F: "x ~ x!2", G: "x!4",
  H: "~@5 x ~ x", I: "x ~@7 x ~ x ~@4 x", J: "~@8 x ~@6 x", K: "~@8 x ~ x ~@4 x", L: "~ x ~@2 x!2 ~@2",
  M: "x!2 ~ x ~@3 x", N: "x ~ x ~@4 x ~@2 x ~@4 x", O: "~@2 x ~@5 x ~ x ~@3 x!2", P: "~@2 x ~@4 x ~@2 x ~@4 x",
  Q: "~@2 x ~@2 x ~@2 x ~ x ~@2 x!2 ~", R: "~@2 x ~@4 x ~@2 x ~@2 x ~ x", S: "~@2 x ~ x ~ x!2 ~@2 x ~ x ~ x ~",
  T: "~@3 x ~@4", U: "~@5 x ~@2", V: "x ~@6 x ~@8", W: "x ~@6 x ~@2 x ~@5", X: "~@7 x ~@7 x", Y: "~@7 x ~@2 x ~@4 x",
  Z: "~@10 x ~@3 x!2", AA: "~@7 x ~@3 x ~@3 x", AB: "~@3 x ~@3 x ~@3 x ~@3 x", AC: "~@15 x", AD: "~@2 x ~@3 x ~@7 x!2",
  AE: "~@2 x ~@4 x ~@2 x ~@3 x!2", AF: "~@2 x ~ x ~@2 x ~@2 x ~ x ~ x!2", AG: "~@2 x ~@4 x ~ x ~@5 x",
  AH: "~ x ~@5 x ~ x ~@2 x ~@2 x", AI: "~ x ~ x ~@2 x!2 ~ x ~ x ~@2 x ~", AJ: "~@10 x ~@4 x", AK: "~@7 x ~ x ~@5 x",
  AL: "~@5 x ~@3 x ~@3 x ~ x", AM: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", AN: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<~@32 A ~@11 B ~@7 C ~@31 D ~@11 E ~@7 C ~@18 F>".pickRestart({
  A: "~ x!2 ~", B: "~@3 x", C: "~@3 x ~@12", D: "~@3 x ~@3 x ~@8", E: "~@11 x ~@4", F: "~@9 x ~@6",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@2 B C@9 D ~ B C E F@5 E F ~@8 D ~ G F@2 H I J K L G M ~@7 N ~@2 O P@4 Q P@4 ~@2 P@9 R ~@7 S ~@2 P@9 T ~@7 N ~@2 U
  V@5 W V@4 X V Y ~ S Z
>`.pickRestart({
  A: "x!2", B: "~@4 x ~@2 x!2 ~@3 x ~@2 x", C: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x", D: "x", E: "x ~@3 x ~ x ~ x ~@3 x ~@2 x",
  F: "x ~ x!3 ~ x!2", G: "~@2 x!3 ~ x!2", H: "x ~@3 x ~ x ~ x ~@3 x ~ x!2", I: "~@3 x ~@2 x ~ x ~@3 x ~ x ~",
// … 56 more lines

More by David Bowie