Strudelify

4 Ever 2 Gether

ABC

KeyA♭ majorTempo90 bpm
0:00/0:00
// 4 Ever 2 Gether — ABC
// 90 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 20, 4/4 at bar 21, 3/4 at bar 43, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 C D E F G B C D H I J K L M N O P ~@3 Q@8 R@4 S@7 ~@11 T U V@2 W X ~ Y@5 ~ Z AA@2 K P AB@5 AC ~
>`.pickRestart({
  A: "~@3 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~", // Ab Db Ab Db Ab
  B: "[f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, db4 ~@7", // Fm Ab Db Ab Db Ab
  C: "[db4,f4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~", // Db Ab Db Ab Db Ab
  D: "[db4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, f4 ~@15", // Db5 Ab Db Ab Db Ab
  E: "[db4,f4,ab4]@2 ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, ~@8 c4 ~@7", // Db Ab Db Ab5 Db Ab
  F: "[db4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, f4 ~@7 c4 ~@7", // Db5 Ab Db Ab5 Db Ab
  G: "[db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~", // Db Ab Db Ab Db Ab
  H: "[db4,f4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [ab4,db5,f5]@2 ~ [ab4,c5,eb5] ~, ~@8 c4 ~@7", // Db Ab Db Ab5 Db Ab
  I: "~ f5 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [ab4,db5,f5]@2 ~ [ab4,c5,eb5] ~, [ab4,db5] ~@7", // Ab Db Ab Db Ab Db5
  J: "~ f5 ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, [ab4,db5]@3 ~@5 ab4@2 ~@6", // Ab Db Cm Db Ab Db5
  K: "[db4,f4,ab4] ~@2 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~", // Db Ab Eb Db Eb
  L: "[ab3,c4,eb4]@2 ~@2 [ab4,c5,eb5] ~ [ab4,db5,f5] ~ [c5,eb5]@2 ~ ab4 ~ ab4 [c5,eb5] ~, ~@8 ab4 ~@3 [db5,f5]@2 ~@2", // Ab Db Cm Db
  M: "[db5,f5] ~@2 [ab4,c5,eb5]@2 ~ [ab4,db5,f5] ~ [c5,eb5]@2 ~ ab4 [db5,f5] ab4 [c5,eb5] ~, ab4@2 ~@6 ab4 ~@7", // Db Ab Db Cm Db Cm
  N: "[ab4,db5]@2 ~ [ab4,c5,eb5]@2 ~ [ab4,db5,f5] ~ [c5,eb5]@2 ~ ab4 db5 ab4 [c5,eb5] ~, f5 ~@7 ab4 ~@3 f5@2 ~@2", // Db5 Ab Db Cm
  O: "[ab4,db5,f5]@2 ~ [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~", // Db Ab Eb Db Eb
  P: "[ab3,c4,eb4] ~@7", // Ab
  Q: "[[c4,eb4,ab4] ~ [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,ab4]@2 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4]@2 ~ [c4,eb4,ab4], ~@12 f4 ~@23 c4 ~@7 f4 ~@7 c4 ~@23 db4@2 ~@30 f4 ~@19]/8", // Ab Db Ab Db Ab Db5 Ab Db …
  R: "[~@2 [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [ab4,db5,f5]@2 ~ [ab4,c5,eb5] ~@2 f5 ~ [c4,eb4,ab4]@3 [db4,f4,ab4] ~ [eb4,ab4]@2 ~ [ab4,db5,f5]@2 ~ [ab4,c5,eb5] ~@2 f5 ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~@2, ~@4 c4 ~@7 [ab4,db5]@2 ~@6 c4 ~@7 [ab4,db5]@2 ~@6 ab4@2 ~@26]/4", // Db Ab5 Db Ab Db Ab5 Db Ab …
  S: "[[c4,eb4,ab4]@2 [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~ [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~ [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~ [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~@2, ~@2 ab4 ~@7 ab4 ~@7 ab4 ~@37]/7", // Ab Db Cm Db Ab Db Ab Db …
  T: "~@11 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~", // Ab Eb
  U: "[ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~ [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~", // Db Eb Ab Db
  V: "[c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~, ab4 ~@7", // Cm Db Ab Db Ab Db
  W: "[c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~, ab4 ~@7", // Cm Db Ab Db Ab Eb
  X: "[ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~@6", // Db Eb Ab
  Y: "[~@7 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~@10, ~@6 ab4 ~@7 ab4 ~@7 ab4 ~@17]/5", // Ab Db Cm Db Ab Db Ab Db …
  Z: "~@3 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, ~@4 ab4 ~@3", // Ab Db Cm Db Ab
  AA: "[db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~, ~@4 ab4 ~@3", // Db Ab Db Cm Db Ab
  AB: "[~@15 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [db4,f4,ab4] ~ [c4,eb4] ~@2 [db4,f4,ab4]@2 ~ [c4,eb4,ab4] ~ [db4,f4,ab4] ~@3, ~@10 ab4 ~@7 ab4 ~@7 ab4 ~@7 ab4 ~@5]/5", // Ab Db Cm Db Ab Db Ab Db …
  AC: "[c4,eb4,ab4]", // Ab
})).s("gm_piano").gain(0.29).pan(0.7)

// bass · fretless bass
const bass = note(`<
  ~@2 A@2 B C D E F G H I J K L M@2 N O@2 P Q R@2 S T U V W X@5 Y@2 Z@5 ~@5 AA AB@2 AC AD AE AF AG AH@2 AI AJ AK AL AM
  AN AO@2 AP AQ AR AS N AT AU Y@4 AV ~
>`.pickRestart({
  A: "~ eb2 f2@2 ab1!2 ~ ab1 ab1@2 ~@6", B: "~ eb2 f2@2 ab1!5 ~@7", C: "~ eb2 f2@2 ab1!4 ab1@2 ~@6",
  D: "~ eb2 f2@2 ab1!5 ~ ab2!2 ~ ab2!2 ~", E: "~ eb2 f2 ~ ab1!5 ~ ab2!2 ~ ab2!2 ~",
  F: "~ eb2 f2@2 ab1!5 ~ ab2!2 ~ ab2 ab2@2", G: "~ eb2 f2 ~ ab1!5 ~ ab2!2 ~ ab2 ab2@2", H: "~@3 ab1@3 bb1 ~ c2@3 ~@5",
  I: "~@3 ab1@3 bb1 ~ c2@2 ~@6", J: "~@3 ab1@3 bb1 ~ c2@2 ~ db2@3 eb2 ~", K: "f2@2 ~ ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~",
  L: "ab1 ~ ab2 bb2 c3 c2 db2 eb2", M: "f2 g2 ab2 bb2 c3 c2 db2 eb2", N: "f2@2 g2 ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~",
  O: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!2 ~@3", P: "ab2!2 ~ ab2!3 ~ ab2!2 ab2@2 ab2!2 ~@3",
  Q: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2 ab2@2 ~@2", R: "ab1!2 ~ ab1 ab1@2 ~@7 eb2 f2@2", S: "ab1!5 ~@8 eb2 f2@2",
  T: "ab1!4 ab1@2 ~@7 eb2 f2@2", U: "ab1!5 ~ ab2!2 ~ ab2!2 ~@2 eb2 f2 ~", V: "ab1!5 ~ ab2!2 ~ ab2!2 ~@2 eb2 f2@2",
  W: "ab1!5 ~ ab2!2 ~ ab2 ab2@2 ~ eb2 f2 ~",
  X: "[ab1!5 ~ ab2!2 ~ ab2 ab2@3 ~@2 ab1@3 bb1 ~ c2@3 ~@8 ab1@3 bb1 ~ c2@2 ~@9 ab1@3 bb1 ~ c2@2 ~ db2@3 eb2 ~ f2@2 ~ ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~ ab1@2 ~@2]/5",
  Y: "ab2 bb2 c3 c2 db2 eb2 f2 g2",
  Z: "[ab2@2 bb2@2 c3@2 c2@2 db2@2 eb2@2 f2@2 g2 ab2@3 g2@2 f2@2 c2 db2@3 eb2 ~ ab1@2 ~ ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~ ab1 ~@2 ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~ ab1 ~@2 ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~ ab1@2 ~@2]/5",
  AA: "~@11 ab1@3 bb1@2", AB: "c2@2 ~ db2@3 eb2@2 f2@3 ab1@3 bb1@2", AC: "c2@2 ~ db2@3 eb2@2 f2@2 ~ ab1@3 bb1 ~",
  AD: "c2@2 ~ db2@3 eb2@2 f2@2 ~ ab1@3 bb1@2", AE: "c2@2 ~ db2@3 eb2 ~ f2@2 ~ ab1@3 bb1 ~",
  AF: "c2@2 ~ db2@3 eb2 ~ f2@2 ~ ab2@3 g2@2", AG: "f2@2 ~ db2@3 eb2 ~ ab1@2 ~ ab2@3 bb2@2",
  AH: "c3 c2 db2 eb2 f2 g2 ab2 bb2", AI: "c3@2 c2@2 db2@2 eb2@2 f2@2 g2 ab2@3 g2@2",
  AJ: "f2@2 ~ db2@3 eb2 ~ ab2!2 ~ ab2!2 ab2@2 ab2", AK: "ab2!2 ~ ab2!2 ~@3 ab2!2 ~ ab2!2 ab2@2 ab2",
  AL: "ab2!2 ~ ab2!2 ~@2 ab2@3 bb2@2 c3@2 c2@2", AM: "db2@2 eb2@2 f2@2 g2 ab2@3 bb2@2 c3@2 c2@2",
  AN: "db2@2 eb2@2 f2!2 g2!2 ab2@2 bb2@2 c3@2 c2@2",
  AO: "[db2@2 eb2@2 f2@2 g2 ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~ ab2!2 ~ ab2!2 ab2@2 ab2!3 ~ ab2]/2",
  AP: "ab2@2 ~@2 ab2!2 ~ ab2!2 ab2@2 ab2!3 ~ ab2", AQ: "ab2@3 ab2@3 bb2@2 c3@2 c2@2 db2@2 eb2@2",
  AR: "f2@2 g2 ab2@3 bb2@2 c3@2 c2@2 db2@2 eb2@2", AS: "f2!2 g2!2 ab2@2 bb2@2 c3@2 c2@2 db2@2 eb2@2",
  AT: "ab2!2 ~ ab2!2 ab2@2 ab2!3 ~ ab2 ab2@2 ~@2", AU: "ab2!2 ~ ab2!2 ab2@2 ab2!3 ~ ab2 ab2@3 ~", AV: "ab2",
})).s("gm_fretless_bass").gain(0.44)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  A B C D@3 E D@3 F G H ~ I D J K L@3 M N@3 O N@4 P@2 ~@2 N Q N ~ R@2 ~@8 S T U ~@3 V W V ~ X@2 Y Z Y AA AB AC@2 AD K
  L@2 AE AF AE AF ~@2
>`.pickRestart({
  A: "~@3 [ab3,ab4] ~ [ab3,ab4] ~ [ab3,ab4]", B: "~ [ab3,ab4] ~ [ab3,ab4] ~ [ab3,ab4] ~ [ab3,ab4]",
  C: "~ [ab3,ab4] ~@2 [ab3,ab4] ~@3", D: "[ab3,ab4] ~@3 [ab3,ab4] ~@3",
  E: "~ ab4 [ab3,ab4]@2 ~@4 [ab3,ab4]@2 ~@6, [ab3,ab4] ~@7", F: "[ab3,ab4]@2 ~@11 [ab3,ab4]@2 ~",
  G: "~ [ab3,ab4]@2 ~@10 [ab3,ab4]@2 ~", H: "~ [ab3,ab4]@2 ~@13", I: "~@4 [ab3,ab4] ~@3",
  J: "[ab3,ab4]@3 ~@5 [ab3,ab4]@2 ~@6", K: "[ab3,ab4] ~@7", L: "~@11 ab4 [ab3,ab4]@2 ~@2, ~@5 [ab3,ab4] ~@2",
  M: "~@10 ab4!3 ~@3, ~@10 ab3@3 ~@3", N: "~@2 [ab3,ab4] ~@3 [ab3,ab4] ~",
  O: "~@4 [ab3,ab4]@2 ~@7 ab4 [ab3,ab4]@2, ~@6 [ab3,ab4] ~", P: "~@9 [ab3,ab4]@2 ~@2 [ab3,ab4]@2 ~",
  Q: "~@4 [ab3,ab4]@2 ~@6 [ab3,ab4]@3 ~", R: "~@7 ab4 ~@8, ~@3 [ab3,ab4] ~@4", S: "~@7 [ab3,ab4]",
  T: "~ [ab3,ab4] ~ [ab3,ab4] ~@3 [ab3,ab4]", U: "~@3 [ab3,ab4] ~@4",
  V: "~@5 ab4 ~@2 [ab3,ab4]@2 ~@6, ~@2 [ab3,ab4] ~@5", W: "~@5 ab4 ~@2 [ab3,ab4]@3 ~@5, ~@2 [ab3,ab4] ~@5",
  X: "~@3 ab4 [ab3,ab4]@2 ~@10, ~ [ab3,ab4] ~@6", Y: "~ ab4 ~@2 [ab3,ab4]@2 ~@10, [ab3,ab4] ~@7",
  Z: "~ ab4 ~@2 [ab3,ab4]@3 ~@9, [ab3,ab4] ~@7", AA: "~@15 ab4, ~@7 [ab3,ab4]",
  AB: "[ab3,ab4]@2 ~@13 ab4, ~@7 [ab3,ab4]", AC: "[ab3,ab4]@2 ~@11 ab4 ~@2, ~@6 [ab3,ab4] ~",
  AD: "[ab3,ab4]@3 ~@10 ab4 ~@2, ~@6 [ab3,ab4] ~", AE: "~@9 ab4 ~@2 [ab3,ab4]@2 ~@2, ~@4 [ab3,ab4] ~@3",
  AF: "~@9 ab4 ~@2 [ab3,ab4]@3 ~, ~@4 [ab3,ab4] ~@3", // Ab
})).s("gm_electric_guitar_muted").gain(0.31).pan(0.4)

// chords · lead 3 calliope
const lead_3_calliope = note("<~ A@2 ~@15 B C@3 ~@4 D E F ~@28 G H I ~@3 J K L ~@3 B C ~@6>".pickRestart({
  A: "[~@7 [ab3,ab4] [c4,c5] [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] [c4,c5]@5 ~@13]/2", // Ab C Eb C
  B: "~@2 [eb4,gb4,c5] ~@3 [eb4,gb4,ab4,c5] ~@3 [ab3,ab4]!3 ~@3, ~ ab4 ~@6", // Cdim Ab7 Ab
  C: "~@2 [eb4,gb4,ab4,c5] ~@3 [eb4,gb4,ab4,c5] ~@3 [ab3,ab4]!3 ~@3", // Ab7 Ab
  D: "~@7 [ab4,ab5]@3 [f4,f5] ~ [ab4,ab5]@2 [f4,f5] ~", E: "~@8 [eb4,eb5]!2 [c4,c5] [f4,f5] [eb4,eb5]@2 [c4,c5]@2",
  F: "~@3 [c4,eb4,ab4] ~@4", G: "~@10 [eb4,gb4,c5] ~@3 [eb4,gb4,ab4,c5] ~, ~@5 ab4 ~@2",
  H: "~@2 [ab3,ab4]!3 ~@5 [eb4,gb4,ab4,c5] ~@3 [eb4,gb4,ab4,c5] ~", I: "~@2 [ab3,ab4]!3 ~@11",
  J: "~@6 [eb4,gb4,c5] ~@3 [eb4,gb4,ab4,c5] ~@3 [ab3,ab4]!2, ~@3 ab4 ~@4", // Cdim Ab7 Ab
  K: "[ab3,ab4] ~@5 [eb4,gb4,ab4,c5] ~@3 [eb4,gb4,ab4,c5] ~@3 [ab3,ab4]!2", L: "[ab3,ab4] ~@15",
})).s("gm_lead_3_calliope").gain(0.17).pan(0.4)

// other · distortion guitar
const distortion_guitar = note(`<
  A B@3 C B C B@2 C D E F G H I J K L ~@3 M@8 N@4 O@7 ~@11 P Q R@2 S T ~ U@5 ~ V I J K L W@5 X ~
>`.pickRestart({
  A: "~@3 ab2@3 db3 ~ ab2@2 ~ db3@3 ab2 ~", B: "db3 ~@2 ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~",
  C: "db3@2 ~ ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~", D: "db3@2 ~ ab2@3 bb2 ~ c3@2 ~@6", E: "~@3 ab2@3 bb2 ~ c3@2 ~@6",
  F: "~@3 ab2@3 bb2 ~ c3@2 ~ db3@3 eb3 ~", G: "f3@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~",
  H: "ab2@2 ~@2 ab2@2 bb2@2 c3@2 ~ db3@3 ab2 ~", I: "db3@2 ~ ab2@3 bb2 ~ c3@2 ~ db3@3 ab2 ~",
  J: "db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~", K: "db3@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~", L: "ab2 ~@7",
  M: "[ab2@2 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3@2 ~ ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3@2 ~ ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 db3 ~ ab2 ~@2 db3@3 ab2 ~ db3@2 ~ ab2]/8",
  N: "[~@2 bb2 ~ c3@2 ~@9 ab2@3 bb2 ~ c3@2 ~@9 ab2@3 bb2 ~ c3@2 ~ db3@3 eb3 ~ f3@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2@2 ~@2]/4",
  O: "[ab2@2 bb2@2 c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~ ab2@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~ ab2@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~ ab2@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~ ab2@2 ~@2]/7",
  P: "~@11 ab3@3 g3 ~", Q: "f3@2 ~ db3@3 eb3 ~ ab2@2 ~ ab2@3 bb2@2", R: "c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~",
  S: "c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab3@3 g3 ~", T: "f3@2 ~ db3@3 eb3 ~ ab2@2 ~@6",
  U: "[~@7 ab2@3 bb2@2 c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~ ab2@2 ~@10]/5",
  V: "~@3 ab2@3 bb2@2 c3@2 ~ db3@3 ab2 ~",
  W: "[~@15 ab2@3 bb2@2 c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab2@3 bb2@2 c3@2 ~ db3@3 ab2 ~ db3@3 ~]/5",
  X: "ab2",
})).s("gm_distortion_guitar").gain(0.36).pan(0.3)

// other · lead 4 chiff
const lead_4_chiff = note("<~@14 A B C D E ~@15 F@2 G@2 ~@15 H@5 ~ I@4 ~@2 A B C J ~@2 F@2 G@2 ~@2>".pickRestart({
  A: "~ eb5@3", B: "f5 eb5 c5 ~ eb5@12", C: "f5 eb5 c5 ~ eb5@6 f5@6", D: "ab4@13 ~@2 c4",
  E: "~ c4 bb3 ab3 bb3 c4 bb3 ab3@2 ~ ab3!2 ab3@2 ~@2", F: "eb5@12 f5 eb5 c5 ~", G: "[eb5@6 f5@6 ab4@13 ~@7]/2",
  H: "[~@12 eb5@12 f5 eb5 c5 ~ eb5@12 f5 eb5 c5 ~ eb5@6 f5@6 ab4@13 ~@11]/5",
  I: "[~@8 eb5@12 f5 eb5 c5 ~ eb5@12 f5 eb5 c5 ~ eb5@6 f5@6 ab4@12]/4", J: "ab4@13 ~@3",
})).s("gm_lead_4_chiff").gain(0.22).pan(0.7)

// other · electric guitar muted
const electric_guitar_muted_2 = note(`<
  ~@2 A B C@2 D@4 E F G H I J K L M@4 N O P@2 Q@3 R@5 S@7 ~@5 T U@5 V W X@2 Y Z AA AB@5 AC AD J@2 AE M AF@5 AG ~
>`.pickRestart({
  A: "~ eb3 f3 ~ ab2!2 ~ ab2 ab2@2 ~@6", B: "~ eb3 f3 ~ ab2!2 ~ ab2!2 ~@7", C: "~ eb3 f3 ~ ab2!5 ~@7",
  D: "~ eb3 f3 ~ ab2!5 ~ ab3!2 ~ ab3!2 ~", E: "~@3 ab2@3 bb2 ~ c3@2 ~@6", F: "~@3 ab2@3 bb2 ~ c3 ~@7",
  G: "~@3 ab2@3 bb2 ~ c3 ~@2 db3@3 eb3 ~", H: "f3 ~@2 ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~",
  I: "ab2 ~@3 ab2@2 bb2 ~ c3 ~@2 db3@3 ab2 ~", J: "db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~",
  K: "db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~", L: "db3@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~",
  M: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!2 ~@3", N: "ab2!2 ~ ab2 ab2@2 ~@7 eb3 f3 ~", O: "ab2!2 ~ ab2!2 ~@8 eb3 f3 ~",
  P: "ab2!5 ~@8 eb3 f3 ~", Q: "ab2!5 ~ ab3!2 ~ ab3!2 ~@2 eb3 f3 ~",
  R: "[ab2!5 ~ ab3!2 ~ ab3!2 ~@4 ab2@3 bb2 ~ c3@2 ~@9 ab2@3 bb2 ~ c3 ~@10 ab2@3 bb2 ~ c3 ~@2 db3@3 eb3 ~ f3 ~@2 ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2 ~@3]/5",
  S: "[ab2@2 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2@2 ~@2]/7",
  T: "~@11 ab2@3 bb2 ~", U: "c3 ~@2 db3@3 eb3 ~ f3 ~@2 ab2@3 bb2 ~", V: "c3 ~@2 db3@3 eb3 ~ f3 ~@2 ab3@3 g3 ~",
  W: "f3 ~@2 db3@3 eb3 ~ ab2 ~@2 ab2@3 bb2 ~", X: "c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~",
  Y: "c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab3@3 g3 ~", Z: "f3 ~@2 db3@3 eb3 ~ ab2!2 ~ ab2!3 ~ ab2",
  AA: "ab2!2 ~ ab2!2 ~@3 ab2!2 ~ ab2!3 ~ ab2",
  AB: "[ab2!2 ~ ab2!2 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~ ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2]/5",
  AC: "ab2 ~@3 ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2", AD: "ab2 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~",
  AE: "db3 ~@2 ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~",
  AF: "[ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!2 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~ db3@3 ~]/5",
  AG: "ab2@15 ~",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.8)

// other · electric guitar muted
const electric_guitar_muted_3 = note(`<
  ~@49
  [~@11 c3@3 db3 ~]
  [eb3@2 ~ f3@3 g3 ~ ab3@2 ~ c3@3 db3 ~]!2
  [eb3@2 ~ f3@3 g3 ~ ab3@2 ~@6]
  ~@24
>`).s("gm_electric_guitar_muted").gain(0.35)

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

// drums · clap
const clap = s("cp").struct(`<
  ~ A B@16 ~@4 C@18 D ~@5 E F G F G F G H B@3 A ~ E C@3 ~@2 I B@3 ~@2 C@4 ~@2
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x ~ x", D: "~ x ~@2", E: "~@3 x", F: "x!4", G: "x ~ x ~ x!3 ~", H: "x!3 ~", I: "~ x",
})).gain(0.38)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@46 A B C B C B C D ~@23>".pickRestart({
  A: "~@7 x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@3 x", D: "~ x ~ x ~ x ~@2",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@11 A B@3 C@4 D@3 E D@7 F D@3 F D@2 G ~ H I J ~ K L ~ J ~ J M N B@3 O P Q D@3 ~ R A B@3 C@2 D@3 F ~@2
// … 82 more lines

More by ABC