Strudelify

I Saw the Light

Todd Rundgren

KeyA♭ majorTempo117 bpm
0:00/0:00
// I Saw the Light — Todd Rundgren
// 117 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 piano (copy of ch 3 piano)
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117/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 · fretless bass · "bass"
const bass = note(`<
  A@2 B@2 C@2 D@4 E F G@2 D@4 E H I J K L M N E F O F P@2 Q@2 C@2 E R G@2 S@2 T@2 E H U V K L M W E X Y F P@2 T@2 S@2 E
  R G@2 T@2 C@2 Z AA F V K L M N E F Y R Y R Y R O R Y ~
>`.pickRestart({
  A: "[~@10 gb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@4 ~@2 eb2@2]/2",
  B: "[ab1 ~ ab1@2 ~@2 ab1 ~ ab1@2 gb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@5 ~ eb2@2]/2",
  C: "[ab1 ~ ab1@2 ~@2 ab1 ~ ab1@2 gb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@4 ~@2 eb2@2]/2",
  D: "[ab1 ~ ab1@3 ~ ab1 ~ ab1@2 gb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@5 ~ eb2@2]/2", E: "ab1 ~ ab1@3 ~ ab1 ~ ab1@4 ~@2 ab1@2",
  F: "db2@4 ~@2 db2 ~ db2@4 ~@2 db2@2", G: "[f2@4 ~@2 f2@3 ~ bb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@4 ~@2 eb2@2]/2",
  H: "db2@5 ~ db2 ~ db2@5 ~ db2 ~", I: "db2 ~ db2@3 ~ db2 ~ db2@4 ~@2 db2@2", J: "gb2@2 ~ gb2 db2 gb2@2 db2",
  K: "ab1@2 ~ ab1 eb2 ab1 eb2 ab1", L: "bb2@2 ~ bb2 f2 bb1 bb2 bb1", M: "eb2@2 ~ eb2 bb2 bb1 gb2 f2",
  N: "eb2@4 ~@2 eb2 ~ eb2@4 ~@2 eb2@2", O: "eb2@5 ~ eb2@2 ab2@4 ab1@4",
  P: "[eb2@4 ~@2 eb2@2 ab2 ~ gb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@4 ~@2 eb2@2]/2",
  Q: "[ab1 ~ ab1@2 ~@2 ab1 ~ ab1@2 gb2@2 f2@2 eb2@7 ~ eb2 ~ eb2@4 ~@2 eb2@2]/2", R: "db2@4 ~@2 db2 ~ db2@5 ~ db2@2",
  S: "[ab1 ~ ab1@3 ~ ab1 ~ ab1@2 gb2@2 f2@2 eb2@7 ~ eb2 ~ eb2@4 ~@2 eb2@2]/2",
  T: "[ab1 ~ ab1@3 ~ ab1 ~ ab1@2 gb2@2 f2@2 eb2@6 ~@2 eb2 ~ eb2@4 ~@2 eb2@2]/2", U: "db2@5 ~ db2 ~ db2@4 ~@2 db2@2",
  V: "gb2@5 ~ gb2@2 db2@2 gb2@4 db2@2", W: "eb2@5 ~ eb2 ~ eb2@4 ~@2 eb2@2", X: "db2@5 ~ db2 ~ db2@5 ~ db2@2",
  Y: "eb2@2 ~ eb2 ab2@2 ab1@2", Z: "ab1 ~ ab1@2 ~@2 ab1 ~ ab1@4 ~@2 ab1@2", AA: "db2@4 ~@2 db2 ~ db2@5 ~ db2 ~",
})).s("gm_fretless_bass").gain(0.8)

// chords · piano
const piano = note(`<
  A@8 B@3 C D@7 E F G H I J@3 K L M N@7 O P@7 Q@2 G R S T@3 K U V W@7 O X@7 Y Z G R S AA@3 AB AC V AD AE AF V AG V AH AI
>`.pickRestart({
  A: "[~@10 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@2 [eb4,ab4,c5]@2 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ [eb4,ab4,c5]@2, ~@14 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@11 ~ eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@10 ~@2 eb3@4 ~@2, ~@14 db4@2 ~@14 [ab4,c5]@4 ~@12 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4 ~@9 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@7]/8", // Gb Ab Gb Ab Gb Ab Gb Ab
  B: "[~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4@2 ~@2 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, ab2@2 ~ ab2@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@3 ~@2, ~@8 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8]/3", // Ab Gb Ab
  C: "[ab4,c5,eb5,f5] ~@3 ab4@2 ~@2 ab4@2 [c5,eb5,f5]@2 ab4 ~ db3@2, db3 [c5,eb5,f5] ~@2, ~@6 db3@5 ~@5", // Fm7 F7
  D: "[[f4,ab4,c5,eb5] ~@5 f3@2 bb3@2 f3@4 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@3 ~ db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4 ~@3 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, f3@2 [f4,ab4,c5,eb5]@3 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@3 ~@2, ~@14 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4 ~@15 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8]/7", // Fm7 Gb Ab Gb Ab Gb Ab Fm7 …
  E: "[db4,f4,ab4] ~@3 db4@2 ~@2 db4 ~ db4 ~ db3@2 db4 ~, db3@2 [f4,ab4]@2 ~ [f4,ab4]@2 ~, ~@6 db3@5 ~@5", // Db Fm
  F: "[b3,c4,f4,ab4] ~@3 b3@2 ~@2 b3 ~ b3@2 ~@2 b3 ~, db3@2 [f4,ab4]@2 ~ [f4,ab4]@2 ~, ~@3 db3@2 ~ db3@2", // Fm
  G: "[db4,gb4,bb4] ~@3 db4@2 ~@2 db4@2 [gb4,bb4]@2 db4@2 gb2@2, gb2 [gb4,bb4] ~@2, ~@3 gb2@3 ~@2", // Gb
  H: "[eb4,ab4,c5] ~@3 eb4 ~@3 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, ab2 [ab4,c5] ~@2, ~@3 ab2@3 ~@2", // Ab
  I: "[f4,bb4,db5] ~@3 f4@2 ~@2 f4@2 ~@2 f4@2 bb2@2, bb2@2 [bb4,db5]@2 ~ [bb4,db5]@2 ~, ~@3 bb2@3 ~@2", // Bbm
  J: "[[g4,bb4,eb5] ~@3 g4@2 ~@2 g4 ~ gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4 ~@3 eb4@2 [ab4,c5]@2 eb4@2 ab2@2, eb3@4 [bb4,eb5]@5 ~@5 db4 ~@9 gb4 ~@5 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8, ~@6 eb3@4 ~@4 eb3@10 ~@2 eb3@5 ~ ab2@4 ~@2 ab2@6 ~@4]/3", // Eb Gb Ab Eb5 Ab
  K: "[db4,f4,ab4] ~@3 db4@2 ~@2 db4@2 f4@2 db3@4, db3 [f4,ab4] ~@2, ~@3 db3@2 ~@3", // Db Fm
  L: "[db4,gb4,bb4] ~@3 [db4,gb4,bb4]@4 ~@2 db4@2 ~@2 db4 ~, eb3@2 ab3 ab2, ~@5 [gb4,bb4]@2 ~", // Gb
  M: "db3@2 db4 ~ db4 [f4,ab4] db4 db3, ~ [f4,ab4] ~@2, ~@6 db3@5 ~@5", // Fm
  N: "[[db4,gb4,bb4] ~@3 db4@2 eb3@2 ab3@2 gb3@2 [f3,ab3]@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4 ~@3 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, eb3@2 [gb4,bb4]@2 ~ [db4,gb4,bb4]@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@3 ~@2, ~@14 db4@2 ~@14 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8]/7", // Gb Fm Gb Ab Gb Ab Gb Ab …
  O: "[ab4,c5,eb5,f5] ~@3 ab4@2 ~@2 ab4@2 [c5,eb5,f5]@2 ab4 ~ db3@2, db3 [c5,eb5,f5] ~@2, ~@3 db3@3 ~@2", // Fm7 F7
  P: "[[f4,ab4,c5,eb5] ~@5 f3@2 bb3@2 f3@4 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4 ~@3 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, f3@4 [f4,ab4,c5,eb5]@6 ~@4 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@11 ~ eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@11 ~ eb3@4 ~@2 ab2@4 ~@2 ab2@6 ~@4, ~@14 db4@2 ~@14 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@14 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8]/7", // Fm7 Gb Ab Gb Ab Gb Ab Fm7 …
  Q: "[[db4,f4,ab4] ~@3 db4@2 ~@2 db4@2 [f4,ab4]@2 db4@2 ~@2 [b3,f4,ab4] ~@3 b3@2 ~@2 b3@2 [f4,ab4]@2 b3@2 ~@2, db3 [f4,ab4] ~@3 [f4,ab4] ~@2, ~@6 db3@7 ~ db3@6 ~@2 db3@8 ~@2]/2", // Db Fm Fdim Fm
  R: "[eb4,ab4,c5] ~@3 eb4@2 ~@2 eb4@2 [ab4,c5]@2 eb4@2 ab2@2, ab2 [ab4,c5] ~@2, ~@3 ab2@3 ~@2", // Ab
  S: "[f4,bb4,db5] ~@3 f4@2 ~@2 f4@2 [bb4,db5]@2 f4@2 bb2@2, bb2 [bb4,db5] ~@2, ~@3 bb2@3 ~@2", // Bbm
  T: "[[g4,bb4,eb5] ~@3 g4@2 ~@2 g4@2 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4@2 ~@2 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, eb3@4 [bb4,eb5]@5 ~@5 db4 ~@15 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8, ~@3 eb3@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@3 ~@2]/3", // Eb Gb Ab Eb5 Ab
  U: "[db4,gb4,bb4] ~@3 [db4,gb4,bb4]@4 ~@2 db4@2 ~@2 db4@2, eb3@2 ab3 ab2, ~@10 [gb4,bb4]@5 ~", // Gb
  V: "db3@2 db4 ~ db4 [f4,ab4] db4 db3, ~ [f4,ab4] ~@2, ~@3 db3@3 ~@2", // Fm
  W: "[[db4,gb4,bb4] ~@3 db4@2 ~@2 db4 ~ [gb3,db4,gb4,bb4]@2 [f3,ab3]@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [db4,gb4,bb4]@3 ~ db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4 ~@3 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, eb3@6 ab3@5 ~@3 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@6 ~@4, ~@4 [gb4,bb4]@4 ~@6 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@18 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8]/7", // Gb Fm Gb Ab Gb Ab Gb Ab …
  X: "[[f4,ab4,c5,eb5] ~@5 f3@2 bb3@2 f3@4 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ [eb4,ab4,c5]@2 ~@4 gb3@2 f3@2 gb4@4 db4@2 [gb4,bb4]@2 db4@2 [gb4,bb4] ~@3 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4 ~@3 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, f3@4 [f4,ab4,c5,eb5]@6 ~@4 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@2 e3 ~ eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@4 ~@4 eb3@10 ~@2 eb3@4 ~@2 ab2@4 ~@2 ab2@6 ~@4, ~@14 db4@2 ~@8 gb4 ~@5 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@14 [ab4,c5]@4 ~@6 [eb4,ab4,c5]@4 ~@2 db4@2 ~@32, ~@78 bb4 ~@15 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8]/7", // Fm7 Gb Ab Gb Ab Gb Ab Fm7 …
  Y: "[db4,f4,ab4] ~@3 db4@2 ~@2 db4@2 [f4,ab4]@2 db4@2 db3 ~, db3 [f4,ab4] ~@2, ~@3 db3@3 ~@2", // Db Fm
  Z: "[b3,f4,ab4] ~@3 b3@2 ~@2 b3@2 [f4,ab4]@2 b3@3 ~, db3 [f4,ab4] ~@2, ~@6 db3@9 ~", // Fdim Fm
  AA: "[[g4,bb4,eb5] ~@3 g4@2 ~@2 g4 ~ gb3@2 f3@2 [gb4,bb4]@4 db4@2 [gb4,bb4]@2 db4@2 bb4@2 ~@2 [gb4,bb4,db5] ~ eb4@2 ~@2 eb4 ~ eb4@2 ~@2 eb4@2 [ab4,c5]@2 eb4 ~ ab2@2, eb3@4 [bb4,eb5]@5 ~@5 db4 ~@9 gb4 ~@5 [ab4,c5]@4 ~@2 [ab4,c5]@4 ~@8, ~@3 eb3@2 ~@2 eb3@5 ~ eb3@2 ~ ab2@2 ~ ab2@3 ~@2]/3", // Eb Gb Ab Eb5 Ab
  AB: "[db4,f4,ab4] ~@3 db4@2 ~@2 db4@2 f4@2 db3@4, db3@4 [f4,ab4]@5 ~@7, ~@3 db3@2 ~@3", // Db Fm
  AC: "[db4,gb4,bb4] ~@3 [gb4,bb4]@4 ~@2 db4@2 ~@2 db4 ~, eb3@2 ab3 ab2, ~@4 db4 ~@5 [gb4,bb4]@4 ~@2", // Gb
  AD: "[db4,gb4,bb4] ~@3 [gb4,bb4]@4 ab3@2 [db4,gb4,bb4]@4 ab3@2, eb3 ~, ~@4 db4 ~@11", // Gb
  AE: "db3@4 db4@2 ~@2 db4 ~ [f4,ab4]@2 db4@2 db3@2, ~ [f4,ab4] ~@2, ~@3 db3@3 ~@2", // Fm
  AF: "[db4,gb4,bb4] ~@3 [db4,gb4,bb4]@4 ab3@2 db4@2 ab3@2 db4@2, eb3@4 ~@6 [gb4,bb4]@5 ~", // Gb
  AG: "[db4,gb4,bb4] ~@3 [db4,gb4,bb4]@4 ~@2 [gb4,bb4]@4 db4@2, eb3@2 ~@2 ab3@3 ~, ~@5 db4 ~@2", // Gb
  AH: "[db4,gb4,bb4] ~@3 db4 ~ eb3@2 ab3@2 db4@2 ab3@2 db4@2, eb3@4 [gb4,bb4]@4 ~@2 [gb4,bb4]@5 ~", // Gb
  AI: "~@4 [db4,f4,ab4]@5 ~@7, db3@9 ~@7", // Db
})).s("gm_piano").gain(0.35)

// other · distortion guitar · "guitar"
const distortion_guitar = note(`<
  A@4 B@2 C@2 A@2 ~@2 D@2 A@2 E@2 ~@12 C@4 F@2 ~@2 G@2 E@2 C@2 ~@12 E@2 F@2 C@2 ~@2 H@2 E@4 ~@20
>`.pickRestart({
  A: "[~@10 gb3@2 f3@2 eb3@15 ~@3]/2", B: "[~@5 gb3 f3 eb3@7 ~@2]/2", C: "[~@5 gb3 f3 eb3@8 ~]/2",
  D: "[~@4 bb3 f3@2 eb3@7 ~@2]/2", E: "[~@10 gb3@2 f3@2 eb3@17 ~]/2", F: "[~@5 gb3 f3 eb3@9]/2",
  G: "[~@8 bb3@2 f3@4 eb3@15 ~@3]/2", H: "[~@4 bb3 f3@2 eb3@8 ~]/2",
})).s("gm_distortion_guitar").gain(0.35)

// other · pad warm
const pad_warm = note("<~@27 A B A C ~@22 A B A C ~@22 A D A B A D A D A B ~>".pickRestart({
  A: "~ ab3@2 c4", B: "bb3", C: "bb3@7 ~", D: "bb3@15 ~",
})).s("gm_pad_warm").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@5 x!2]!20
  [x ~@3 x!2 ~@2]!10
  [x ~@5 x!2]!16
  [x ~@3 x!2 ~@2]!11
  [x ~@5 x!2]!15
  [x ~@3 x!2 ~@2]!17
  ~
>`).gain(0.71)

// drums · snare
const snare = s("sd").struct(`<
  A@20 B C@3 B C@5 A@16 B C@3 B C B C@4 A@15 B C@3 B C@3 B C B C B C B C@2 ~
>`.pickRestart({
  A: "~ x ~@2", B: "~@4 x ~@2 x!2 ~ x!6", C: "~ x ~ x",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!89 ~>").gain(0.71)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@6 x!2]!20 ~@10 [~@6 x!2]!16 ~@11 [~@6 x!2]!15 ~@18>").gain(0.71)

stack(bass, piano, distortion_guitar, pad_warm, kick, snare, hihat, mid_tom)

More by Todd Rundgren