Strudelify

Because The Night

Patti Smith

KeyB minorTempo123 bpm
0:00/0:00
// Because The Night — Patti Smith
// 123 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 107 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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@8 B@4 C D E F G H I J K@2 L M N O P Q R S T U V W X@8 Y@2 Z AA AB AC@6 AD@2 AE@2 AF AG AH@2 AI AJ AK AL@2 AM AN AO
  AP AQ AR AS AT AU AV@2 AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP@8 BQ@3
>`.pickRestart({
  A: "[~@8 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@3 ~@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@3 ~ b4@3 ~ d5@4 c#5@3 ~@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@2, ~@8 [b2,f#3,b3]@12 [g2,d3,g3]@20 [a2,e3,a3]@11 b2@19 ~ [b2,f#3,b3]@12 [g2,d3,g3]@20 [a2,e3,a3]@13 ~@31 [g2,d3,g3]@20 [a2,a3]@11 d5@5 ~@73, ~@51 d5@5 ~@122 [b2,b3]@19 ~ [b2,f#3,b3]@13 ~@19 [a2,e3,a3]@12 [b2,f#3,b3]@14, ~@52 [f#3,b3]@19 ~@44 [b2,f#3,b3]@19 ~ [b2,f#3,b3]@13 ~@18 e3@13 f#3@19 ~@12 [g2,d3,g3]@20 ~@26]/8", // B5 G5 A5 B5 G5 A5 G5 A …
  B: "[~@2 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@3 ~ b4@4 d5@4 c#5@3 ~@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@3, ~@6 [b2,f#3,b3]@12 [g2,d3,g3]@19 [e3,a3]@12 [b2,b3]@19 ~ [b2,f#3,b3]@13 ~@19 [a2,e3,a3]@12 [b2,f#3,b3]@11 ~@4, ~@38 a2@11 d5@5 ~@74, ~@50 f#3@18 ~@13 [g2,d3,g3]@20 ~@27]/4", // B5 G5 A5 B B5 A5 B5 G5
  C: "~@5 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@5 ~@3 [a3,c#4,e4]@14 ~", // G A
  D: "~ [a3,c#4,e4]@2 ~@2 f#4@6 ~ [a3,d4,f#4]@6 ~@2 [a3,c#4,e4]@10 ~@2, ~@2 [a3,d4]@3 ~@11", // A D A D5
  E: "[a3,c#4,e4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4]@4 ~@4 [g3,b3,d4]@13 ~@3, ~@16 c4 ~@15", // A Bm G
  F: "[g3,b3,d4] ~@3 [g3,b3,d4]@3 ~@5 [b3,d4,f#4]@4 ~@4 [a3,c#4,e4]@10 ~@2", // G Bm A
  G: "~@4 [a3,d4,f#4] ~@3 [a3,d4,f#4]@4 ~@4 [g3,b3,d4]@13 ~@3", // D G
  H: "[g3,b3] ~@3 [g3,b3]@3 ~@5 b3@3 ~@4 [a3,c#4,e4]@9 ~@4, d4@2 ~ d4@3 ~@5 [d4,f#4]@3 ~@18", // G A D
  I: "~@3 [c4,e4,g4]@25 ~@4", J: "~@3 [b3,d4,f#4]@24 ~@5",
  K: "[~@3 [f#3,c#4]@35 a#3@2 ~@2 [a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4]@2 ~@2 [f#3,c#4] ~, ~@3 a#3@34 ~@5 f#3@2 ~@20]/2", // F#5 A#m F# F#5
  L: "~@2 [d4,f#4]@2 ~@2 [b3,d4,f#4]@5 ~@3 [g3,d4]@2 ~@2 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~, ~@2 b3 ~@11 b3 ~@17", // D Bm G5 G
  M: "~@2 [g3,b3,d4]@5 ~@3 [a3,c#4,e4]@5 ~@3 [c#4,e4]@2 ~@2 [b3,d4,f#4]@10, ~@18 a3 ~@13", // G A C#m Bm
  N: "~@2 [d4,f#4]@2 ~@2 [b3,d4,f#4]@4 ~@4 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~, ~@2 b3 ~@29", // D Bm G
  O: "~@2 [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@4 ~@3 [b3,d4,f#4]@14 ~", // G A Bm
  P: "~ [d4,f#4]@2 ~@2 [b3,d4,f#4]@5 ~@3 [g3,b3] ~@3 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~@2, ~ b3 ~@11 d4@2 ~@17", // D Bm G
  Q: "~ [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@5 ~@3 [a3,c#4,e4]@2 ~@2 [b3,d4,f#4]@10 ~", // G A Bm
  R: "~ [b3,d4] ~@3 [b3,d4,f#4]@4 ~@4 [f3,g3,a3,b3] ~@3 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~@2, ~ f#4@2 ~@10 d4@2 ~@17", // Bm G7 G
  S: "~ [g3,b3,d4]@4 ~@4 a3@3 ~@4 [b3,d4,f#4]@9 ~@7, ~@2 [c#4,e4] ~@5", // G Bm C#m
  T: "~ d5 c#5 d5 e5 d5 c#5 d5, [f#3,b3]@13 ~@19, b4 ~@2 [g2,d3,g3]@5, ~ b2@12 ~@19", // B5 G5
  U: "b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4, [a2,e3,a3]@12 [b2,f#3,b3]@19 ~", // A5 B5
  V: "b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@3 e3, [b2,f#3,b3]@3 [g2,d3,g3]@5", // B5 G5
  W: "b4@3 ~ d5@4 c#5@3 ~@4 f#5@3 ~ d5@4 c#5@4 d5@4 [b2,f#3,b3,b4], [a2,a3]@11 b2@19 ~@2, ~@11 d5@5 ~@16, ~@12 [f#3,b3]@19 ~", // B5 A B5
  X: "[~@3 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@3 ~ b4@3 ~ d5@4 c#5@3 ~@4 f#5@3 ~ d5@4 c#5@4 d5@4 b2 ~@3 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@3 ~ b4@3 ~ d5@4 c#5@3 ~@4 f#5@3 ~ d5@4 c#5@4 ~@4 [g3,b3,d4]@2 ~, b2@11 [g2,d3,g3]@20 [a2,e3,a3]@12 [b2,f#3,b3]@19 ~ [b2,f#3,b3]@12 [g2,d3,g3]@19 e3@12 b2@19 ~@2 b2@12 ~@19 [a2,e3,a3]@13 ~@31 [g2,d3,g3]@20 [a2,a3]@11 d5@5 ~@18, ~@95 [a2,a3]@11 d5@5 ~@15 b4@4 ~@8 [g2,d3,g3]@20 ~@12 [b2,f#3,b3]@19 ~ [b2,f#3,b3]@12 ~@31 b2@19 ~@4, ~@107 [f#3,b3]@19 [f#3,b3]@13 ~@82 e3@13 [f#3,b3]@19 ~@3]/8", // G G5 A5 B5 G5 A5 G5 A …
  Y: "[~ [g3,b3,d4]@5 ~@3 [a3,c#4,e4]@12 ~@4 [a3,c#4,e4]@2 ~@2 [a3,d4,f#4]@6 ~@2 [a3,d4,f#4]@6 ~@2 [a3,c#4,e4]@10 ~@2 [a3,c#4,e4] ~@3 [b3,d4,f#4] ~@2]/2", // G A D A Bm
  Z: "~ [b3,d4,f#4]@4 ~@4 [g3,b3,d4]@13 ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]@3, ~@9 c4 ~@22", // Bm G
  AA: "~@4 [b3,d4,f#4]@4 ~@4 [a3,c#4,e4]@10 ~@6 [a3,f#4] d4 ~@2", // Bm A D
  AB: "[a3,d4,f#4]@4 ~@4 [g3,b3,d4]@13 ~@3 [g3,b3] ~@3 [g3,b3,d4]@3 ~, ~@12 d4 ~@3", // D G
  AC: "[~@4 [b3,d4,f#4]@3 ~@5 [a3,c#4,e4]@9 ~@7 [c4,e4,g4]@25 ~@7 [b3,d4,f#4]@24 ~@7 [f#3,c#4]@36 a#3@2 ~@2 [a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,a#3,c#4] ~@3 [f#3,c#4]@2 ~@2 [f#3,c#4] ~@3 [d4,f#4]@2 ~@2 [b3,d4,f#4]@5 ~@3 [g3,d4]@2 ~@2 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4]@5, ~@91 a#3@34 ~@6 f#3@2 ~@14 a#3 ~@7 b3 ~@11 b3 ~@24]/6", // Bm A C Bm F#5 A#m F# F#5 …
  AD: "[~@2 [a3,c#4,e4]@5 ~@3 [c#4,e4]@2 ~@2 [b3,d4,f#4]@10 ~@2 [b3,d4,f#4]@2 ~@2 [b3,d4,f#4]@4 ~@4 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@2, ~@10 a3 ~@53]/2", // A C#m Bm G
  AE: "[~@2 [a3,c#4,e4]@4 ~@4 [b3,d4,f#4]@14 ~@2 [b3,d4] ~@3 [b3,d4,f#4]@5 ~@3 [b3,d4]@2 ~@2 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~@3 [g3,d4]@4 ~@2, ~@26 f#4@2 ~@10 g3 ~@18 b3@3 ~@4]/2", // A Bm G G5
  AF: "~ [a3,c#4,e4]@5 ~@3 [a3,c#4,e4]@2 ~@2 [b3,d4,f#4]@10 ~@2 [b3,d4] ~@3 [b3,d4,f#4]@3, ~@25 f#4@2 ~@5", // A Bm
  AG: "~@5 [f3,g3,a3,b3] ~@3 [g3,b3,d4]@10 ~@2 [b3,d4]@2 ~@2 [g3,b3,d4]@6 ~, ~@5 d4@2 ~@14 g3 ~@10", // G7 G Bm G
  AH: "[~ [a3,c#4,e4]@6 ~@2 [b3,d4,f#4]@13 ~@3 [g3,b3,d4]@11 ~ [a3,c#4,e4]@13 ~@2 [c#4,e4] ~@3 f#4@6 ~@2, ~@52 a3@2 ~ [a3,d4]@6 ~@3]/2", // A Bm G A C#m D5
  AI: "[a3,d4,f#4]@6 ~@2 [a3,c#4,e4]@10 ~@2 [a3,e4] ~@3 [b3,d4,f#4]@8, ~@8 [d4,d#4] ~@11 c#4@2 ~@10", // D A A5 Bm D#maj7
  AJ: "~@4 [g3,b3,d4]@13 ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@4", // G
  AK: "[b3,d4,f#4]@4 ~@2 c#4 ~ [a3,c#4,e4]@10 ~@6 [a3,d4,f#4]@8, e4 ~@31", // Bm A D
  AL: "[~@4 [g3,b3,d4]@13 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@4 [b3,d4,f#4]@4 ~@5 a3@10 ~@5 [g3,b3,d4]@9, ~@4 c4 ~@34 [c#4,e4]@10 ~@15]/2", // G Bm G C#m
  AM: "~@3 [g3,b3,d4]@10 ~@2 [g3,b3,d4]@7 ~ [g3,b3,d4]@9, ~@23 e4 ~@8", // G
  AN: "~@19 [a3,d4] ~@3 [a3,d4,f#4]@9, ~@19 f#4@2 ~@11", // D5 D
  AO: "~@3 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4]@10 ~@2 [a3,f#4] ~@3 [a3,d4,f#4]@9, ~@19 d4@2 ~@11", // A D
  AP: "~@3 [a3,e4]@2 ~@2 [a3,c#4,e4]@2 ~@2 f#4@2 ~@5 d4 b3 ~@3 d4@8 ~, ~@3 c#4 ~@6 [a3,d4]@3 ~@5 f#4@2 ~@2 [b3,f#4]@9 ~", // A5 A D5 B5
  AQ: "~@2 [a3,c#4] ~@3 [a3,c#4,e4]@8 ~@4 [a3,f#4] ~@3 [a3,d4,f#4]@8 ~@2, ~ e4 ~@7 d4 ~@6", // A D
  AR: "~@2 [a3,c#4,e4] ~@3 a3@4 [a3,d4,f#4]@3 ~@5 [b3,f#4] ~@3 [b3,d4,f#4]@8 ~@2, ~@6 [c#4,e4]@7 ~@5 d4@2 ~@12", // A D B5 Bm C#m
  AS: "~@2 [a3,c#4] ~@3 [a3,c#4,e4]@8 ~@4 [d4,f#4]@2 ~@2 [a3,d4,f#4]@8 ~@2, ~@2 e4@2 ~@14 a3 ~@13", // A D
  AT: "~@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]@9 ~@2 [d4,g4,b4] ~@3 [d4,g4,b4]@10 ~, ~@6 g3 ~@25", // A G
  AU: "~ [d4,b4]@2 ~@2 [d4,g4,b4]@8 ~@4 [g4,b4,d5] ~@3 [g4,b4,d5]@10 ~, ~ g4 ~@30", // G
  AV: "[~ [g4,b4,d5] ~@3 [g4,b4,d5]@6 c5 ~ [e4,f4,g4,a4] ~ [g3,a3,b3,c4,d4] ~ [e3,f3] ~@3 [b3,d4,f#4]@12 c#4@12 d4@6 ~@2 d4@11, ~@5 e5 ~@58]/2", // G Fmaj7 G Fmaj7 Bm
  AW: "e4@12 f#4@5 [g4,b4,d5] ~@2 [g4,b4,d5]@12", AX: "[g4,b4,d5]@10 ~@2 [g4,b4,d5]@2 ~@14 [f#4,c#5] ~@3",
  AY: "[f#4,a#4] ~@3 [f#4,a#4,c#5] ~@3 [f#4,a#4,c#5] ~@3 [f#4,a#4,c#5] ~@3 [f#4,a#4,c#5] ~@3 [f#5,c#6] ~@3 [f#5,a#5,c#6] ~@3 [f#5,a#5,c#6] ~@3", // F# F#5 F#
  AZ: "[f#5,a#5,c#6] ~@3 [f#5,a#5,c#6] ~@3 [f#5,a5,c#6] ~@3 [f#6,g6,g#6,a6,a#6,b6,c7,c#7,d7,d#7,e7,f7,f#7,g7,g#7,a7,a#7] ~@3 [d#5,f#5,g#5,a#5,c#6,d#6,e6] ~@3 [b3,d4,f#4]@2 ~@2 [b3,d4,f#4]@4 ~@4", // F# F#m D#m7 Bm
  BA: "[b3,d4]@2 ~@2 [g3,b3,d4]@10 ~ [g3,b3,d4] ~@4 g3@5 ~@2 [a3,c#4,e4]@5, g3 ~@18 [b3,d4]@6 ~@7", // Bm G A Bm
  BB: "~@3 [c#4,d#4,e4]@2 ~@2 [b3,d4,f#4]@10 ~@2 [b3,d4,f#4] ~@3 [b3,d4,f#4]@4 ~@4 [g3,b3,d4], ~@3 [g3,a3] ~@28", // C#m Bm G Gsus2
  BC: "~@3 [g3,b3,d4]@10 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@5", // G A
  BD: "~@3 [b3,d4,f#4]@13 ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4]@5 ~@3 [g3,b3,d4]", // Bm G
  BE: "~@3 [g3,b3,d4]@10 ~ [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@6", // G A
  BF: "~@2 [c#4,e4]@2 ~@2 [b3,d4,f#4]@10 ~@2 [b3,d4,f#4] ~@3 [b3,d4,f#4]@5 ~@3 [g3,b3,c4,d4] ~, ~@2 a3 ~@29", // C#m Bm G
  BG: "~@2 [g3,b3,d4]@9 ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@5 ~", // G A
  BH: "~@2 [b3,d4,f#4]@14 ~@2 [b3,d4,f#4] ~@3 [b3,d4,f#4]@5 ~@3 [g3,b3,d4] ~", // Bm G
  BI: "~@2 [g3,b3,d4]@9 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4]@5 ~@3 [a3,c#4,e4]@5 ~@2", // G A
  BJ: "~ [a3,c#4,e4] ~@3 [b3,d4,f#4]@10 ~@2 [b3,d4,f#4] ~@3 [b3,d4,f#4]@4 ~@4 [g3,b3,d4] ~@2", // A Bm G
  BK: "~ [g3,b3,d4]@9 ~@3 [g3,b3] ~@3 [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@5 ~@2, ~@13 d4@2 ~@17", // G A
  BL: "~ [b3,d4,f#4]@15 ~ [b3,d4,f#4] ~@3 [b3,d4,f#4]@5 ~@3 [g3,b3,d4] ~@2, ~ g#4 ~@30", // Bm G
  BM: "~ [g3,b3,d4]@9 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4]@4 ~@4 [a3,c#4,e4]@5 ~@3", // G A
  BN: "[a3,e4] ~@3 [b3,d4,f#4]@10 ~@2 [b3,d4,f#4] ~@3 [b3,d4,f#4]@5 ~@3 [g3,b3,d4] ~@3, c#4 ~@15", // A5 Bm G
  BO: "[g3,b3,d4]@9 ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]@5 ~@3 [a3,c#4,e4]@5 ~@3", // G A
  BP: "[b3@16 b4@4 d5@4 c#5@4 d5@3 e5@5 d5@3 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@4 e5@4 d5@4 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@4 d5@3 e5@5 d5@3 c#5@4 d5@4 b4@3 ~ d5@4 c#5@4 d5@4 f#5@3 ~ d5@4 c#5@4 d5@4 b4@4 d5@4 c#5@5 d5@4 e5@4 d5@4 ~ c#5@4 d5@5 b4@4 ~ d5@5 c#5@5, [d4,f#4]@17 ~@47, ~@16 b3@43 [b2,f#3,b3]@19 ~ [b2,f#3,b3]@12 ~@20 [a2,e3,a3]@13 ~@31 [g2,d3,g3]@20 ~@11 [b2,f#3,b3]@19 ~ [b2,f#3,b3]@13 ~@22 [a2,e3,a3]@15, ~@16 [b2,f#3]@12 [g2,d3,g3]@19 [a2,e3,a3]@13 ~@31 [g2,d3,g3]@20 ~@12 [b2,f#3,b3]@19 ~ [b2,f#3,b3]@13 ~@18 [a2,e3,a3]@13 ~@32 [g2,d3,g3]@22 ~@15]/8", // D B5 A5 G5 B5 A5 B5 G5 …
  BQ: "[d5@5 f#5@5 ~ d5@5 c#5@6 d5@4 ~@3 [b2,f#3,b3]@20 ~@47, [b2,f#3,b3]@26 [b4,d5]@43 ~@27, ~@14 f#5@21 ~@13]/3", // B5 Bm
})).s("gm_piano").gain(0.78)

// chords · drawbar organ · "Organ"
const drawbar_organ = note("<~@22 A@8 ~@21 B@8 C@2 D@2 E@2 F@3 G H I J K L@3 M N@3 O@8 P@6 Q@3 ~@10>".pickRestart({
  A: "[~@2 b6@51 a6@12 b6@116 a6@11 b6@57 ~@7, ~@2 [b5,f#6]@247 ~@7]/8", // B5
  B: "[~@27 b6@52 a6@11 b6@115 a6@12 b6@39, ~@13 f#6@115, ~@27 b5@229]/8", C: "[~@25 d6@11 a5@16 ~ a5@3 ~ b5@7]/2",
  D: "[~ b5@7 a5@15 ~ b5@12 g5@15 ~ g5@2 ~@2 g5@8]/2", E: "[b5@8 a5@16 d6@11 g5@15 ~ g5@2 ~@2 g5@8 ~]/2",
  F: "[b5@7 a5@15 ~@33 b6@26 ~@15, ~@23 g5@32 c7 ~@40, ~@31 b5@49 ~@16, ~@13 d6@14 ~@5, ~@47 g6@34 ~@15]/3",
  G: "~@11 a5@7 d6@2 ~@2 d6@10", H: "~@2 a5@2 ~@2 a5@11 ~ b5@2 ~@2 b5@10", I: "~@2 a5@2 ~@2 a5@11 ~ d6@2 ~@2 d6@10",
  J: "~@2 a5@2 ~@2 a5@10 ~@2 b5 ~@3 b5@10", K: "~ a5@2 ~@2 a5@12 [d6,e6]@2 ~@2 d6@11",
  L: "[~@2 a5@2 ~@2 a5@15 ~@32 b6@25 ~@6 b5@12, ~@22 d6@55 ~@19, ~@37 g6@42 ~@17]/3", M: "c#6@6 d6@3 ~ d6@6",
  N: "[~ e6@11 f#6@7 ~ [g6,b6]@31 ~ [f#6,a#6]@44]/3", // G F#
  O: "[~@5 [g6,g#6] [e6,f#6] [c#6,d6,d#6] [a#5,b5,c6] [d#5,f#5,g#5,a5] [a#4,c#5,e5] [d#4,f#4,g#4] [b5,f#6,b6]@8 ~ b6@46 a6@15 b6@49 a6@15 b6@49 a6@15 b6@46, ~@3 c7@2 a6@2 ~@14 [b5,f#6]@235, ~@4 b6@2 f6@2 ~@4 c#4 ~@8 g#6 ~@234]/8", // G#maj7 Esus2 D#dim A#dim G#7 B5
  P: "[~@2 a6@15 b6@49 a6@15 b6@55 ~ a6@7 b6@48]/6", Q: "[~ a6@15 b6@56 ~@24]/3",
})).s("gm_drawbar_organ").gain(0.4).pan(0.9)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@12 A B C D E F@4 G H I J K L M N O P@2 Q R@6 S@2 T@7 U V@4 W@2 X@2 Y@2 Z AA AB AC AD@2 AE@3 AF AG AH AI AH AJ AK AL
  AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG@2 ~@9
>`.pickRestart({
  A: "~@5 g1@11 ~ a1@14 ~", B: "a1@4 d2@7 ~@2 d2@7 a1@10 ~@2", C: "a1@2 b1@6 g1@7 ~", D: "g1@2 ~@2 g1@8 b1@8 a1@11 ~",
  E: "a1@3 ~ d2@12 g1@14 ~@2",
  F: "[g1@2 ~ g1@8 ~ b1@7 a1@10 ~@2 a1@3 ~ c2@11 ~ c2@14 ~@2 c2@4 b1@10 ~@2 b1@15 ~ b1@2 ~@2 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1, ~@12 g1 ~@115]/4",
  G: "~@2 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~",
  H: "~@2 b1@2 ~@2 b1@6 ~@2 g1@2 ~@2 g1@9 ~@3 g1 ~", I: "~@2 g1@5 ~@3 a1@5 ~@3 a1@3 ~ b1@10",
  J: "~@2 b1@2 ~@2 b1@8 g1@2 ~@2 g1@9 ~@3 g1@2", K: "~@2 g1@5 ~@3 a1@4 ~@4 b1@13 ~",
  L: "~ b1 ~@3 b1@6 ~@2 g1@2 ~@2 g1@9 ~@3 g1@2 ~", M: "~ g1@5 ~ g1 ~ a1@5 ~@3 a1@3 ~ b1@9 ~@2",
  N: "~ b1@2 ~@2 b1@7 ~ g1@2 ~@2 g1@9 ~@3 g1 ~@2", O: "~ g1@5 ~@2 a1@6 ~ a1 b1@9 ~@7", P: "[b2@11 a2@3 b2@2]/2",
  Q: "f#2@3 e2",
  R: "[d2@11 c#2@20 b1@4 ~@8 b1@3 ~@13 a1@3 ~ b1@4 ~@8 b1@3 ~@13 a1@3 ~ b1@4 ~@8 b1@3 ~@13 a1@3 ~ b1@3 ~@9 b1@3 ~@8 d2@8 b1@4 ~@8 b1@4 ~@12 a1@4 b1@2]/6",
  S: "[~@10 b1@4 ~@8 d2@8 b1@4 ~@8 b1@4 ~@11 a1@3 ~ b1@3]/2",
  T: "[~@10 b1@11 a1 [f1,g1] ~@6 g1@12 a1@14 ~@2 a1@3 ~ d2@6 ~@2 d2@7 ~ a1@11 ~ a1@3 ~ b1@11 ~ g1@14 ~@2 g1@2 ~ g1@7 ~@2 b1@7 a1@16 d2@12 g1@14 ~@2 g1@2 ~@2 g1@7 ~ b1@7 ~ a1@10 ~@2 a1@3 ~ c2@2 ~@2]/7", // Fsus2
  U: "c2@6 ~@2 c2@2 ~@2 c2@11 ~ c2@3 ~ b1@2 ~@2",
  V: "[b1@4 ~@3 b1@2 ~@2 b1@11 ~ b1@2 ~@2 f#1@2 ~@2 f#1@2 ~@2 f#1@2 ~@2 f#1@2 ~@2 f#1@2 ~@2 f#1@2 ~@2 f#1@2 ~@2 f#1 ~@3 f#1@2 ~@2 f#1@2 ~@2 f#1 ~@3 f#1@2 ~@2 f#1@2 ~@2 f#1 ~@3 f#1@2 ~@2 f#1@2 ~@2 b1@2 ~@2 b1@8 g1@2 ~@2 g1@9 ~@3 g1 ~@3 g1@5]/4",
  W: "[~@3 a1@6 ~ a1@3 ~ b1@10 ~@2 b1@2 ~@2 b1@6 ~@2 g1@2 ~@2 g1@9 ~@3 g1 ~@3 g1@6]/2",
  X: "[~@2 a1@5 ~@3 b1@13 ~@3 b1@2 ~@2 b1@7 ~ g1@2 ~@2 g1@9 ~@3 g1 ~@3 g1@6]/2",
  Y: "[~@2 a1@6 ~ a1@3 ~ b1@10 ~@2 b1@2 ~@2 b1@6 ~@2 g1@2 ~@2 g1@9 ~@3 g1@2 ~@2 g1@5 ~@2]/2",
  Z: "~ a1@5 ~@3 b1@8 ~@8 g1@7", AA: "~ g1 ~@3 a1@12 ~@4 a1@2 ~@2 d2@6 ~", AB: "d2@7 ~ a1@9 ~@3 a1@3 ~ b1@8",
  AC: "~@4 g1@12 ~@4 g1@2 ~@2 g1@6 g1 ~", AD: "[b1@8 a1@10 ~@2 a1@2 b1 ~ d2@11 ~ g1@12 g1 ~@3 g1 ~@2 g1@6 g1 ~@2]/2",
  AE: "[b1@7 a1@9 ~@3 a1@4 ~ g1@3 g2@4 g1@4 g2@4 g1@4 g2@4 g1@4 g2@4 g1@4 g2@4 g1@4 g2@4 g1@4 g2@4 g1@3 ~ g2@3 ~ d2@7 ~ d2]/3",
  AF: "~@3 a1 ~@3 a1@8 a1 ~@3 d2 ~@3 d2@9", AG: "~@3 a1@2 ~@2 a1@8 ~@3 a1@2 ~@2 b1@8 ~@2",
  AH: "~@2 a1 ~@3 a1@8 a1 ~@3 d2 ~@3 d2@10", AI: "~@2 a1 ~@3 a1@8 ~@4 b1@2 ~@2 b1@10",
  AJ: "~@2 a1 ~@3 a1@8 ~@4 g2@2 ~@2 g2@10", AK: "~ d2 ~@3 d2@11 ~ g2@2 ~@2 g2@11", AL: "~ g2 ~@3 g2@11 ~@5 b1@11",
  AM: "~ c#2@11 ~ d2@6 ~@2 d2@11", AN: "~ e2@11 f#2@8 g2@9 ~@3", AO: "g2@13 ~@3 g2@3 ~ f#2@2 ~@2 f#2 ~@3 f#2 ~@3",
  AP: "f#2 ~@3 f#2 ~@3 f#2@2 ~@2 f#2@2 ~@2 f#2@2 ~@2 f#2 ~@3 f#2 ~@3 f#2 ~@3",
  AQ: "f#2 ~@3 f#2 ~@3 f#2 ~@3 f#2 ~@3 f#2@2 ~@2 b1@2 ~@2 b1@6 ~@2", AR: "g1 ~@3 g1@9 ~@2 g1 ~@4 g1@6 ~ a1@5",
  AS: "~@3 a1@2 ~@2 b1@9 ~@3 b1 ~@3 b1@5 ~@3 [g1,a1]", AT: "~@3 g1@9 ~@3 g1 ~@3 g1@6 ~@2 a1@5",
  AU: "~@3 b1@13 ~@3 b1 ~@3 b1@6 ~@2 g1", AV: "~@3 g1@9 ~@2 g1 ~@4 g1@6 ~ a1@5 ~",
  AW: "~@2 b1 ~@3 b1@9 ~@3 b1@2 ~@2 b1@6 ~@2 g1@2", AX: "~@2 g1@8 ~@4 g1 ~@3 g1@6 ~@2 a1@5 ~, ~@18 a1 ~@13",
  AY: "~@2 b1@13 ~@3 b1 ~@3 b1@5 ~@3 g1@2", AZ: "~@2 g1@9 ~@2 g1 ~@3 g1@7 ~ a1@5 ~@2",
  BA: "~ a1@2 ~@2 b1@9 ~@3 b1 ~@3 b1@5 ~@3 g1@2 ~", BB: "~ g1@9 ~@3 g1 ~@3 g1@6 ~@2 a1@6 ~",
  BC: "~ b1@12 ~@4 b1 ~@3 b1@5 ~@3 g1 ~@2", BD: "~ g1@8 ~@3 g1 ~@4 g1@6 ~ a1@5 ~@3",
  BE: "a1@2 ~@2 b1@9 ~@3 b1 ~@3 b1@5 ~@3 g1@2 ~@2", BF: "g1@8 ~@4 g1@2 ~@2 g1@6 ~@2 a1@5 ~@3", BG: "[b1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A B C D C E F@2 ~ G H I J K L M N O P ~@2 Q R S T U V@3 W X Y X Z AA AB AC@2 AD AE AF AG AH AG AI AJ AK AL AM AN
  AO AP AQ AR AS AT AU AV AW AX AW AY AZ BA AC@2 BB BC BD BE BF BG BF BH BI H BJ BK BL BM BN BO BP BQ BR ~@10
>`.pickRestart({
  A: "~@5 x ~@11 x ~@3 x ~@10", B: "x ~@4 x ~@14 x ~@11", C: "~ x ~@2 x ~@3", D: "~ x ~@3 x ~@2",
  E: "~@4 x ~@14 x ~@12", F: "~@27 x ~@4", G: "~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@9", H: "~ x ~@5 x ~ x ~@6",
  I: "~ x ~@7 x ~ x ~@4", J: "~ x ~ x ~@3 x ~ x ~@6", K: "~@2 x ~@15 x ~@2 x ~@10", L: "~ x ~@11 x ~@3 x ~@14",
  M: "~ x ~@15 x ~@3 x ~@10", N: "~ x ~@3 x ~@7 x ~@3 x ~@14", O: "~ x ~@14 x ~@3 x ~@11", P: "x ~@2 x ~@4",
  Q: "x ~@11 x ~@18 x", R: "~@27 x ~@3 x", S: "~@11 x ~@19 x", T: "~@11 x ~@15 x ~@3 x", U: "~@11 x ~@14 x ~@3 x ~",
  V: "~@5 x ~@7 x ~ x", W: "~@10 x ~@18 x ~@2", X: "~@9 x ~@15 x ~@3 x ~@2", Y: "~@13 x ~@15 x ~@2", Z: "~@3 x ~@3 x",
  AA: "~@2 x ~@3 x!2", AB: "~@3 x ~@4", AC: "~@5 x ~@2", AD: "~@31 x", AE: "~@3 x ~@3 x ~@3 x ~@3 x ~@9 x ~ x ~@4",
  AF: "~@7 x ~@3 x ~@11 x ~@3 x ~@4", AG: "~@5 x ~ x ~@5 x ~ x", AH: "~@3 x ~ x ~@5 x ~ x ~@2",
  AI: "~@6 x ~@3 x ~@10 x ~@3 x ~@6", AJ: "~@9 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2", AK: "~@5 x ~@3 x ~@11 x ~@3 x ~@6",
  AL: "~@9 x ~@3 x ~@11 x ~@6", AM: "~@5 x ~@14 x ~@3 x ~@7", AN: "~@3 x ~@4 x ~@10 x ~@4 x ~@7", AO: "~ x ~@3 x!2 ~",
  AP: "~ x!2 ~@3 x ~", AQ: "~@4 x ~@14 x ~@4 x ~@7", AR: "~@7 x ~@15 x ~@7 x", AS: "~@7 x ~@7 x ~@7 x ~@3 x ~@3 x",
  AT: "~@3 x ~@3 x ~@15 x ~@8", AU: "~@3 x ~@3 x ~@11 x ~@3 x ~@8", AV: "~@3 x ~@3 x ~@3 x ~@6 x ~@3 x ~@9",
  AW: "~ x ~ x ~@5 x ~ x ~@4", AX: "~ x ~ x ~@7 x ~@4", AY: "~@2 x ~@3 x ~@2 x ~@11 x ~@10",
  AZ: "~ x ~@3 x ~@11 x ~@3 x ~@10", BA: "~ x ~@3 x ~@26", BB: "~ x!2 ~ x ~@3", BC: "x ~ x!6", BD: "x!2 ~@2 x ~ x ~",
  BE: "x ~@3 x ~@10 x ~@3 x ~@12", BF: "~@3 x ~@3 x ~@11 x ~@3 x ~@7 x", BG: "~@3 x ~@11 x ~@3 x ~@12",
  BH: "~@3 x ~@10 x ~@3 x ~@13", BI: "~ x ~ x ~@5 x ~ x ~@3 x", BJ: "~ x ~ x ~@5 x ~@5 x",
  BK: "~@2 x ~@10 x ~@4 x ~@13", BL: "~ x ~@3 x ~@11 x ~@3 x ~@7 x ~@2", BM: "~ x ~@11 x ~@3 x ~@11 x ~@2",
  BN: "~ x ~@15 x ~@3 x ~@7 x ~@2", BO: "~ x ~@10 x ~@4 x ~@14", BP: "x!2 ~@2 x!2 ~ x", BQ: "x ~@2 x!2 ~@2 x", BR: "x",
})).gain(0.56)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@13 A B C D E ~@2 F ~@9 G H I J K J ~@13 L M ~@4 N ~@9 O P ~@9 Q@2 R S ~@27
>`.pickRestart({
  A: "~@5 x ~@10 x ~@14 x", B: "~@3 x", C: "x ~@6 x ~@8", D: "~@24 x ~@6 x", E: "~@15 x ~@15 x",
  F: "~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x", G: "~@7 x", H: "x ~@2 x ~@4", I: "x ~@11 x ~@14 x ~@4",
  J: "~@27 x ~@4", K: "~@11 x ~@20", L: "~@31 x", M: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4", N: "~@11 x ~@4",
  O: "~@24 x ~@2 x ~@4", P: "~@3 x ~@7 x ~@7 x ~@12", Q: "~ x", R: "~@5 x!3", S: "~ x ~@6",
})).gain(0.32)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@20 A ~@28 B C ~@4 D ~@3 E F ~@2 G ~ H I ~@10 J K ~@28>".pickRestart({
  A: "~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4", B: "~@31 x", C: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@8",
  D: "~@5 x ~@2", E: "~@19 x ~@3 x ~@8", F: "~@3 x ~@28", G: "~@9 x ~@6", H: "~@17 x ~@9 x ~@4", I: "~@3 x ~@7 x ~@20",
  J: "~ x ~@5 x ~@8", K: "~ x ~@10 x ~@3",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A B ~@5 C@2 D E ~@3 F ~@3 G ~@17 G H I ~@5 J ~@3 K ~@3 L ~@11 M N O P O Q ~@7 R ~@3 S ~ T ~@12
// … 110 more lines

More by Patti Smith