Strudelify
4 Ever 2 Gether cover art

1998 · The Lexicon Of Love

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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano
const piano = note(`<
  A B C@2 B@2 D B C@2 E F G H I J@2 K L ~@3 M@8 N@4 O@7 ~@11 P Q R@2 S T ~ U@5 ~ A V@2 H L W@5 X ~
>`.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,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
  E: "[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
  F: "~ 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
  G: "~ 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
  H: "[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
  I: "[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
  J: "[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
  K: "[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
  L: "[ab3,c4,eb4] ~@7", // Ab
  M: "[[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] ~@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] ~ [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] ~ [c4,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] ~ [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], ~@12 f4 ~@7 ab4@2 ~@14 ab4@2 ~@14 c4 ~@15 c4 ~@7 f4 ~@39 ab4@2 ~@10]/8", // Ab Db Ab Db Ab Db5 Ab Db …
  N: "[~@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]@2 ~ [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 …
  O: "[[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 ~ [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 …
  P: "~@11 [c4,eb4,ab4]@3 [bb3,eb4,g4] ~", // Ab Eb
  Q: "[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
  R: "[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
  S: "[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
  T: "[ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4] ~ [ab3,c4,eb4]@2 ~@6", // Db Eb Ab
  U: "[~@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 …
  V: "[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
  W: "[~@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 …
  X: "[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@3 E F G H I J K@2 L M@4 N@2 O P Q R Q S@5 T@2 U@5 ~@5 V W@2 X Y X Z AA AB@2 AC AD AE AF AG AH AI@2 AJ AK
  AL AM L M AN T@4 AO ~
>`.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 ab2@2", F: "~@3 ab1@3 bb1 ~ c2@3 ~@5",
  G: "~@3 ab1@3 bb1 ~ c2@2 ~@6", H: "~@3 ab1@3 bb1 ~ c2@2 ~ db2@3 eb2 ~", I: "f2@2 ~ ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~",
  J: "ab1 ~ ab2 bb2 c3 c2 db2 eb2", K: "f2 g2 ab2 bb2 c3 c2 db2 eb2", L: "f2@2 g2 ab2@3 g2@2 f2@2 ~ db2@3 eb2 ~",
  M: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!2 ~@3", N: "ab1!2 ~ ab1 ab1@2 ~@7 eb2 f2@2", O: "ab1!5 ~@8 eb2 f2@2",
  P: "ab1!4 ab1@2 ~@7 eb2 f2@2", Q: "ab1!5 ~ ab2!2 ~ ab2!2 ~@2 eb2 f2 ~", R: "ab1!5 ~ ab2!2 ~ ab2!2 ~@2 eb2 f2@2",
  S: "[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",
  T: "ab2 bb2 c3 c2 db2 eb2 f2 g2",
  U: "[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",
  V: "~@11 ab1@3 bb1@2", W: "c2@2 ~ db2@3 eb2@2 f2@3 ab1@3 bb1@2", X: "c2@2 ~ db2@3 eb2@2 f2@2 ~ ab1@3 bb1 ~",
  Y: "c2@2 ~ db2@3 eb2@2 f2@2 ~ ab1@3 bb1@2", Z: "c2@2 ~ db2@3 eb2 ~ f2@2 ~ ab2@3 g2@2",
  AA: "f2@2 ~ db2@3 eb2 ~ ab1@2 ~ ab2@3 bb2@2", AB: "c3 c2 db2 eb2 f2 g2 ab2 bb2",
  AC: "c3@2 c2@2 db2@2 eb2@2 f2@2 g2 ab2@3 g2@2", AD: "f2@2 ~ db2@3 eb2 ~ ab2!2 ~ ab2!2 ab2@2 ab2",
  AE: "ab2!2 ~ ab2!2 ~@3 ab2!2 ~ ab2!2 ab2@2 ab2", AF: "ab2!2 ~ ab2!2 ~@2 ab2@3 bb2@2 c3@2 c2@2",
  AG: "db2@2 eb2@2 f2@2 g2 ab2@3 bb2@2 c3@2 c2@2", AH: "db2@2 eb2@2 f2!2 g2!2 ab2@2 bb2@2 c3@2 c2@2",
  AI: "[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",
  AJ: "ab2@2 ~@2 ab2!2 ~ ab2!2 ab2@2 ab2!3 ~ ab2", AK: "ab2@3 ab2@3 bb2@2 c3@2 c2@2 db2@2 eb2@2",
  AL: "f2@2 g2 ab2@3 bb2@2 c3@2 c2@2 db2@2 eb2@2", AM: "f2!2 g2!2 ab2@2 bb2@2 c3@2 c2@2 db2@2 eb2@2",
  AN: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2 ab2@2 ~@2", AO: "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@2 J K@3 L M@3 N M@4 O@2 ~@2 M@3 ~ P@2 ~@8 Q R S ~@3 T U T ~ V@2 W X W Y Z AA@2 AB J K@2 AC
  AD AC AD ~@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] ~@7",
  K: "~@11 ab4 [ab3,ab4]@2 ~@2, ~@5 [ab3,ab4] ~@2", L: "~@10 ab4!3 ~@3, ~@10 ab3@3 ~@3",
  M: "~@2 [ab3,ab4] ~@3 [ab3,ab4] ~", N: "~@4 [ab3,ab4]@2 ~@7 ab4 [ab3,ab4]@2, ~@6 [ab3,ab4] ~",
  O: "~@9 [ab3,ab4]@2 ~@2 [ab3,ab4]@2 ~", P: "~@7 ab4 ~@8, ~@3 [ab3,ab4] ~@4", Q: "~@7 [ab3,ab4]",
  R: "~ [ab3,ab4] ~ [ab3,ab4] ~@3 [ab3,ab4]", S: "~@3 [ab3,ab4] ~@4",
  T: "~@5 ab4 ~@2 [ab3,ab4]@2 ~@6, ~@2 [ab3,ab4] ~@5", U: "~@5 ab4 ~@2 [ab3,ab4]@3 ~@5, ~@2 [ab3,ab4] ~@5",
  V: "~@3 ab4 [ab3,ab4]@2 ~@10, ~ [ab3,ab4] ~@6", W: "~ ab4 ~@2 [ab3,ab4]@2 ~@10, [ab3,ab4] ~@7",
  X: "~ ab4 ~@2 [ab3,ab4]@3 ~@9, [ab3,ab4] ~@7", Y: "~@15 ab4, ~@7 [ab3,ab4]", Z: "[ab3,ab4]@2 ~@13 ab4, ~@7 [ab3,ab4]",
  AA: "[ab3,ab4]@2 ~@11 ab4 ~@2, ~@6 [ab3,ab4] ~", AB: "[ab3,ab4]@3 ~@10 ab4 ~@2, ~@6 [ab3,ab4] ~",
  AC: "~@9 ab4 ~@2 [ab3,ab4]@2 ~@2, ~@4 [ab3,ab4] ~@3", AD: "~@9 ab4 ~@2 [ab3,ab4]@3 ~, ~@4 [ab3,ab4] ~@3",
})).s("gm_electric_guitar_muted").gain(0.31).pan(0.4)

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

// other · distortion guitar
const distortion_guitar = note(`<
  A B@9 C D E F G H I J K ~@3 L@8 M@4 N@7 ~@11 O P Q@2 R S ~ T@5 ~ U H I J K V@5 W ~
>`.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 bb2 ~ c3@2 ~@6", D: "~@3 ab2@3 bb2 ~ c3@2 ~@6", E: "~@3 ab2@3 bb2 ~ c3@2 ~ db3@3 eb3 ~",
  F: "f3@2 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~", G: "ab2@2 ~@2 ab2@2 bb2@2 c3@2 ~ db3@3 ab2 ~",
  H: "db3@2 ~ ab2@3 bb2 ~ c3@2 ~ db3@3 ab2 ~", I: "db3@2 ~ ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~",
  J: "db3@2 ~ ab3@3 g3 ~ f3@2 ~ db3@3 eb3 ~", K: "ab2 ~@7",
  L: "[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",
  M: "[~@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",
  N: "[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",
  O: "~@11 ab3@3 g3 ~", P: "f3@2 ~ db3@3 eb3 ~ ab2@2 ~ ab2@3 bb2@2", Q: "c3@2 ~ db3@3 ab2 ~ db3@2 ~ ab2@3 bb2 ~",
  R: "c3 ~@2 db3@3 ab2 ~ db3@2 ~ ab3@3 g3 ~", S: "f3@2 ~ db3@3 eb3 ~ ab2@2 ~@6",
  T: "[~@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",
  U: "~@3 ab2@3 bb2@2 c3@2 ~ db3@3 ab2 ~",
  V: "[~@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",
  W: "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@2 K L@4 M N O@2 P@3 Q@5 R@7 ~@5 S T@5 U V W@2 X Y Z AA@5 AB AC J@2 AD L AE@5 AF ~
>`.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 ~ ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~", L: "ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!2 ~@3",
  M: "ab2!2 ~ ab2 ab2@2 ~@7 eb3 f3 ~", N: "ab2!2 ~ ab2!2 ~@8 eb3 f3 ~", O: "ab2!5 ~@8 eb3 f3 ~",
  P: "ab2!5 ~ ab3!2 ~ ab3!2 ~@2 eb3 f3 ~",
  Q: "[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",
  R: "[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",
  S: "~@11 ab2@3 bb2 ~", T: "c3 ~@2 db3@3 eb3 ~ f3 ~@2 ab2@3 bb2 ~", U: "c3 ~@2 db3@3 eb3 ~ f3 ~@2 ab3@3 g3 ~",
  V: "f3 ~@2 db3@3 eb3 ~ ab2 ~@2 ab2@3 bb2 ~", W: "c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab2@3 bb2 ~",
  X: "c3 ~@2 db3@3 ab2 ~ db3 ~@2 ab3@3 g3 ~", Y: "f3 ~@2 db3@3 eb3 ~ ab2!2 ~ ab2!3 ~ ab2",
  Z: "ab2!2 ~ ab2!2 ~@3 ab2!2 ~ ab2!3 ~ ab2",
  AA: "[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",
  AB: "ab2 ~@3 ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2", AC: "ab2 ~@2 ab2@3 bb2 ~ c3 ~@2 db3@3 ab2 ~",
  AD: "db3 ~@2 ab3@3 g3 ~ f3 ~@2 db3@3 eb3 ~",
  AE: "[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",
  AF: "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
>`.pickRestart({
  A: "~ x ~@2 x ~@3", B: "x!2", C: "~@7 x", D: "~ x ~ x", E: "~@2 x ~@3 x!2", F: "~@2 x ~@4 x", G: "~@4 x ~@4 x ~@6",
  H: "~ x ~@14", I: "~ x ~@3 x ~@10", J: "~ x ~@3 x ~@3 x ~@6", K: "~ x ~@3 x ~@3 x!2 ~@5", L: "~@7 x ~@3 x ~@4",
  M: "x ~@2 x ~@3 x ~@8", N: "x ~@2 x ~@6 x ~@5", O: "x", P: "~@3 x ~@4", Q: "~@3 x ~@2 x ~", R: "~ x ~@6",
})).gain(0.55)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@11 C B@3 ~@4 D B@2 E B@4 D B@3 D B@2 F D B F ~@12 G B@3 H ~ I B@3 J ~ A B@3 ~@2 D B@2 E ~@2
>`.pickRestart({
  A: "~@3 x!5", B: "x!8", C: "x!2 ~ x!5", D: "~ x!7", E: "x!7 ~", F: "x!6 ~@2", G: "~@7 x", H: "x!4 ~@4", I: "~@5 x!3",
  J: "x!2 ~@6",
// … 70 more lines

More by ABC