Strudelify
Can We Still Be Friends cover art

1978 · The Genius of Todd Rundgren

Can We Still Be Friends

Todd Rundgren

KeyC♯ minorTempo86 bpm
0:00/0:00
// Can We Still Be Friends — Todd Rundgren
// 86 bpm, 4/4, key C# minor. Source: mcgill + 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 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/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 B@3 C@6 D E@3 F@2 G B@3 C@6 D H@3 F@2 I J@2 K@4 L I M@2 N@2 O P Q R S@2 T U V W@3 X Y@5 Z AA AB AC AD AE AF AG@2
  AA AB AC AD AE AH AG@2 AI AB AC AD AJ AK AG@2 AI AB AC AL AE AK AM@2 ~
>`.pickRestart({
  A: "[c3,d4,f#4,a4]@4 ~@2 c3@2 [d4,g4,b4,d5] ~@5 [d4,f#4,a4]@2, c2@4 g2 [d4,f#4,a4]@2 ~, ~@2 [d4,g4,b4]@2 ~ d5@3, ~@3 g2", // D7 G D G
  B: "[c3@2 ~@4 [d4,g4,b4,d5]@2 d4 ~ d4@2 ~@4 d5@4 ~@2 [e2,e3]@2 f#4 ~@3 d4@2 d4@2 ~@2 d4@2 d4@2 e3@2 ~@4 d4@2 [d3,d4,f#4,a4]@2, c2@4 ~@3 c3 [b4,g5]@4 ~ f#4@2 [f#4,a4]@4 [f#4,a4]@4 ~, ~@2 [d4,g4,b4]@4 ~@2 d5@4 [d4,g4,b4,d5]@3 e2@7 ~@6 [g4,b4]@4 e3@6 d4@6 [g4,b4]@4, ~@2 c3@2 [g2,f#4,a4]@4 e3@3 ~ [b2,d5]@4 e2@4 d2@4, ~@10 [a4,d5,f#5]@2 a4@3 ~@3 [g4,b4]@2 d3@3 ~]/3", // G E D Em F#m G D Bm …
  C: "[d4@4 ~@2 [c2,c3]@2 [d4,g4,b4,d5] ~@7 c3@2 ~@4 [d4,g4,b4,d5]@2 d4@2 d4@2 ~@4 d5@4 ~@2 [e2,e3]@2 f#4 ~@3 d4@2 d4@2 ~@2 d4@2 ~@2 e3@2 d4@2 ~@2 d3@2 c4@4 ~@4 c4@2 [c4,e4]@2 ~@4 b3@2 ~@2 b3 ~ [b3,d4]@4 [b3,d4]@2 [b3,d4,f#4,a4]@5 ~, [f#4,a4]@8 ~@2 d5@6 ~@4 c3@4 [g2,f#4,a4]@7 b4@9 ~@2 f#4@4 [f#4,a4]@6 [d4,f#4,a4]@4 ~@2 [d4,f#4,a4]@4 [e4,g4]@10 g4@6 [d4,f#4,a4]@5 ~ [f#4,a4]@6 ~@6, [c2,c3]@6 ~@2 g2@2 ~@2 g2@4 c2@8 ~@6 c3@2 g5@8 ~@4 [g4,b4]@4 e3@6 ~@2 d3@4 ~@2 c3@6 c3@6 a4@2 c3@4 b2@15 ~, ~@4 [d4,g4,b4]@4 ~@2 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,g4,b4]@4 ~@2 d5@4 [d4,g4,b4,d5]@3 e2 d3 ~@3 [a4,d5,f#5]@4 a4@6 ~@20 c4@4 ~@4 [c4,e4]@6 ~@8 b4@7 ~, ~@16 e3@3 ~ [b2,d5]@4 e2@4 [d2,g4,b4]@3 c2@9 ~@8]/6", // C G E C Bm Bm7 F#m D …
  D: "[c4,e4]@4 [c4,e4]@2 [c4,e4,g4]@2 [e4,a4] ~@5 d3@2, a2 [d2,g4,b4], g4@3 ~ d4@2 [d4,f#4,a4]@2, ~@2 f#4@2 d3@3 ~", // C A5 G D
  E: "[d4@2 d4@2 d4@2 d4@2 d4@2 [d4,f#4,a4]@4 c4@4 c4@2 ~@4 [c4,e4,g4]@2 ~@2 c3@2 b3 ~@3 b3@2 [b3,d4]@4 d4!2 [b3,d4]@2 d4@2 d4@2, [g2,g3]@4 [e2,e3,g4,b4]@3 c2@8 ~@5 b4@2 ~@2, [f#4,a4]@2 [f#4,a4]@2 ~@3 c3@4 c3@3 ~ b2@7 [b2,b3,b4]@2, ~@7 [e4,g4]@3 [c4,e4,g4]@2 ~ [c4,e4,g4,a4]@2 [d4,f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3, ~@20 b3 ~@3]/3", // D C Bm G Em F#m B Em …
  F: "[[d4,g4,b4]@2 [d4,g4,b4]@2 [a3,d4,g4,b4]@2 a3@2 [a3,c#4,f#4,a4]@2 [a3,c#4,f#4,a4]@2 c#4@2 ~@2 [g4,c5,e5]@2 [g4,c5,e5]@2 [d3,g4,c5,e5]@2 [d2,d3,g4,c5,e5]@2 [f#4,b4,d5]@2 [f#4,b4,d5]@2 [d3,f#4,b4,d5]@2 [d2,d3,f#4,b4,d5] ~, a2@4 a2@2 [a2,a3,a4]@2 [d2,d3]@3 ~ d2@3 ~, a3@2 ~ [d4,b4]@9 ~@4, ~@3 g4@4 [d#2,c#4]@5 d3@2 ~@2, ~@3 f#4 f#4@2 ~@2]/2", // G F#m C Bm A D G D#7
  G: "[c3,d4,f#4,a4,d5]@4 ~@2 c3@2 [d4,g4,b4,d5] ~@5 [d4,f#4,a4]@2, c2@4 g2 [d4,f#4,a4]@2 ~, ~@2 [d4,g4,b4]@2 ~ d5@3, ~@3 g2", // D7 G D G
  H: "[d4@2 d4@2 d4@2 d4@2 d4@2 [d4,f#4,a4]@4 c4@4 c4@2 ~@4 [c4,e4,g4]@2 ~@2 c3@2 b3@2 ~@2 b3@2 [b3,d4]@4 d4!2 [b3,d4]@2 d4@2 d4@2, [g2,g3]@4 [e2,e3,g4,b4]@3 c2@8 ~@5 b4@2 ~@2, [f#4,a4]@2 [f#4,a4]@2 ~@3 c3@4 c3@3 ~ b2@7 [b2,b3,b4]@2, ~@7 [e4,g4]@3 [c4,e4,g4]@2 ~ [c4,e4,g4,a4]@2 [d4,f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3, ~@20 b3 ~@3]/3", // D C Bm G Em F#m B Em …
  I: "[b4,d5,g5] ~ [d5,g5]@2 [a4,d5,f#5] ~@5 b2@2 [b4,g5] ~ [b4,d5] ~, [e2,e3]@5 ~@7 [e2,e3]@4, ~@2 b4 ~@9 d5@2 g5@2", // G G5 D Em Bm E
  J: "[[a4,d5,f#5] ~@5 b2@2 [b4,d5,g5]@2 d5@2 ~@3 f#3 [f#4,c#5,d5] ~ d5@2 [e4,a4,c#5] ~@5 f#3@2 [f#4,d5] ~ d5@2, ~ e2 ~@2, ~@8 e3@4 [e3,a4,d5,f#5]@4 b3@5 ~@11, ~@10 [b4,g5]@6 a4@2 f#4 ~@11 f#4 ~, ~@14 b2@7 ~@7 [b2,b3,a4]@4]/2", // D G Dmaj7 A D Em B7
  K: "[[e4,a4,c#5] ~@5 f#3@2 [a4,d5]@2 a4@2 ~@3 e3 [e4,g4,c5] ~ [e4,g4,c5]@2 [d4,g4,b4] ~@5 e3@2 [e4,g4,c5] ~ [e4,g4] ~ [d4,g4,b4] ~@5 e3@2 [e4,g4,c5] ~ [e4,g4] ~@4 a2 [d4,g4,b4] ~ [d4,g4,b4]@2 [d4,f#4,a4] ~@5 a2@2 [d4,g4,b4] ~ [d4,g4,b4] ~, ~@8 [b2,b3,f#4]@8 ~@28 [e3,d4,g4,b4]@4 d3@5 ~@11, ~@5 d5@3 ~@7 c5 ~@5 c5 ~@10, ~@12 [e4,a4,c#5]@4 a3@5 ~@25 d2@7 ~@7 [d2,d3]@4, ~@14 a2@7 ~@7 [a2,a3]@6 ~@6 [a2,a3]@8 ~@16]/4", // A D5 C G C Em G C …
  L: "[d4,f#4,a4] ~@5 [c3,d4]@6 [c3,d4,f#4,a4]@2 ~ b2, ~@3 [c2,g4,b4]@4 e2", // D Csus2 D7 Cmaj7
  M: "[[e2,e3,a4,d5,f#5] ~@5 b2@2 [b4,d5,g5]@2 d5@2 [e3,a4,d5,f#5]@3 f#3 [f#4,a4,d5] ~ [a4,d5]@2 [e4,a4,c#5] ~@5 f#3@2 [a4,d5]@2 [f#4,a4] ~, ~@8 e2@8 ~@2 f#4 ~@9 f#4 ~ d5@2, ~@8 e3@4 ~@3 b2@6 ~@7 [b2,b3]@4, ~@10 [b4,g5]@6 b3@5 ~@11]/2", // D G D D5 A D5 F#m B …
  N: "[[e4,a4,c#5] ~@5 f#3@2 [f#4,a4,d5]@2 a4@2 ~@4 [e4,g4,c5]@2 [g4,c5]@2 [d4,g4,b4] ~@5 e3@2 [e4,g4,c5]@2 [e4,g4] ~, ~@8 [b2,b3]@7 e3@2 ~@15, ~@10 [f#4,d5]@6 ~@2 e4 ~@11 c5@2, ~@12 [e4,a4,c#5]@4 a3@5 ~@7 a3 ~@3, ~@7 a2@4 ~@3 a2@2]/2", // A D C C5 G C Em B …
  O: "[a3,d4,g4,b4] ~@5 e4@2 [e4,g4,c5]@4 ~@2 d4@2, ~ [d2,d3], ~@3 [e4,g4,c5]", // G C D C
  P: "[d4,g4,b4]@2 ~ d3 [c3,d4,f#4,a4,d5]@2 ~ c3, d2 c2, d3@3 ~@5, ~ [d4,g4,b4] ~ [d4,g4,b4]", // G D7 G
  Q: "[d4,g4,b4,d5] ~@5 [d4,f#4,a4]@2 c3@2 ~@4 [d4,g4,b4,d5]@2, g2 d5@3 ~@2 c3@2, ~ [d4,f#4,a4]@2 ~@2 [d4,g4,b4]@2 ~, ~ g2 c2@2", // G D G D G
  R: "d4 ~ d4@2 ~@4 d5@4 ~@2 [e2,e3]@2, [g2,f#4,a4]@7 e2@7 ~@2, d5 [d4,g4,b4,d5] [b4,g5]@2, ~@3 c3 e3@3 ~, ~@3 [a4,d5,f#5]", // E D G Em D
  S: "[f#4 ~@3 d4@2 d4@2 ~@2 d4@2 d4@2 e3@2 ~@4 d4@2 [d3,d4,f#4,a4]@2 d4@4 ~@2 [c2,c3]@2, [b2,d5]@4 e2@4 d2@4 [c2,c3]@3 ~, a4@3 ~@3 [g4,b4]@2 d3@3 ~@5, ~ f#4@2 [f#4,a4]@4 [f#4,a4]@4 ~ [f#4,a4]@4, ~@2 [g4,b4]@2 e3@3 d4@3 [g4,b4]@2 ~@2 [d4,g4,b4]@2]/2", // D C Bm C G F#m G
  T: "[d4,g4,b4,d5] ~@7 c3@2 ~@4 [d4,g4,b4,d5]@2, g2 d5@3 ~@2 c3@2, ~ [d4,f#4,a4]@2 [d4,f#4,a4]@2 [d4,g4,b4]@2 ~, ~ g2 c2@2", // G D G
  U: "d4!2 ~@2 d5@2 ~ [e2,e3], [g2,f#4,a4]@7 b4@9, d5@4 [d4,g4,b4,d5]@3 e2 d3 ~@3 [a4,d5,f#5]@4, ~@3 c3 g5@4, ~@4 e3@3 ~", // E D G D
  V: "f#4 ~@3 d4@2 d4@2 ~@2 d4@2 ~@2 e3@2, [b2,d5] e2, a4@3 ~@5, ~ f#4@2 [f#4,a4]@3 [d4,f#4,a4]@2, ~@2 [g4,b4]@2 e3@3 ~", // Bm F#m D G
  W: "[d4@2 ~@2 d3@2 c4@4 ~@4 c4@2 [c4,e4]@2 ~@4 b3@2 ~@2 b3 ~ [b3,d4]@4 [b3,d4]@2 [b3,d4,f#4,a4]@5 ~ [c4,e4]@4 [c4,e4]@2 [c4,e4,g4]@2, [d2,g4,b4]@6 c2@16 [d4,f#4,a4]@5 ~@5 b4@7 ~@5 f#4@4, d3@4 ~@2 c3@6 c3@6 a4@2 c3@4 b2@15 ~ a2@8, ~ [d4,f#4,a4]@2 [e4,g4]@5 g4@4 ~@2 [f#4,a4]@3 ~@3 g4@3 ~, ~@5 c4@2 ~@2 [c4,e4]@3 ~@12]/3", // C Bm Bm7 C G D Em F#m …
  X: "[e4,a4] ~@5 d3@2 d4@2 d4@2 d4@2 d4@2, [d2,g4,b4] [g2,g3], d3@3 ~@5, d4 [d4,f#4,a4] [f#4,a4]!2", // A5 G D F#m
  Y: "[d4@2 [d4,f#4,a4]@4 c4@4 c4@2 ~@4 [c4,e4,g4]@2 ~@2 c3@2 b3@2 ~@2 b3@2 [b3,d4]@4 d4!2 [b3,d4]@2 d4@2 d4@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [a3,d4,g4,b4]@2 a3@2 [a3,c#4,f#4,a4]@2 [a3,c#4,f#4,a4]@2 c#4@2 ~@2 [g4,c5,e5]@2 [g4,c5,e5]@2 [g4,c5,e5]@2 [d2,d3,g4,c5,e5]@2 [g4,c5,e5]@2 [g4,c5,e5]@2 ~@2 d3@2 [f#4,b4,d5]@2 [f#4,b4,d5]@2 [f#4,b4,d5]@2 [f#4,b4,d5]@2, [e2,e3,g4,b4]@3 c2@8 ~@5 b4@2 ~@5 g4@5 [d2,d3]@3 ~ [d2,d3]@2 [g4,c5,e5]@2 ~@4, ~@3 c3@4 c3@3 ~ b2@7 [b2,b3,b4]@2 a2@4 a2@2 [a2,a3,f#4,a4]@10 ~@4, ~@3 [e4,g4]@3 [c4,e4,g4]@2 ~ [c4,e4,g4,a4]@2 [d4,f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3 ~@3 [d4,b4]@13 ~@4, ~@16 b3 ~@3 a3@2 ~@5 [d#2,c#4]@9 [d2,d3]@4]/5", // D C Bm G F#m C Bm Em …
  Z: "[f#4,b4,d5]@2 [f#4,b4,d5]@2 [f#4,b4,d5]@2 [d2,d3,f#4,b4,d5]@2 [b4,d5,g5] ~ [d5,g5]@2 [a4,d5,f#5] ~@3, [d2,d3]@6 ~@2 [e2,e3]@5 ~@3, ~@10 b4 ~@5", // Bm G G5 D E
  AA: "~@2 b2@2 [b4,g5] ~ [d5,g5]@2 [a4,d5,f#5] ~@5 b2@2, ~@4 [e2,e3]@5 ~@7, ~@4 d5@2 b4 ~@9", // Em G5 D E
  AB: "[b4,d5,g5]@2 d5@2 ~@3 f#3 [f#4,c#5,d5] ~ d5@2 [e4,a4,c#5] ~@3, e2 ~, e3@4 [e3,a4,d5,f#5]@4 b3@5 ~@3, ~@2 [b4,g5]@6 a4@2 f#4 ~@5, ~@6 b2@7 ~@3", // G Dmaj7 A D Em
  AC: "~@2 f#3@2 [f#4,d5] ~ d5@2 [e4,a4,c#5] ~@5 f#3@2, ~@4 [b2,b3]@5 ~@7, ~@4 a4@2 f#4 ~@9", // D A B
  AD: "[a4,d5]@2 a4@2 ~@3 e3 [e4,g4,c5] ~ [e4,g4,c5]@2 [d4,g4,b4] ~@3, [b2,b3,f#4] ~, ~ d5@3 ~@4, ~@4 [e4,a4,c#5]@4 a3@5 ~@3, ~@6 a2@7 ~@3", // D5 C G B5 A
  AE: "~@2 e3@2 [e4,g4,c5] ~ [e4,g4] ~ [d4,g4,b4] ~@5 e3@2, ~@4 [a2,a3]@5 ~@7, ~@3 c5 ~@4", // C Em G A
  AF: "[e4,g4,c5] ~ [e4,g4,c5] ~@4 a2 [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,f#4,a4] ~@3, [a2,a3] ~, ~@4 [e3,d4,g4,b4]@4 d3@5 ~@3, ~@6 d2@7 ~@3", // C G D A Em7
  AG: "[~@2 a2@2 [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,f#4,a4] ~@5 [c3,d4]@6 [c3,d4,f#4,a4]@2 ~ b2 [b4,d5,g5] ~ [d5,g5]@2 [a4,d5,f#5] ~@3, ~@4 [d2,d3]@5 ~@5 [c2,g4,b4]@8 e2@2 [e2,e3]@5 ~@3, ~@26 b4 ~@5]/2", // G D Csus2 D7 G G5 D Cmaj7 …
  AH: "[e4,g4,c5] ~ [e4,g4,c5] ~@4 a2 [d4,g4,b4] ~ [d4,g4,b4]@2 [d4,f#4,a4] ~@3, [a2,a3] ~, ~@4 [e3,d4,g4,b4]@4 d3@5 ~@3, ~@6 d2@7 ~@3", // C G D A Em7
  AI: "~@2 b2@2 [b4,g5] ~ [b4,d5] ~ [a4,d5,f#5] ~@5 b2@2, ~@4 [e2,e3]@5 ~@7, ~@2 d5 g5 ~@4", // Em Bm D E
  AJ: "~@2 e3@2 [e4,g4,c5] ~ [e4,g4] ~ [d4,g4,b4] ~@5 e3@2, ~@2 [a2,a3]@3 ~@3, ~@3 c5 ~@4", // C Em G A
  AK: "[e4,g4,c5] ~ [e4,g4] ~@4 a2 [d4,g4,b4] ~ [d4,g4,b4]@2 [d4,f#4,a4] ~@3, [a2,a3] ~, ~@2 c5@2 [e3,d4,g4,b4]@4 d3@5 ~@3, ~@6 d2@7 ~@3", // C Em G D A Em7
  AL: "[a4,d5]@2 a4@2 ~@3 e3 [e4,g4,c5] ~ [e4,g4] ~ [d4,g4,b4] ~@3, [b2,b3,f#4] ~, ~ d5@3 ~ c5 ~@2, ~@4 [e4,a4,c#5]@4 a3@5 ~@3, ~@6 a2@7 ~@3", // D5 C Em G B5 A
  AM: "[~@2 a2@2 [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,f#4,a4] ~@5 [c2,c3,d4]@6 [c2,c3,d4,f#4,a4]@12, ~@4 [d2,d3]@5 ~@5 [g4,b4]@18]/2", // G D Csus2 D7 D G
})).s("gm_piano").gain(0.64)

// bass · acoustic bass · "bass"
const bass = note(`<
  ~ A B C D A E F G H I J K L M N O A B C P A Q C R S M T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AC AD AK AL AM AN AO
  AP AM AQ AR AS AT AU AV AW AX AY AZ Y BA BB BC BD BE BF BG BH@2 BB BC BD BE BF BG BH@2 BB BC BD BE BF BG BH@2 BB BC BD
  BE BF BG BI@2 ~
>`.pickRestart({
  A: "c2@2 ~ c2 g1@2 ~ g1", B: "c2@2 ~ c2 g1@2 c2 ~", C: "e2@5 ~ e2@2 b1@4 ~@2 b1@2", D: "e2@4 ~@2 e2@2 d2@5 ~ d2@2",
  E: "c2@2 ~ c2 g1@2 c2@2", F: "e2@2 ~ e2 b1@2 ~ b1", G: "e2@4 ~@2 e2@2 d2@5 ~@3", H: "c2@5 ~ c2 ~ c2@4 ~@2 c2@2",
  I: "b1@5 ~ b1 ~ b1@4 ~@2 b1@2", J: "a1@5 ~ a1@2 d2@4 ~@2 d2@2", K: "g2@4 ~@2 g2@2 e2@4 ~@2 e2 ~",
  L: "c2@4 ~@2 c2 ~ c2@5 ~ c2@2", M: "b1@5 ~ b1 ~ b1@5 ~ b1@2", N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  O: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2", P: "e2@2 ~ e2 d2@2 ~ d2", Q: "c2@5 ~ c2@2 g1@4 c2@3 ~",
  R: "e2@5 ~ e2@2 d2@4 ~@2 d2@2", S: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2@2", T: "a1@2 ~ a1 d2@2 ~ d2",
  U: "g2@4 ~@2 g2@2 e2@5 ~ e2@2", V: "c2@5 ~ c2 ~ c2@5 ~ c2@2", W: "b1@5 ~ b1 ~ b1@3 ~ b1@3 ~",
  X: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", Y: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  Z: "e2 ~ e2 ~ e2 ~@5 b1@2 e2 ~ e2 ~", AA: "e2 ~@5 b1@2 e2 ~ e2 ~ e2@4", AB: "b1 ~ b1 ~ b1@2 ~@4 f#1@2 b1 ~ b1 ~",
  AC: "b1 ~@5 f#1@2 b1 ~ b1 ~ b1@4", AD: "a1 ~ a1 ~ a1 ~@5 e1@2 a1 ~ a1 ~", AE: "a1 ~@5 e1@2 a1 ~ a1 ~ a1@4",
  AF: "d2 ~ d2 ~ d2@2 ~@4 a1@2 d2 ~ d2 ~", AG: "d2@2 ~@4 c2@5 ~ c2@3 ~", AH: "e2 ~ e2@2 e2 ~@5 b1@2 e2 ~ e2 ~",
  AI: "e2 ~@5 b1@2 e2 ~ e2 ~ e2@3 ~", AJ: "b1 ~ b1 ~ b1 ~@5 f#1@2 b1 ~ b1 ~", AK: "a1 ~@5 e1@2 d2@4 d2@3 ~",
  AL: "d2@3 ~ d2@3 ~ c2@4 ~@2 c2@2", AM: "g1@2 ~ g1 c2@2 ~ c2", AN: "g1@4 c2@2 ~@2 e2@5 ~ e2@2",
  AO: "b1@2 ~ b1 e2@2 ~ e2", AP: "d2@2 ~ d2 c2@2 ~ c2", AQ: "g1@4 c2 ~@3 e2@4 ~@2 e2@2", AR: "b1@5 ~ b1@2 e2@5 ~ e2@2",
  AS: "d2@5 ~ d2@2 c2@4 ~@2 c2@2", AT: "g1@4 c2@4 b1@4 ~@2 b1 ~", AU: "b1@4 ~@2 b1@2 a1@5 ~ a1@2",
  AV: "d2@4 ~@2 d2@2 g2@5 ~ g2@2", AW: "e2@4 ~@2 e2@2 c2@4 ~@2 c2 ~", AX: "c2@4 ~@2 c2@2 b1@5 ~ b1 ~",
  AY: "b1@5 ~ b1 ~ a1 ~ a1 ~ a1 ~ a1 ~", AZ: "a1 ~ a1 ~ a1 ~ a1 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  BA: "d2 ~ d2 ~ d2 ~ d2 ~ e2 ~ e2@2 e2 ~@3", BB: "~@2 b1@2 e2 ~ e2 ~ e2 ~@5 b1@2",
  BC: "e2 ~ e2 ~ e2@3 ~ b1 ~ b1@4 ~@2", BD: "~@2 f#1@2 b1 ~ b1 ~ b1 ~@5 f#1@2", BE: "b1 ~ b1 ~ b1@3 ~ a1 ~ a1 ~ a1 ~@3",
  BF: "~@2 e1@2 a1 ~ a1 ~ a1 ~@5 e1@2", BG: "a1 ~ a1 ~ a1@3 ~ c2 ~ c2@2 d2@3 ~",
  BH: "[~@2 a1@2 d2 ~ d2 ~ d2@3 ~@3 c2@5 ~ c2@3 ~ e2 ~ e2@2 e2 ~@3]/2",
  BI: "[~@2 a1@2 d2 ~ d2 ~ d2@3 ~@3 c2@5 ~ c2@8 ~@4]/2",
})).s("gm_acoustic_bass").gain(0.52)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~@8 A@7 B C D E F@2 G H I J@4 K@3 L M ~@14 N O P Q@3 R S@3 T U V@2 W X@3 ~@33
>`.pickRestart({
  A: "[~@8 [d4,g4,b4]@2 [d4,f#4,a4]@4 [c4,e4,g4]@7 ~@3 [c4,e4,g4]@2 [c4,e4,a4]@4 [d4,f#4,a4]@8 ~@2 [d4,b4]@2 [d4,f#4,a4]@3 ~@7 f#4@2 g4 ~ [g4,b4]@4 [f#4,a4]@3 ~ [f#4,a4]@7 ~ [d4,g4] ~ [d4,f#4,a4]@4 [c4,e4,g4]@8 ~ [c4,e4,g4]@2 ~ [c4,e4,a4]@3 ~ [d4,f#4,a4]@9 ~@2 a4@2 ~ [d4,b4]@3 ~, ~@40 g4 ~@4 e4@9 ~@2 d4@15 ~@33 f#4@7 ~, ~@45 g4@6 ~@21 b4@2 ~@30 b4@2 ~@6, ~@46 c4@9 ~@49 d4@4 ~@4]/7", // G D C Am D G D G …
  B: "[d4,g4,b4]@4 [c#4,f#4,a4]@3 ~", C: "[g4,c5,e5]@7 ~ [f#4,b4,d5]@7 ~, [b4,d5] ~@15",
  D: "[d4,f#4,a4]@3 ~ [d4,g4,b4]@3 [g4,d5] [d4,b4] ~ [d4,f#4,a4,d5]@3 ~ [d4,f#4,a4]@2", // D G G5 G D
  E: "~@2 [d4,g4,b4]@3 ~ d5@2 [d4,f#4,a4,d5]@4 [d4,g4,b4,d5]@2 ~@2, ~@5 [d4,g4,b4]@2 ~@9", // G D G
  F: "[[b4,d5]@3 ~ a4@3 ~ [f#4,a4,d5]@3 ~ [g4,b4]@2 [f#4,a4]@6 b4@2 [d4,f#4,a4]@5 ~ [d4,b4]@2 [d4,f#4,a4]@2, g5@6 ~@6 e4 ~@7 g4 ~@7 g4 ~@3, ~@3 [d5,f#5]@2 ~@3 g#4 ~@3 d4@10 ~@10]/2", // Bm D G F#m D G D
  G: "[d4,f#4,a4]@3 ~ [d4,g4,b4]@3 ~ d5@2 [d4,f#4,a4,d5]@3 ~ [d4,f#4,a4]@2, ~@7 [d4,g4,b4]@2 ~ [b4,e5] ~@5", // D G D G E5
  H: "~@2 [d4,g4,b4]@4 [g4,b4,d5] ~ [d4,f#4,a4,d5]@4 [b4,d5]@2 ~@2, ~@6 d4@2 ~@4 [d4,g4] ~@3", // G D Bm G5
  I: "[b4,d5]@3 ~ a4@3 ~ [f#4,a4,d5]@3 ~ [g4,b4]@2 [f#4,a4]@2, g5@6 ~@6 e4 ~@3, ~@3 [d5,f#5]@2 ~@3 g#4 ~@3 d4@4", // Bm D G F#m D
  J: "[[d4,f#4,a4]@7 d4 d4@2 [d4,f#4,a4]@4 [c4,e4,g4]@8 ~ [c4,e4,g4]@3 [c4,e4,a4]@3 ~ [d4,f#4,a4]@9 ~ [d4,b4]@2 [d4,f#4,a4]@3 g4@6 ~ f#4@2 g4 ~ [d4,g4,b4]@4 [f#4,a4]@2 d4@2, ~@7 b4@2 ~@55, ~@8 g4 ~@31 g4 ~@4 [c4,e4]@9 ~@6 d4 ~@3]/4", // D C Am D G D G F#m …
  K: "[[d4,f#4,a4]@7 ~ [d4,b4]@2 [d4,f#4,a4]@3 ~ [c4,e4,g4]@9 ~ g4@2 [c4,a4]@3 ~ [d4,f#4,a4]@7 ~ [d4,f#4,a4] ~ b4@2 ~@2 g4@2 ~@2, ~@8 g4 ~@14 c4@2 ~@15 d4@6 ~@2, ~@24 e4@5 ~@11 g4 ~ [f#4,a4]@2 ~@4, ~@43 b4@3 ~@2]/3", // D G D C F D F#m
  L: "[d4,g4,b4]@4 [c#4,f#4,a4]@3 ~, [c5,e5] ~@15", M: "[g4,c5,e5] [f#4,b4,d5]",
  N: "[d4,g4,b4]@3 ~ [d4,g4,b4]@4 [d4,f#4,a4]@3 ~ [d4,g4,b4]@3 [g4,d5]", // G D G G5
  O: "[d4,b4] ~ [d4,f#4,a4,d5]@3 ~ [d4,f#4,a4]@3 ~ [d4,g4,b4]@3 ~ d5@2, ~@13 [d4,g4,b4]@2 ~", // G D G
  P: "[d4,f#4,a4,d5]@4 [d4,g4,b4,d5]@2 ~@2 [b4,d5]@3 ~ a4@3 ~, ~@4 g5@3 ~, ~@11 [d5,f#5]@2 ~@3", // D G Bm D
  Q: "[[f#4,a4,d5]@3 ~ [g4,b4]@2 [f#4,a4]@6 b4@2 [d4,f#4,a4]@5 ~ [d4,b4]@2 [d4,f#4,a4]@2 [d4,f#4,a4]@3 ~ [d4,g4,b4]@3 ~ d5 ~ [d4,f#4,a4,d5]@3 ~ [d4,f#4,a4]@3 ~ [d4,g4,b4]@4 [d4,g4]@2, g#4 ~@3 d4@10 ~@17 [d4,g4,b4]@2 ~@15, ~@4 e4 ~@7 g4 ~@7 g4 ~@13 [b4,e5] ~@11 [b4,d5] ~]/3", // D G F#m D G D G D …
  R: "[d4,f#4,d5]@4 [b4,d5]@2 ~@2 [b4,d5]@3 ~ a4@3 ~, a4@2 ~@2 [d4,g4] ~@3 g5@6 ~@2, ~@11 [d5,f#5]@2 ~@3", // D Bm G5 D
  S: "[[f#4,a4,d5]@3 ~ [g4,b4]@2 [f#4,a4]@2 [d4,f#4,a4]@7 d4 d4@2 [d4,f#4,a4]@4 [c4,e4,g4]@8 ~ [c4,e4,g4]@3 [c4,e4,a4]@3 ~ [d4,f#4,a4]@9 ~, g#4 ~@3 d4@4 ~@8 g4 ~@31, ~@4 e4 ~@10 b4@2 ~@31]/3", // D G F#m D C Am D
  T: "[d4,b4]@2 [d4,f#4,a4]@3 g4@6 ~ f#4@2 g4 ~, g4 ~@4 [c4,e4]@9 ~@2", // G D C
  U: "[d4,g4,b4]@4 [f#4,a4]@2 d4@2 [d4,f#4,a4]@7 ~, ~@4 d4 ~@11", // G F#m D
  V: "[[d4,b4]@2 [d4,f#4,a4]@3 ~ [c4,e4,g4]@9 ~ g4@2 [c4,a4]@3 ~ [d4,f#4,a4]@7 ~ [d4,f#4,a4] ~, g4 ~@14 c4@2 ~@15, ~@16 e4@5 ~@11]/2", // G D C F D
  W: "b4 ~ g4 ~ [d4,g4,b4]@4, d4@3 ~@5, g4 ~ [f#4,a4]@2 ~@12, ~@3 b4@3 ~@2 [c5,e5] ~@7", // G F#m C
  X: "[[c#4,f#4,a4]@6 ~@2 [g4,c5,e5]@15 ~ [f#4,b4,d5]@15 ~@9, ~@8 d5 ~@39]/3", // F#m C Bm
})).s("gm_synth_strings_1").gain(0.2).pan(0)

// drums · kick
const kick = s("bd").struct("<~ A@31 B ~@7 C ~@5 D E F@15 G H ~@6 I J ~@6 I J ~@6 I J ~@6 I J ~>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@2 x!2 ~@3", C: "~@3 x ~@2 x ~", D: "~@2 x!2", E: "x ~ x!3 ~@3", F: "x!2 ~@2 x ~@3",
  G: "x!2 ~@2 x ~@2 x", H: "x", I: "~@7 x", J: "~ x ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B@2 A B A B A B C ~@14 D A E A E A E A E@2 A E A E A E F@2 ~@33
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@6 x!2", D: "~@3 x", E: "~@2 x!2 ~@2 x ~", F: "~@2 x!2 ~@4",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~ [x!7 ~]!31 ~@15 [~@4 x!4] [x!3 ~ x!4]!15 [x!3 ~@5] ~@34>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<A ~@31 B ~@7 C ~@5 D E ~@16 F ~@6 A G ~@6 A G ~@6 A G ~@6 A G ~>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@3 x ~@2 x ~", D: "~@2 x!2", E: "x ~@2 x ~@4", F: "~@2 x!2 ~@4", G: "~ x ~@2",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@31 B ~@7 C ~@6 D ~@16 E ~@6 F D ~@6 F D ~@6 F D ~@6 F D ~>".pickRestart({
  A: "~@3 x", B: "~ x", C: "~@3 x ~@2 x ~", D: "~ x ~@2", E: "x", F: "~@7 x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@7 x]!31 ~@16 [~@3 x ~@4]!16 ~@34>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<[~@5 x ~@2] ~@31 [x!2 ~ x ~@4] ~@14 [~ x ~@6] ~@15 [~@4 x!2 ~ x] ~@34>").gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@33 A B A B A B A C A B A B A D ~@17 E F G F G F G H I F G F G F G H I F G F G F G H I F G F G F G H J ~
>`.pickRestart({
  A: "x!3 ~@3 x!2", B: "x ~@3 x!3 ~", C: "x ~@2 x ~@2 x ~", D: "x ~ x!2", E: "~@4 x!3 ~", F: "~@2 x!3 ~@3",
  G: "x!3 ~ x!3 ~", H: "~@2 x!3 ~@2 x", I: "~@2 x ~ x!3 ~", J: "~ x ~@2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@40 A ~@30 B C ~@6 B C ~@6 B C ~@6 B C ~>".pickRestart({
  A: "~@3 x ~@2 x ~", B: "~@7 x", C: "~ x ~@2",
})).gain(0.72)

// drums · bell tree
const bell_tree = s("marktrees:0").struct(`<
  ~@33 A B A B A B A ~ A B A B A B C ~@16 B D E D E D E D B D E D E D E D B D E D E D E D B D E D E D E D ~@2
>`.pickRestart({
  A: "x ~@2 x", B: "~ x", C: "x", D: "~ x ~@2", E: "x!2",
})).gain(2.38)

stack(
  piano, bass, synth_strings_1, kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom, ride_bell, tambourine,
  bell_tree
)

More by Todd Rundgren