Strudelify

To Be a Lover

Billy Idol

KeyC majorTempo132 bpm
0:00/0:00
// To Be a Lover — IDOL BILLY
// 132 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "FRETLESS" fretless bass (copy of ch 2 "ACOU BASS" acoustic bass); ch 7 "SYNBRASS 1" synth brass 1 (copy of ch 8 "SYNBRASS 2" synth brass 2)
// note: Full arrangement: all 174 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A@16 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@12 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@2 C ~ B D B E A F A G B D B D A@8 B@4 A@4 B@4 A F
  A F B D B D A F A F B D B D A F C ~ B D B D A F A G B E B D A F A G B D B D A F A G B D B D A F A G H I
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", B: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", C: "c2 ~@15",
  D: "f2 a2 a#2 a2 a#2 a2 a#2 a2", E: "f2 ~ a2@2 a#2@2 a2@2 a#2@2 a2@2 a#2@2 a2@2",
  F: "c2 ~ a2@2 a#2@2 a2@2 a#2@2 a2@2 a#2@2 a2@2", G: "c2 ~ a2@2 a#2@2 a2 ~ a#2@2 a2@2 a#2@2 a2@2",
  H: "c3 ~ c3@4 ~@2 c3 ~ c3@3 ~ g2 ~", I: "c2 ~ c2@12 ~@2, ~@2 b1 ~@13",
})).s("gm_acoustic_bass").gain(0.53)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@47 A@2 B@2 C D E F G H I@2 J K L M N@2 O@2 P Q R@2 S T@2 U V@3 W@2 X@3 Y Z AA ~ AB AC AD@2 AE AF AG@3 AH AI@2 AJ AK
  AL@2 AM ~@8 AN@2 AO@2 AP@2 AQ@2 AR@2 AS@2 AT@2 AU@2 AV@2 AW AX AY@2 AZ@2 BA@2 BB BC BD BE BF BG BH BI BJ BK BL BM BN
  BO BP BQ BR@2 T@2 U V@3 W@2 T@2 U V@3 W@2 BS BT
>`.pickRestart({
  A: "[~@14 [g6,a#6]@4 c6@2 [f6,a6]@2 c6@2 d#6 e6 ~@2 [f6,a6]@2 c6 ~, ~@14 f#6@2 ~@8 g6@3 ~@5, ~@14 c6 ~@13 c6 ~@3]/2", // Gm F
  B: "[e6@2 [a5,f6]@3 ~ [g5,c6,e6]@2 ~@2 [f5,a5,c6]@2 ~@2 [c5,g5,c6]@4 [c5,g5]@2 [f5,a5]@2 c5 ~ [c5,f5,g5,c6] ~ [c5,g5]@2 a5@2 c5@2, c6@6 ~@12 c6 ~@7 c6 ~@5, g5 ~@31]/2", // Dm C F C5 F Csus4 C5
  C: "~ e5 g5@2 a5@2 c5@2 [g5,c6] ~ [g5,c6,e6]@2 ~@2 [g5,c6,e6]@2, d#5 ~@7", // C5 C
  D: "~@2 [g5,c6] ~ [a5,c6,f6]@2 ~@2 [g5,c6,e6]@2 ~@2 [f5,a5]@2 ~@2, ~ e6 ~@6", // C5 F C F
  E: "[c5,g5,c6]@3 ~ [c5,f5,a5]@2 g5 ~ g5@2 a5@2 g5 ~ [c5,g5,c6]@2, ~@8 c5@5 ~@3, ~@8 c6 ~@7", // C5 F C5
  F: "~@2 [c5,g5]@2 a5@2 c5@2 d#5 ~ g5@2 a5@2 g5 ~, ~@2 c6 ~@6 e5@2 ~@5", // C5
  G: "~@2 c5@2 g5 ~ [c5,g5,c6]@3 ~ [c5,g5,c6]@3 ~ [c5,d#5,g5,c6] ~, [g5,c6] ~@7, ~ a5@3 ~@12", // C5 Cm C5
  H: "[c5,d#5]@8 [c5,d#5]@3 ~ [a#4,d5]@2 f4@2, f4@11 ~ f4 ~@3", // Cm A#
  I: "[c5@2 [a#4,d5]@2 ~@2 [f4,a4,c5]@2 ~@2 [f4,d5] ~@3 [c5,d#5]@4 ~@2 d5@2 ~@2 [a4,c5] ~ [g3,g4]@2 [a3,a4] ~ [c4,g4,c5]@2, a4 ~ [f4,c5] ~@7 a#4@2 ~@2 f4@3 ~ f4@4 ~@10]/2", // A# F Dm Cm Am G A C5 …
  J: "~@2 g4@2 [a3,a4] ~ [c4,c5]@4 [g3,g4]@2 a3@2 [c4,g4,c5]@2, ~@2 g3 ~@3 g4@2 ~@4 a4 ~@3", // A C G C5
  K: "[c5,g5,c6]@2 [f5,a5] ~ [e5,g5]@2 [c5,f5] ~, ~@4 c5 ~ c5@5 ~ a5@4", // C5 F Em F5
  L: "[c5,e5,g5]@2 ~@2 [a4,c5,f5]@3 ~ [g4,c5,e5] ~ [a4,c5,f5]@3 ~ [g4,c5,e5]@2", // C F C F C
  M: "~ [a4,c5,f5] ~ [c5,e5]@2 ~ [c5,e5] ~, ~@3 g4 ~ g4@2 ~", // F C
  N: "[[g4,c5,e5]@2 ~@2 [g4,c5]@2 ~@4 c5@3 ~ [a4,c5]@4 ~@2 [a#4,d5]@3 ~ [f4,c5,d#5]@3 ~ [a#4,d5]@2 f4@2, ~@8 [g4,d#5]@4 ~@2 f4@3 ~ f4@4 ~@10]/2", // C C5 Am A# F7 A# Cm
  O: "[c5@2 [f4,a#4,d5]@3 ~ [f4,a4,c5]@2 ~@2 [g4,c5,d#5]@3 ~ [c5,d#5,g5]@4 ~@2 [c5,f5]@4 [g4,c5]@3 ~ c5@2 g4@2, a4 ~@13 g4@2 ~@2 g4@4 ~@2 d#5@4 ~@4]/2", // A# F Cm F5 C5
  P: "[c5,g5] ~ [g4,f5]@4 d#5@4 [c5,f5]@3 ~ c5 ~, d#5 c5@3 ~@4, ~@6 g4@2 ~@2 g4 ~@5", // C5 G7 F5
  Q: "[e5,c6]@3 ~ [c5,f5,a5]@3 ~ [e5,g5,c6]@2 c5@2 a5@2 [c5,g5,c6]@2", // C F C C5
  R: "[~@2 [c5,g5,c6]@3 ~ [c5,g5,c6]@3 ~ [c5,g5]@2 a5@2 ~@2 [e5,g5,c6]@4 [f5,a5]@2 c5 ~ [e5,g5,c6]@4 [f5,a5]@2 c5@2, ~@10 c6 ~@3 c5@4 ~@14]/2", // C5 C F C F
  S: "~@2 c5@3 ~ [c5,g5,a#5]@3 ~ [c5,f5,a5]@3 ~ [c5,d#5,g5]@2", // C7 F Cm
  T: "[[d#5,g5,c6]@2 ~@4 [f5,a5,c6,f6,g6]@3 ~ [f5,c6]@2 a#5@2 ~@2 [c6,d#6]@3 ~ [a#5,d6]@2 f5 ~ [f5,c6]@4 ~@2 f5 ~, ~@10 [a5,f6] ~ d6 ~ f5@6 ~@4 d#6@2 ~@2 d6@2 ~@2, ~@29 a#5@2 ~]/2", // Cm F F5 Cm A# F5 Dm
  U: "a5@2 f5 ~ d#5 ~ [d#5,g5,c6]@3 ~ [d#5,c6]@2 g5@2 c5 ~, c6 ~@9 g5 ~@5", // Cm
  V: "[[d#5,g5,c6]@3 ~ [f5,a5]@2 c5 ~ [d#5,g5]@3 ~ [f5,a5]@2 ~@2 [g5,c6]@2 ~@4 [g5,c6]@4 c5@2 [f5,a5]@2 ~@2 [g5,a#5]@3 ~ [f5,a5]@2 ~@2 [g5,a#5]@3 ~ [f5,a5]@2 c5 ~, ~@7 c5@2 ~@2 c5 ~@3 c5@3 ~ c5@3 ~@2, ~@40 f#5 ~@7]/3", // Cm F D# F C5 F Gm F …
  W: "[[c5,e5,g5]@2 ~@4 [e5,g5]@4 c5@2 [f5,a5]@2 ~@2 [g5,a#5]@3 ~ [f5,a5]@2 ~@3 g5@3 [f5,a5]@2 c5 ~, ~@3 c5 ~@3 c5@3 ~ c5@3 ~@2, ~@24 a#5@3 ~@5]/2", // C Em F Gm F
  X: "[[c5,d#5]@2 f4@2 c5 ~ [f4,c5,d#5]@4 f4@2 c5 ~ [f4,c5,d#5]@4 f4@2 c5 ~ [c5,d#5]@4 f4@2 c5 ~ [c5,d#5]@4 ~@2 [a#4,d5]@3 ~ [f4,a4]@2 ~@2 [f4,a#4,d5]@3 ~, ~@11 f4 ~@3 f4 ~ f4@2 ~ c5@2 ~@2]/3", // Cm F7 Cm A# F A#
  Y: "~@2 [f4,c5,d#5]@3 ~ [f4,c5,d#5]@3 ~ [f4,a#4,d5]@3 ~ [g4,c5]@2", // F7 A# C5
  Z: "~@4 [c5,g5,c6]@3 ~ [g5,c6]@3 ~ [f5,a5]@3 ~, ~@2 c5 ~", // C5 F
  AA: "[c5,g5,c6]@3 ~ [c5,a5]@3 ~ c6 ~ a5@3 ~ [c5,g5,c6]@2, ~@2 [c5,g5] ~", AB: "~@8 [g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~",
  AC: "[g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~ [f5,a#5,d6]@3 ~", // D# A#
  AD: "[[d#5,g5,c6]@3 ~ [f5,a5]@2 c5@2 [d#5,g5,c6] ~ [d#5,g5,c6]@3 ~ [d#5,g5,c6]@4 ~@2 [f5,a5]@3 ~ [d#5,g5,c6]@3 ~ [f5,a5]@2 c5@2, ~@18 c5@5 ~@9]/2", // Cm F Cm F Cm F
  AE: "~@2 [c5,g5,c6]@3 ~ [g5,c6] ~ [g5,c6]@2 c5@2 g5@2 [c5,g5,c6]@2, ~@6 c5@2 ~@4 c6 ~@3", // C5
  AF: "[c6,g6,a#6]@2 ~@2 [c6,f6,a6]@2 ~@2 [c6,e6,g6]@3 ~ [c6,f6,a6]@2 ~@2", // C7 F C F
  AG: "[[c6,f#6,a#6] ~ [c6,f6,a6]@2 ~@2 [c6,d#6] ~@3 [c6,f6,a6] ~@3 [g5,a#5]@4 c5 ~ [c5,f5,a5]@2 ~@2 [c5,e5,g5]@3 ~ [f5,a5]@2 ~@2 [g5,a#5] ~ [f5,a5]@2 c5 ~ [c5,e5,g5]@3 ~ [c5,f5,a5]@2 ~@4, ~@6 g6@2 ~@6 c5@3 ~@11 c5 ~ c5@5 ~@13, ~@14 f#5 ~@19 g5 ~@13]/3", // Cm7b5 F Cm F Gm F C F …
  AH: "[c5,d#5,g5]@3 ~ [f5,a5]@2 ~@2 [d#5,g5]@3 ~ [f5,a5]@2 c5@2, ~@4 c5 ~ c5@5 ~ c5 ~@3", // Cm F D# F
  AI: "[[d#5,g5] ~ [c5,g5]@2 a5@2 [c5,d#5,g5,c6]@3 ~ [c5,d#5,g5]@2 ~ f5 ~@2 [d#5,g5]@3 ~ [f5,a5]@2 c5 ~ [c5,d#5,g5]@4 [f5,a5]@2 c5@2, ~@2 d#5 ~ f5 ~@5 c6 ~ a5@2 c5@6 ~@12]/2", // D# C5 Cm D# F Cm F
  AJ: "[d#5,g5] ~ [c5,d#5] ~ [c5,f5] ~ [c5,g5,c6]@3 ~ [c5,g5]@2 ~ f5 c5 ~, ~@2 g5@2 a5@2 ~@4 c6 ~ a5@2 ~@2", // D# Cm F5 C5
  AK: "[g4,e5] ~ e5@2 [c5,f5]@2 a4 ~ [g4,c5,e5]@4 [c5,f5]@2 a4 ~, c5@2 g4 ~ a4 ~@7 a4 ~@3", // C F5 C F5
  AL: "[[g4,c5,e5]@2 ~@2 [a4,c5,f5]@2 ~@2 [c5,e5]@2 g4 ~ g4@2 ~@2 g4@2 [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5]@3 ~ [c4,g4,c5]@3 ~ [c4,g4,c5]@2, ~@7 c4@2 ~@7]/2", // C F C C5
  AM: "~@2 g4@2 d#5@2 g4@2 d#5 ~ [g4,d#5] ~ d5@2 [g4,c5] ~, ~@12 g4 ~@3", // Cm C5
  AN: "[~@8 [g4,c5,e5]@7 ~ [c5,d#5,e5,g5]@3 ~ [a4,c5,f5]@2 ~@2 [g4,c5,e5] ~@7, c4@31 ~]/2", // C F C
  AO: "[~@8 [g4,c5,e5]@6 ~@2 [c5,e5,g5]@3 ~ [a4,c5,f5]@2 ~@2 [g4,e5] ~@7, c4@31 ~, ~@16 d#5 ~@7 c5@2 ~@6]/2", // C F C
  AP: "[~@8 [g4,c5,d#5]@8 [d#5,g5]@3 ~ [d5,f5]@3 ~ [c5,d#5]@2 ~@6, f3@31 ~, ~@16 d5 ~@15]/2", // Cm D# Dm Cm
  AQ: "[~@8 [g4,c5,d#5]@8 [d#5,g5]@3 ~ [d5,f5]@3 ~ [c5,d#5]@2 ~@6, f3@31 ~]/2", // Cm D# Dm Cm
  AR: "[[g4,c5,e5]@3 ~@5 g4 ~ g4@3 ~ [c5,e5]@4 g4 ~ [a4,c5,f5]@3 ~ [g4,c5,e5]@6 ~@2, ~@4 [c5,e5]@2 ~ g4 ~@8]/2", // C F C
  AS: "[~@4 [g4,c5,e5]@2 ~@2 [c5,e5]@2 g4 ~@3 [c5,e5]@4 g4 ~ [a4,c5,f5]@2 ~@2 [c5,e5]@2 g4@2 ~@4, ~@14 g4 ~@17]/2", // C F C
  AT: "[~@2 f4 ~ [a4,c5]@2 f4@2 ~@2 [f4,a4,c5] ~@3 [a4,c5]@4 f4 ~ [f4,a#4,d5]@2 ~@2 [a4,c5]@3 ~@5, ~@4 f4 ~@9 f4@2 ~@8 f4 ~@7]/2", // Am F Am A# Am
  AU: "[~@2 f4 ~ [a4,c5]@2 f4 ~ [f4,a4,c5] ~ [f4,a4,c5] ~@3 [a4,c5]@4 f4 ~ [f4,a#4,d5]@2 ~@3 d5 ~@6, ~@4 f4 ~@9 f4@2 ~@8 [f4,a4,c5]@3 ~@5]/2", // Am F Am A# F
  AV: "[~@2 g4 ~ [c5,e5]@2 g4@2 c5 ~ [g4,c5,e5] ~@3 [c5,e5]@4 g4 ~ [a4,c5,f5]@3 ~ [g4,c5,e5]@2 ~@6, ~@7 g4 ~@8]/2", // C F C
  AW: "~@4 [c5,e5]@2 g4@2 c5 ~ [g4,c5,e5]@2 ~@2 [c5,e5]@2, ~@14 g4 ~", // C
  AX: "~@2 [c5,f5]@4 g4 ~ d#5@2 g4 ~ d5@2 f4 ~, ~ g4 ~@6", // F5
  AY: "[[f4,a4,c5]@4 [a4,c5]@2 f4@2 a4 ~ [f4,a4,c5] ~@3 [a4,c5]@4 f4@2 [a#4,d5]@2 f4 ~ [a4,c5]@2 f4 ~@5, ~@14 f4 ~@17]/2", // F Am F Am A# Am
  AZ: "[~@2 f4 ~ c5@2 f4 ~ a4 ~ [a4,c5]@2 ~@2 [a4,c5]@4 f4 ~ [a#4,d5]@2 f4 ~ [a4,c5]@2 f4 ~@3 g4 ~, ~@4 a4 ~@5 f4 ~@3 f4 ~@5 c5 ~@11]/2", // Am A# Am
  BA: "[~@2 g4 ~ [c5,e5]@2 g4@2 c5 ~ [g4,c5] ~@3 [c5,e5]@4 g4 ~ [c5,f5]@2 a4 ~ [c5,e5]@2 g4 ~@5, ~@10 e5@2 ~@2 g4 ~@5 a4 ~@11]/2", // C C5 C F5 C
  BB: "[c5,g5,a#5] ~@7, f#5 ~@15", // C7
  BC: "[g5,a#5,d#6]@4 [f5,a#5,d6]@3 ~ [g5,a#5,d#6]@3 ~ [g5,a#5] ~ [f5,a5,c6]@2, ~@6 d#6 ~", // D# A# D# Gm F
  BD: "~@6 [a5,c6]@4 f5@2 a5 ~ [f5,a5,c6]@2, ~@6 f5@3 ~@7", // Am F
  BE: "~@2 [a5,c6] ~ a#5@2 f5 ~ [f5,c6,d#6]@3 ~ [c6,d#6]@2 f5 ~, ~@2 f5@2 d6 ~@7 f5 ~@3", // Am F7 Cm
  BF: "[f5,a5,c6] ~@2 [f5,a5,c6]@5", BG: "~@2 [a5,c6] ~ a#5@2 f5 ~ [f5,c6,d#6]@3 ~ [c6,d#6]@2 f5 ~, ~@2 f5@2 d6 ~@11",
  BH: "[e5,g5,c6]@3 ~@4 c6@4 ~ [f5,a5]@2 c5 ~, ~@6 [g5,d6]@5 ~@5", // C F G5
  BI: "[c5,g5,a#5]@4 [g5,a#5]@2 c5 ~ [c5,g5]@4 [f5,a5]@2 c5 ~, ~@4 a#5 ~@3", // C7 Gm C5 F
  BJ: "[c5,e5,g5]@2 ~@4 [c5,e5,g5,c6]@5 ~ [f5,a5]@2 c5 ~, c6 ~@15", // C F
  BK: "[c5,g5,a#5]@4 g5@2 ~@2 [g5,a#5]@3 ~ [f5,a5]@2 c5 ~, f#5 ~@3 a#5 ~ c5@6 ~@4", // C7 Gm F
  BL: "[d#5,g5,c6]@2 ~@4 [d#5,g5,c6]@4 ~@2 [a#5,d6]@2 f5 ~, ~@12 f5 ~@3", // Cm A#
  BM: "[f5,c6,d#6]@4 [c6,d#6]@2 ~@2 [c6,d#6]@3 ~ [a#5,d6]@2 f5 ~, ~@3 f5@3 ~@2", // F7 Cm A#
  BN: "[f5,a5,c6] ~@2 [f5,a5,c6]@2 f5 [a#5,d6] f5", BO: "[f5,c6,d#6]@4 [c6,d#6]@2 f5 ~ [f5,c6,d#6]@3 ~ [a#5,d6]@2 f5 ~",
  BP: "[e5,g5,c6]@2 ~@4 [e5,g5,c6]@4 c5 ~ [f5,a5]@2 c5 ~", // C F
  BQ: "[c5,g5,a#5]@3 ~ [g5,a#5]@2 ~@2 [g5,a#5]@3 ~ [f5,a5]@2 c5 ~, ~@3 c5@3 ~@2", // C7 Gm F
  BR: "[[e5,g5]@2 ~@4 [c5,g5,c6]@3 ~ [c5,g5]@2 [f5,a5]@2 ~@2 [g5,a#5]@3 ~ [g5,a5] ~@3 [g5,a#5]@3 ~ [f5,a5]@2 c5 ~, c6 ~@9 c6 ~@3 c5@6 ~@2 c5@6 ~@4]/2", // Em C5 F Gm Gsus2 Gm F
  BS: "[c5,g5,c6] ~ [g5,c6]@4 c5@2 [g5,c6] ~ [c5,g5,c6]@4 c5@2, ~@2 c5@3 ~@11", BT: "[g5,c6] ~ [c5,g5,c6]@11 ~@3",
})).s("gm_piano").gain(0.8)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@44 A@8 ~@122>".pickRestart({
  A: "[c4,g4,c5]/8", // C5
})).s("gm_string_ensemble_1").gain(0.17)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@16 A@2 B@2 C@2 D@2 E@8 F@4 G@4 H@4 I@4 J@8 K@4 I@4 K@4 I@4 K@4 I@4 K@4 L@2 ~@2 K@4 I@4 K@4 I@4 ~@8 M@2 N@2 O@2 P@2
  I@4 F@4 G@4 F@4 L@2 ~@2 F@4 I@4 F@4 I@4 F@4 I@4 F@4 I@4 ~@2
>`.pickRestart({
  A: "[c4,d#4,g4]/2", B: "[[c4,d#4,g4]@31 ~]/2", C: "[[g3,c4]@7 [a3,d4], a3 ~@31]/2", D: "[[a#3,d#4]@31 ~]/2",
  E: "[f4@63 ~ g3@64, c4@127 ~]/8", F: "[c4,f4]/4", G: "[[g3,c4]@63 ~]/4", H: "[[c4,f4]@63 ~]/4", I: "[g3,c4]/4",
  J: "[g3, c4 ~]/8", K: "[[c4,d#4,g4]@63 ~]/4", L: "[g3,c4]/2", M: "[~@4 [g3,c4]@7 ~@5, ~@8 b3 ~@23]/2",
  N: "[~@4 [g3,c4]@7 ~@5]/2", O: "[~@8 [c4,d#4,g4]@15 ~@9]/2", P: "[~ [c4,d#4,g4]@2 ~]/2",
})).s("gm_brass_section").gain(0.39)

// chords · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~@4 A@2 B@2 C@2 B@2 C@2 B@2 D@2 E@2 A@2 B@2 D@2 E@2 C@2 B@2 F@2 E@2 C@2 B@2 F@2 E@2 G@8 ~@4 H@2 I@2 C@2 B@2 J@2 K@2
  C@2 B@2 D@2 I@2 C@2 B@2 H@2 I@2 C@2 ~@2 H@2 L@2 C@2 B@2 D@2 M@2 A@2 B@2 ~@16 C@2 B@2 J@2 M@2 C@2 B@2 H@2 M@2 C@2 ~@2
  H@2 I@2 C@2 B@2 H@2 M@2 C@2 B@2 D@2 M@2 A@2 B@2 D@2 M@2 C@2 B@2 N O
>`.pickRestart({
  A: "[[c4,g4,c5]@2 ~@4 [c4,g4,c5]@13 ~ [c4,g4,c5]@2 ~@2 c5 ~ [c4,g4,c5]@2 ~@4]/2", // C5
  B: "[[c4,g4,c5]@2 ~@4 [c4,g4,c5]@13 ~ [c4,g4,c5]@2 ~@4 [c4,g4,c5]@2 ~@4]/2", // C5
  C: "[[c4,g4,c5]@2 ~@4 [c4,g4,c5]@13 ~ [c4,g4,c5]@2 ~@2 c5 ~ [g4,c5]@2 ~@4, ~@26 c4 ~@5]/2", // C5
  D: "[[f4,c5,d#5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,g5]@2 ~@4 [f4,g5]@2 ~@4, ~@20 d#5 ~@5 [c5,d#5] ~@5]/2", // Cm Fsus2 Cm
  E: "[[f4,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,d#5,g5]@2 ~@4 [c5,d#5,g5] ~@5, [c5,d#5] ~@25 f4@2 ~@4]/2", // Fsus2 Cm
  F: "[[f4,c5,d#5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,d#5,g5]@2 ~@4 [f4,g5]@2 ~@4, ~@26 [c5,d#5] ~@5]/2", // Cm Fsus2 Cm
  G: "[c4,g4,c5]/8", // C5
  H: "[[f4,c5,d#5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,g5]@2 ~@4 [f4,c5,g5]@2 ~@4, ~@20 d#5 ~@5 d#5 ~@5]/2", // Cm Fsus2
  I: "[[f4,c5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,g5]@2 ~@4 [c5,d#5,g5] ~@5, d#5 ~@19 d#5 ~@5 f4@2 ~@4]/2", // Fsus2 Cm Fsus2 Cm
  J: "[[f4,c5,d#5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,d#5,g5]@2 ~@4 [f4,c5,g5]@2 ~@4, ~@26 d#5 ~@5]/2", // Cm Fsus2
  K: "[[f4,c5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,d#5,g5]@2 ~@4 [c5,d#5,g5] ~@5, d#5 ~@25 f4@2 ~@4]/2", // Fsus2 Cm
  L: "[[f4,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,g5]@2 ~@4 [c5,d#5,g5] ~@5, [c5,d#5] ~@19 d#5 ~@5 f4@2 ~@4]/2", // Fsus2 Cm Fsus2 Cm
  M: "[[f4,c5,d#5,g5]@2 ~@6 [f4,c5,d#5,g5]@11 ~ [f4,c5,g5]@2 ~@4 [c5,d#5,g5] ~@5, ~@20 d#5 ~@5 f4@2 ~@4]/2", // Cm Fsus2 Cm
  N: "[c4,g4,c5] ~@2 [c4,g4]@5 [c4,g4,c5] ~ [c4,g4,c5]@4 g4 ~, ~@2 c5@5 ~@9", O: "[c4,g4,c5] ~@2 [c4,g4,c5]@11 ~@2",
})).s("gm_synth_brass_2").gain(0.36)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@26 A@8 B C@6 D@3 E@4 ~@10 F@6 ~@3 G@3 H I@2 J@3 K@7 L M@3 ~ N@7 O@5 P@4 ~@16 Q@6 R@4 S@8 T ~ U@7 V W@2 X Y Z@4 AA@2
  AB@4 AC@2 AD@2 AE@4 AF@2 AG AH
>`.pickRestart({
  A: "[g5@8 [f5,a5]@8 g5@8 a5@8 g5@63 ~ [d#5,g5,c6]@31 ~, c5@127 ~, c6@11 ~@117, d#5@7 ~@9 d#5@7 ~ f5@7 ~@97]/8", // F Cm
  B: "[d#5,g5,c6] [f5,a5], c5@15 ~", // Cm F
  C: "[[c5,d#5,g5]@8 [f5,a5]@8 g5@63 ~ [d#5,g5,c6]@8 ~@6 c5@2, ~@8 c5@85 ~@3, ~@16 e5 ~@71 [f5,a5]@8]/6", // Cm F Cm F
  D: "[d#5@6 ~@2 [f5,a5]@6 ~@2 [d#5,g5,c6]@18 ~@2 [f5,a5]@4 [c5,d#5,g5]@4 [c5,f5,a5]@3 ~, g5@3 ~@13, ~@6 c5@7 ~ c5@18 ~@2 c5@5 ~@9]/3", // F Cm F Cm F
  E: "[~@32 g5@31 ~, g4@63 ~, c5@61 ~@3]/4",
  F: "[[d#5,g5,c6]@8 a5@8 [d#5,g5]@8 a5@6 ~@2 [g5,c6]@26 [f5,a5]@4 g5@20 [g4,c5]@4 g4@4 g4@3 ~ [g4,c5]@2, c5@29 ~ c5@51 ~@5 c5@8 ~@2, ~@8 f5@6 ~@10 f5@9 ~@63]/6", // Cm D# C5 F C5
  G: "[[d#5,g5,c6]@5 [f5,a5]@3 g5@16, c5@47 ~]/3", H: "~@10 [g5,d#6]@3 ~ [g5,d#6]@2",
  I: "[~@2 [g5,d#6] ~ [f5,d6]@3 ~ [e5,c6]@2 ~@2 [f5,a5]@2 g5 ~ [d#5,g5]@12 [f5,a5]@2 c5@2, ~@4 g5 ~@5 c5@19 ~@3]/2", // Cm Dm C F D# F
  J: "[[d#5,c6] ~ [c5,f5,a5]@4 d#5@8 c5@22 ~@2 [c6,d6] ~@5 d6@2 c6 ~, g5@2 ~@4 [g5,c6]@31 ~ g5@9 ~, ~@38 d#6@5 ~@5]/3", // Cm F Csus2 C5
  K: "[~@20 g4@4 g4@2 [g4,c5]@3 ~ [g4,c5]@19 ~ [c5,g5,c6]@3 ~ [c5,g5,c6]@2 ~@2 [c5,g5,c6]@2 ~@2 [c5,g5]@6 [f5,a5]@2 ~@2 [d#5,g5]@4 [f5,a5]@2 ~@2 [g5,c6]@4 [f5,a5]@4 g5@4 a5@2 ~@2 [g5,c6]@13 ~ [d#5,g5,c6]@2, c5@24 c5 ~@37 [d#5,c6]@5 ~@3 c5@5 ~ c5 ~ c5@15 ~ c5@16 ~@2, g5@22 ~@66 d#5@3 ~ f5@4 ~@16]/7", // C5 F D# F C5 F C5 Cm
  L: "~@2 [d#5,g5,c6] ~ [f5,a5]@2 ~@2 [d#5,g5]@4 [f5,a5]@2 c5 ~, ~@6 c5@5 ~@5", // Cm F D# F
  M: "[~@30 [g5,a5,c6,d6] ~ [g5,c6] ~@15, [g4,c5]@11 ~@5]/3", // Gsus4 C5
  N: "[[c5,c6] ~@33 c6@4 c5 ~ c6@4 ~@4 [d#5,g5]@4 [f5,a5]@2 c5@2 g5@2 [f5,a5]@4 [c5,g5,c6]@49 ~, g5@45 ~ c5@7 ~@5 c5@2 ~@52, d#5@43 ~ [f5,a5]@4 ~@8 d#5 ~@55]/7", // C D# F C5 F
  O: "[[c5,g5,c6]@3 ~ [c5,c6]@4 c5@4 [g5,c6]@2 ~@2 [d#5,g5]@23 ~ [c5,d#5] ~ [f5,a5]@3 ~ [g5,c6]@13 ~@3 [c6,d6] ~@13 d6@2 c6 ~, ~@4 g5@8 ~@2 c5@25 ~@3 c5@20 g5@11 ~ g5@5 ~, ~@8 c6@3 ~@29 g5@2 ~@20 d#6@12 ~@6]/5", // C5 C C5 D# Cm F C5 Csus2
  P: "[[g5,c6]@18 ~@4 [g5,c6]@4 c6@2 a5@2 c6@3 ~ c6 ~ a5@4 g5@12 a5@4 [c5,d#5] ~@3 [f5,a5]@3 ~, ~@18 c5@37 ~@3 c5@6, ~@26 g5 ~@3 g5@7 ~@3 c6@11 ~@5 g5@2 ~@6]/4", // C5 Cm F
  Q: "[c6@26 c5@2 ~@4 d#5 ~@21 c6@4 ~@2 a5@4 ~@22 c6@6 [f5,a5]@4, g5@29 ~@35 g5@29 ~@3, c5@25 ~@5 c5@27 ~ c5@38, f#5 ~@27 [f5,a5]@4 [e5,g5]@27 ~ f5@3 ~ d#5@27 ~@5]/6", // F Em
  R: "[d#5@21 ~ [d#5,c6]@6 a5@4 [e5,g5]@22 c5@3 ~@3 [f5,a5]@4, g5@28 f5@3 ~ d#5 ~@21 g5@8 ~@2, ~@22 c5@31 ~ c6@6 ~@4, ~@58 c5@5 ~]/4", // Cm Em F
  S: "[[e5,g5]@22 [g5,c6]@4 c5@2 ~@4 [d#5,g5]@21 ~@5 c5@2 ~@4 [d#5,g5]@21 ~ g5@4 c5@2 f5@2 ~@2 [e5,g5]@20 c6@2 [c5,g5,c6]@4 [c5,g5]@2 [f5,a5]@2 c5@2, c5@25 ~@5 c5@27 ~@5 c5@27 ~@5 c5@23 ~@11, f#5 ~@27 [f5,a5]@4 ~@22 [d#5,g5,c6]@6 [f5,a5]@4 ~@22 c6@3 ~@3 a5@4 ~@26 c6 ~@5]/8", // Em C5 D# Em C5 F Cm F
  T: "[g5,c6] ~@7", // C5
  U: "[[c5,g5,c6]@28 [f5,a5]@4 [d#5,c6]@19 ~ [c5,f5,c6]@4 [g5,c6]@34 c5@2 [f5,a5]@2 ~@2 g5@12 ~@4, ~@28 c5@23 ~@5 c5@33 ~@5 c5@18, ~@48 e5@5 ~@3, ~@96 d#5 ~@15]/7", // C5 F Cm F5 C5 F
  V: "[g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~", // D#
  W: "[~@2 c6@15 ~ [a#5,d#6]@3 ~ g5 ~ [g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@3 ~, ~@2 g5@19 ~@11]/2", X: "[d#5,g5,c6]@15 ~",
  Y: "~@2 [g5,a#5,d#6]@3 ~ g5 ~ [g5,a#5,d#6]@3 ~ [g5,a#5,d#6]@2 ~@2", // D#
  Z: "[[c5,g5,c6]@28 ~@4 [g5,a#5]@21 ~ g5 ~ [g5,a#5,d#6]@3 ~ [a#5,d#6] ~@3, f#5 ~@27 [f5,a5]@4 ~@28 g5@2 ~@2, ~@30 c5@21 ~@13]/4", // C5 Gm D# D#5 F
  AA: "[[d#5,g5]@9 [f5,a5]@2 ~ g5@2 [f5,a5]@2, ~@11 c5@2 ~@3, ~@24 d#5@3 ~@5]/2", // D# F
  AB: "[[c5,g5]@18 [c5,f5,a5]@4 ~@2 [d#5,g5]@7 ~ [g5,c6]@32, d#5@16 ~@6 c5@41 ~]/4", // C5 F D# C5
  AC: "[~@2 [g5,a#5,d#6]@6 [a#5,d#6]@4 ~@2 [a#5,d#6]@5 ~ [g5,a#5,d#6]@6 [g5,a#5,d#6]@5 ~, ~@8 g5@11 ~@13]/2", // D# D#5 D#
  AD: "[[d#5,g5,c6]@9 ~ [f5,a5]@2 [c5,d#5,g5]@2 [c5,f5,a5]@2, ~@9 c5@2 ~@5]/2", // Cm F Cm F
  AE: "[[c5,d#5,g5]@18 [f5,a5]@4 ~@2 [d#5,g5]@4 c5 ~@3 c6@17 ~ c5@2 [f5,a5]@2 ~@2 g5@4 a5@2 g5@2, ~@18 c5@3 ~ c5@5 ~ [f5,a5]@4 g5@20 ~@2 c5@10, ~@30 c5@19 ~ c6 ~@5 c6@2 ~@6]/4", // Cm F D# F
  AF: "[~@2 [c5,g5,c6]@3 ~ [c5,g5,c6] ~ [c5,g5,c6]@3 ~ [c5,g5] ~ g5@4 c5 ~ [c5,g5]@4 [c5,g5] ~ [c5,g5]@5 ~, ~@12 c6@11 ~ c6@7 ~, ~@14 c5@3 ~@15]/2", // C5
  AG: "[c5,g5,c6] ~ [g5,c6]@4 c5@2 [g5,c6] ~ [g5,c6]@4 c5@2, ~@2 c5@3 ~@5 c5@2 ~@4", AH: "[g5,c6] ~ [c5,g5,c6]@9 ~@5",
})).s("gm_rock_organ").gain(0.64)

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

// drums · clap
const clap = s("cp").struct("<~@88 [~ x ~ x]!8 ~@44 [~ x ~ x]!32 ~@2>").gain(0.78)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@7 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@2 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@6 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@3 B A@3 B C D
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "~@2 x!2 ~@2 x!2", D: "~ x ~@6",
})).gain(0.78)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@2
>`.pickRestart({
// … 7 more lines

More by Billy Idol