Strudelify
How Long cover art

Five-A-Side

How Long

Ace

KeyC minorTempo124 bpm
0:00/0:00
// How Long — Ace
// 124 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 4 "ElecGtr" named as a guitar, played on electric guitar clean (its electric bass pick patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · epiano2 · "ElecPiano"
const epiano2 = note(`<
  ~@6 A@8 B C D@2 E F G H I@8 J@8 B K L M E N L O P@2 Q@2 R@2 S@2 T@2 U@2 V@2 W@2 X@8 Y@8 Z K AA@2 AB AC AD AE AF AG
  AA@2 AH AI AJ@2 AK AL AM@2 AN AO AP@2 P@2 Q@2 R@2 S@2 T@2 U@2 V@2 W@2 AQ@3
>`.pickRestart({
  A: "[bb2@6 bb2@2 ~@2 eb4@4 ~@2 bb2@6 bb2@2 ~@2 bb4@4 bb2 ~ bb2@6 bb2@2 ~@2 [ab3,bb3,c4,eb4]@4 bb2 ~ bb2@6 bb2 ~ bb2@6 bb2 ~ bb2@6 bb2@2 ~@2 [ab3,bb3,c4,eb4]@4 bb2 ~ bb2@6 bb2@2 bb2@6 bb2@2 bb2@6 bb2@2 ~@2 [ab3,bb3,c4,eb4]@4 bb2 ~ bb2@6 [b2,a3,d4,gb4]@10, [ab3,bb3,c4]@15 ~@15 [ab3,bb3,c4,eb4]@12 ~@20 [ab3,bb3,c4,eb4]@12 ~@4 f4@8 f4@11 ~@31, eb4@10 ~@4 [bb3,d4,f4]@17 ~@15 [bb3,d4,f4]@8 [bb3,d4,f4]@9 ~@15 [bb3,d4]@19 ~@7 bb2@6 ~@18, ~@8 bb2@7 ~@9 bb2@6 ~@10 bb2@6 ~@26 bb2@6 ~@16 [ab3,c4,eb4]@12 ~@4 [bb3,d4,f4]@9 ~@9]/8", // Ab Bm7 Ab Bb Ab Bb
  B: "[c3,c4,eb4,g4]", C: "[g3,bb3,d4,f4]@2 ~ [g3,bb3,d4,f4]@5, g2",
  D: "[[f3,ab3,c4,eb4]@16 [f3,ab3,c4,eb4]@7 ~ [g2,f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@4, f2@23 ~@9]/2", // Fm7 Bb
  E: "[g3,c4,eb4]@3 [g3,c4,eb4], c3", F: "[g3,bb3,d4]@5 ~@7 g2@4, g2@3 ~, ~@3 [g3,bb3,d4]@5",
  G: "[f3,ab3,c4,eb4], f2@3 ~", H: "[f2,f3,ab3,c4,eb4]@7 ~ [f2,f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@4",
  I: "[~@10 [ab3,bb3,c4,eb4]@2 ~@10 bb2 ~ bb2@6 ~@2 bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@3 ~@3 bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@3 ~ [c4,eb4,ab4]@2, bb2@14 [bb3,d4,f4]@16 [ab3,c4,eb4]@10 bb2@6 [bb3,d4,f4]@10 bb2@4 ~@2 [ab3,bb3,c4,eb4]@12 ~@4 [bb3,d4,f4]@12 ~@4 [ab3,bb3,c4,eb4]@12 ~@4 [bb3,d4,f4]@11 ~@7, ~@72 bb2@4 ~@12 bb2@4 ~@12 bb2@4 ~@12 bb2@4 ~@2 bb2 ~]/8", // Ab Bb Ab Bb Ab Bb Ab Bb …
  J: "[bb2@4 ~@2 bb2 ~ ab4@2 [bb3,g4] ~ ab4@2 bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@4 bb2 ~ bb2@4 ~@2 bb2 ~ ab4@2 bb3 ~ [c4,eb4] ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@4 bb2 ~ bb2@4 ~@2 bb2 ~ ab4@2 g4@2 [eb4,ab4]@2 bb2 ~ bb2@4 ~@2 f4@2 ~@2 f4@4 bb2 ~ bb2@4 ~@2 bb2 ~ ab4@2 [bb3,g4] ~ ab4@2 bb2 ~ bb2@4 ~@2 [a3,d4,gb4]@5 ~ [a3,d4,gb4]@4, ~@8 eb4@6 ~@30 ab4@2 ~@32 f4@7 ~@19 eb4@6 ~@18, ~@8 bb2@4 ~@12 bb2@4 ~@12 [bb2,eb4]@4 ~@12 bb2@4 ~@12 [bb2,eb4]@4 ~@10 bb2 ~ bb2@4 ~@12 bb2@4 ~@10 b2@10, ~@8 c4 ~@3 c4 ~ [bb3,d4,f4]@11 ~@5 [c4,eb4,ab4]@9 ~ c4 ~@5 [bb3,d4,f4]@11 ~@5 [c4,eb4,ab4]@9 ~ c4 ~ bb3 ~ c4 ~ [bb3,d4]@15 ~ [c4,eb4,ab4]@9 ~ c4 ~@3 c4 ~ [bb3,d4,f4]@8 ~@10]/8", // Eb Bb Cm Bb Ab5 Eb D Eb5 …
  K: "[g3,bb3,d4,f4] ~@2 g2, g2@3 ~, ~@3 [g3,bb3,d4,f4]@5", L: "[f2,f3,ab3,c4,eb4]",
  M: "[f3,ab3,c4,eb4]@7 ~ [f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@4, f2@3 ~", // Fm7 Bb
  N: "[g3,bb3,d4]@5 ~@7 g2@4, g2@11 ~@5, ~@3 [g3,bb3,d4]@5", // Gm
  O: "[f2,f3,ab3,c4,eb4]@8 [f3,ab3,c4,eb4]@3 ~ [f3,bb3,d4]@4", // Fm7 Bb
  P: "[[g3,c4,eb4] ~@5 c3 ~@3 [g3,c4,eb4] ~@3 c3 ~ c3@4 ~@2 c3 ~ c3@4 ~@2 c3 ~, c3@4 ~@4 c3@4 ~@2 [g3,c4,f4]@17 ~]/2", // Cm Csus4
  Q: "[c3@4 ~@2 c3 ~ c3@2 [g3,c4,eb4] ~@3 c3 ~ c3@4 ~@2 c3 ~ [c3,g3,c4,f4]@4 [g3,c4,f4]@2 c3 ~, [g3,c4,eb4]@9 ~@5 [g3,c4,f4]@9 ~@9]/2", // Cm Csus4 Cm Csus4
  R: "[[g3,c4,eb4]@2 ~@4 c3 ~@3 [g3,c4,eb4] ~@3 c3 ~ c3@4 ~@2 c3 ~ c3@4 ~@2 c3 ~, c3@4 ~@4 c3@4 ~@2 [g3,c4,f4]@13 ~ [g3,c4,f4]@4]/2", // Cm Csus4
  S: "[[c3,g3,c4,eb4]@4 ~@2 c3 ~@3 [g3,c4,eb4] ~@3 c3 ~ c3@4 ~@2 c3 ~ c3@4 ~@2 [c3,g3,c4] ~, ~@8 c3@4 ~@2 [g3,c4,f4]@15 ~ eb4@2]/2", // Cm C5 Csus4
  T: "[c3@4 ~@2 c3 ~@3 [bb3,eb4,g4] ~@3 c3 ~ c3@4 ~@2 c3 ~ c3@4 [c4,f4,a4] ~ [c3,bb3,eb4,g4] ~, ~@4 c3@2 ~ [c4,f4,a4]@6 ~@3]/2", // Eb F Cm7 F
  U: "[c3@4 ~@2 c3 ~@3 [bb3,eb4,g4] ~@3 c3 ~ c3@4 ~@2 c3 ~ c3@4 [c4,f4] ~ [c3,bb3,eb4,g4] ~, ~@8 c3@4 ~@2 [c4,f4,a4]@13 ~ a4@2 ~@2]/2", // Eb F5 Cm7 F
  V: "[c3@4 ~@2 c3 ~@3 [bb3,eb4,g4] ~@3 c3 ~ c3@4 ~@2 c3 ~ c3@4 [f4,a4] ~ [c3,bb3,eb4,g4] ~, ~@8 c3@4 ~@2 [c4,f4,a4]@13 ~ c4@2 ~@2]/2", // Eb F Cm7 F
  W: "[c3@4 ~@2 c3 ~@3 [bb3,eb4,g4] ~@3 c3 ~ c3@12 ~@4, ~@8 c3@4 ~@2 [c4,f4,a4]@15 ~@3]/2", // Eb F
  X: "[bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@2 ~@2 bb2 ~ bb2@4 ~@2 bb2 ~ bb2@6 bb2 ~ bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@3 ~ bb2 ~ bb2@4 ~@2 bb2 ~ bb2@2 [bb3,d4,f4]@3 ~ [c4,eb4,ab4]@2, ~@8 bb2@4 ~@2 [bb3,d4,f4]@16 [ab3,c4,eb4]@10 bb2@4 ~@2 [bb3,d4,f4]@10 bb2@4 ~@2 [ab3,bb3,c4,eb4]@12 ~@4 [bb3,d4,f4]@12 ~@4 [ab3,bb3,c4,eb4]@12 ~@4 [bb3,d4,f4]@11 ~@7, ~@72 bb2@4 ~@12 bb2@4 ~@12 bb2@4 ~@18 bb2 ~]/8", // Ab Bb Ab Bb Ab Bb Ab Bb …
  Y: "[bb2@4 ~@2 bb2 ~ ab4@2 [bb3,g4] ~ ab4@2 bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@4 bb2 ~ bb2@4 ~@2 bb2 ~ ab4@2 bb3 ~ [c4,eb4] ~ bb2 ~ bb2@4 ~@2 bb2 ~@3 [bb3,d4,f4]@4 bb2 ~ bb2@4 ~@2 bb2 ~ ab4@2 g4@2 [eb4,ab4]@2 bb2 ~ bb2@4 ~@2 f4@2 ~@2 f4@4 bb2 ~ bb2@4 ~@2 bb2 ~ ab4@2 [bb3,g4] ~ ab4@2 bb2 ~ bb2@4 ~@2 [a3,d4,gb4]@5 ~ [a3,d4,gb4]@4, ~@8 eb4@6 ~@30 ab4@2 ~@32 f4@7 ~@19 eb4@6 ~@18, ~@8 bb2@4 ~@12 bb2@4 ~@12 [bb2,eb4]@4 ~@12 bb2@4 ~@12 [bb2,eb4]@4 ~@10 bb2 ~ bb2@4 ~@12 bb2@4 ~@10 b2@9 ~, ~@8 c4 ~@3 c4 ~ [bb3,d4,f4]@11 ~@5 [c4,eb4,ab4]@9 ~ c4 ~@5 [bb3,d4,f4]@11 ~@5 [c4,eb4,ab4]@9 ~ c4 ~ bb3 ~ c4 ~ [bb3,d4]@15 ~ [c4,eb4,ab4]@9 ~ c4 ~@3 c4 ~ [bb3,d4,f4]@8 ~@10]/8", // Eb Bb Cm Bb Ab5 Eb D Eb5 …
  Z: "c3@3 c3 c3@4, [c4,eb4,g4]", // Cm
  AA: "[[f3,ab3,c4,eb4]@16 [f3,ab3,c4,eb4]@7 ~ [f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@4, f2@23 ~@9]/2", // Fm7 Bb
  AB: "c3@4 ~@2 c3 ~@5 [g3,c4,eb4]@4, [g3,c4,eb4]@3 ~, ~ c3", AC: "[g2,g3,bb3,d4]@5 ~ g2 ~ g2@7 ~, ~@3 [g3,bb3,d4]@5",
  AD: "f2@4 ~@2 f2@7 ~@3, [f3,ab3,c4,eb4]", AE: "[f2,f3,ab3,c4,eb4]@8 [f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@4",
  AF: "[g3,c4,eb4]@4 ~@2 [g3,c4,eb4]@9 ~, c3@15 ~", AG: "[g3,bb3,d4,f4]@11 ~ [g3,bb3,d4,f4]@3 ~, g2@7 ~",
  AH: "[g3,c4,eb4]@11 ~ [g3,c4,eb4]@4, c3", AI: "[g3,bb3,d4]@11 ~ [g3,bb3,d4]@3 ~, g2@7 ~",
  AJ: "[[f3,ab3,c4,eb4]@4 ~@2 [f3,ab3,c4,eb4]@9 ~ [f3,ab3,c4,eb4]@7 ~ [f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@3 ~, f2@23 ~@9]/2", // Fm7 Bb
  AK: "[g3,c4,eb4]@7 ~@5 [c4,eb4,g4]@4, c3@15 ~", AL: "[g2,g3,bb3,d4]@11 ~ [g2,g3,bb3,d4,f4]@3 ~",
  AM: "[[f3,ab3,c4,eb4]@15 ~ [f3,ab3,c4,eb4]@7 ~ [f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@3 ~, f2@11 ~@5]/2", // Fm7 Bb
  AN: "[g3,c4,eb4]@2 ~ [bb3,eb4,g4], c3", AO: "[g3,bb3,d4,f4]@11 ~ [g3,bb3,d4,f4]@4, g2@3 ~",
  AP: "[eb4@5 ~ eb4@10 [f3,ab3,c4,eb4]@8 [f3,ab3,c4,eb4]@3 ~ [bb2,f3,bb3,d4]@4, f2@11 ~@5, [f3,ab3,c4] ~]/2", // Fm7 Bb Fm
  AQ: "[bb2@4 ~@2 bb2 ~@3 [ab3,bb3,c4,eb4]@2 ~@2 [bb3,d4,f4]@34, ~@8 bb2@4 ~@2 bb2 ~@33]/3", // Ab Bb
})).s("gm_epiano2").gain(0.31)

// chords · electric guitar clean · "ElecGtr"
const electric_guitar_clean = note(`<
  ~@14 A B C D A B C E F@7 G@6 H@3 A B C D A B C E I@6 J@2 K@4 L@2 M N F@7 G@6 O@3 A B C D A B C E A B C D A B C E A B C
  D A B C E I@6 J@2 K@4 L@2 M N P@3
>`.pickRestart({
  A: "[eb4,g4,c5]@3 ~@3 [eb4,g4,c5]@4 ~@2 [eb4,g4,c5]@2 ~@2", // Cm
  B: "[d4,f4,bb4]@3 ~@3 [d4,f4,bb4]@4 ~@2 [d4,f4,bb4]@2 ~@2", // Bb
  C: "[c4,eb4,ab4]@3 ~@3 [c4,eb4,ab4]@4 ~@2 [c4,eb4,ab4]@2 ~@2", // Ab
  D: "[c4,eb4,ab4]@3 ~ [c4,eb4,ab4] ~ [c4,eb4,ab4]@2 [c4,eb4,ab4]@4 [d4,f4,bb4]@4", // Ab Bb
  E: "[c4,eb4,ab4]@3 ~ [c4,eb4,ab4] ~@3 [c4,eb4,ab4]@4 [d4,f4,bb4]@4", // Ab Bb
  F: "[~@4 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@2]/7", // Ab Bb Ab Bb Ab Bb Ab Bb
  G: "[~@4 [d4,f4]@3 f4 g4@2 f4 ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@5 [c4,eb4,ab4,bb4]@2 ~@2 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@2 ~ f4 g4@2 [d4,f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@5 [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@2 ~@2 g4@2 [d4,f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@5 [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@2, ~ bb4@2 ~@21, ~@7 d4@5 ~@27 d4@3 ~@29 [d4,f4,bb4]@2 ~@23]/6", // Dm Ab Bb Ab Bb Ab Bb
  H: "[~@4 [d4,f4,bb4]@3 f4 g4@2 [f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@5 [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@7 ~@3 [d4,gb4,b4]@2 ~@2 [d4,gb4,b4]@2 ~@2, ~@7 [d4,bb4]@3 ~@38]/3", // Bb Bb5 Ab Bb Bm Gm
  I: "[[c4,eb4,g4,c5]@3 ~ [c4,eb4,g4] ~@5 [c4,eb4,g4,c5] ~@3 [c4,f4,g4,c5]@5 ~ [c4,f4,g4,c5]@3 ~ [c4,f4,g4]@2 [c4,f4,g4,c5] ~@3 [c4,eb4,g4,c5]@4 ~@2 [c4,eb4,g4,c5] ~@5 [c4,eb4,g4,c5] ~@3 [f4,g4]@5 ~ [c4,f4,g4,c5]@3 ~ [c4,f4,g4,c5]@2 [c4,f4,g4,c5] ~@3 [c4,eb4,g4,c5]@4 ~@2 [c4,eb4,g4,c5] ~@5 [c4,eb4,g4,c5] ~@3 [c4,f4,g4,c5]@5 ~ [c4,f4,g4] ~@3 [c4,f4,g4,c5]@2 [c4,f4,g4,c5]@2 [c4,f4,g4,c5] ~@3]/6", // Cm Csus4 Cm Fsus2 Csus4 Cm Csus4
  J: "[[c4,eb4,g4,c5]@3 ~ [c4,eb4,g4,c5] ~@5 [c4,eb4,g4] ~@3 [c4,f4,g4,c5]@5 ~ [c4,f4,g4,c5] ~@3 [f4,g4] ~ [c4,f4,g4,c5] ~ [c4,f4,g4,c5] ~@3, ~@23 [c4,g4,c5]@2 ~@7]/2", // Cm Csus4 Fsus2 Csus4 C5
  K: "[[c4,eb4,g4,c5]@3 ~ [c4,eb4,g4,c5] ~@5 [c4,eb4,g4,c5] ~@3 [c4,f4,a4,c5]@5 ~ [c4,f4,a4,c5]@2 ~@4 [c4,f4,c5] ~@3 [c4,eb4,g4,c5]@5 ~ [c4,eb4,g4,c5] ~@5 [c4,eb4,g4,c5] ~@3 [c4,f4,a4,c5]@5 ~ [c4,f4,a4,c5] ~@3 [c4,f4,a4,c5] ~@3 [c4,f4,a4,c5] ~@3]/4", // Cm F F5 Cm F
  L: "[[c4,eb4,g4,c5]@3 ~ [c4,eb4,g4,c5] ~@5 [c4,eb4,g4,c5] ~@3 [c4,f4,a4,c5]@5 ~ [c4,f4,a4,c5] ~@3 [c4,f4,a4,c5]@2 [c4,f4,a4,c5] ~ [c4,f4,a4,c5] ~@3]/2", // Cm F
  M: "[c4,eb4,g4,c5]@3 ~ [c4,eb4,g4,c5] ~@5 [c4,eb4,g4,c5] ~@3 [c4,f4,a4,c5]@2", // Cm F
  N: "~@2 [c4,f4,a4,c5] ~@5 [c4,f4,a4,c5]@3 ~ [c4,f4,a4,c5] ~@3", // F
  O: "[~@4 [d4,f4,bb4]@3 f4 g4@2 [f4,bb4] ~@3 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@5 [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@7 ~ [d4,gb4,b4]@4 ~@2 [d4,gb4,b4]@2 ~@2, ~@7 [d4,bb4]@3 ~@38]/3", // Bb Bb5 Ab Bb Bm Gm
  P: "[~@4 [c4,eb4,ab4,bb4]@5 ~ [c4,eb4,ab4,bb4] ~@3 [d4,f4,bb4]@33 ~]/3", // Ab Bb
})).s("gm_electric_guitar_clean").gain(0.31)

// chords · electric guitar clean · "ElecGtr" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@14 A B C D A B C E ~@9 F ~@3 G ~ H A B C D A B C E I J K@2 ~ I L M ~ N ~@15 F ~@3 G ~ O A B C D A B C E A B C D A B
  C E A B C D A B C E I J K@2 ~ I L M ~ N ~@9
>`.pickRestart({
  A: "~@3 [eb4,g4,c5]!2 ~@5 [eb4,g4,c5]@2 ~@2 [eb4,g4,c5]@2", // Cm
  B: "~@3 [d4,f4,bb4]!2 ~@5 [d4,f4,bb4]@2 ~@2 [d4,f4,bb4]@2", // Bb
  C: "~@3 [c4,eb4,ab4]!2 ~@5 [c4,eb4,ab4]@2 ~@2 [c4,eb4,ab4]@2", D: "~@3 [c4,eb4,ab4] ~@12",
  E: "~@3 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]@2 ~@8", F: "~@7 bb4@3 ~@6", G: "~@10 d4 ~@5",
  H: "~@3 [d4,gb4,b4] ~ [d4,gb4,b4] ~ [d4,gb4,b4]", I: "~@4 c5 ~@11", J: "~@4 c5 ~@3", K: "[~@14 [c4,c5]@5 ~@13]/2",
  L: "~@10 c5 ~@5", M: "~@7 f4@2 ~@7", N: "~@10 a4 ~@5", O: "~@5 [d4,gb4,b4] ~ [d4,gb4,b4]",
})).s("gm_electric_guitar_clean").gain(0.15)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~@2 A B A C A D A B A E A F G H I J K L M N A B A C A D A C A D A O A E A F P Q I J R L S T U V U W X Y X Z X@3 AA X
  AB X AC A B A C A D A AD A AE A O A E A AF AG@2 AH AI R L S AJ AK AL I J R L S T P Q I J R L S AM U V U W X Y X Z X@3
  AA X AB X AC AN@3
>`.pickRestart({
  A: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1 ~", B: "bb1@4 ~@2 bb1 ~ bb1@5 ~ f1@2", C: "bb1@4 ~@2 bb1 ~ bb1@2 f1@2 ~@2 f1@2",
  D: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 f1@2", E: "bb1@4 ~@2 bb1 ~ bb1@6 f1@2", F: "bb1@3 b1@5",
  G: "c2@4 ~@2 c2 ~ c2@4 ~@2 g1 ~", H: "g1@4 ~@2 g1@9 ~", I: "f1@4 ~@2 f1 ~ f1@5 ~ f1 ~", J: "f1@5 ~ g1@6 bb1@3 ~",
  K: "c2@4 ~@2 c2 ~ c2@5 ~ g1 ~", L: "g1@5 ~ bb1@6 c2@4", M: "f1@4 ~@2 f1 ~ f1@4 ~@2 f1 ~",
  N: "f1@4 ~@2 g1@5 ~ bb1@2 g1@2", O: "bb1@4 ~@2 bb1 ~ bb1@2 f1@2 ab1@2 a1@2", P: "c2@4 ~@2 c2@7 ~ c2 ~",
  Q: "g1@4 ~@2 g1@6 bb1 ~ g1 ~", R: "c2@4 ~@2 c2@7 ~ g1 ~", S: "f1@4 ~@2 f1 ~ f1@4 ~@2 c2@2",
  T: "f1@4 ~@2 g1 ~ g1@4 ~@2 g1@2", U: "c2@4 ~@2 c2 ~ c2@7 ~", V: "c2@4 ~@2 c2 ~ c2@5 ~ c2 ~",
  W: "c2@4 ~@2 c2@3 ~ g1@2 c2 ~ g1@2", X: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2 ~", Y: "c2@4 ~@2 c2 ~ c2@4 ~@2 g1@2",
  Z: "c2@4 ~@2 c2 ~ c2@2 g1@2 bb1 ~ g1@2", AA: "c2@4 ~@2 c2 ~ c2@2 g1@2 bb1@2 g1@2", AB: "c2@4 ~@2 c2 ~ c2@6 g1@2",
  AC: "c2@5 ~ c2 ~ d2@2 ~@2 c2@2 ~@2", AD: "bb1@2 ~ bb1@2 f1 ab1 a1", AE: "bb1@2 ~ bb1 f1 g1 bb1 g1",
  AF: "bb1@6 b1@6 b1 ~ b1 ~", AG: "[c2@4 ~@2 c2@7 ~ g1@7 ~ bb1@6 c2 ~ f1 ~]/2", AH: "f1@4 ~@2 f1@6 c2@2 f1 ~",
  AI: "f1@4 ~@2 f1 ~ g1@6 g1 ~", AJ: "f1@4 ~@2 g1 ~ g1@4 bb1 ~ bb1@2", AK: "c2@4 ~@2 c2@5 ~ bb1@3 ~",
  AL: "g1@4 ~@2 bb1@6 c2@3 ~", AM: "f1@4 ~@2 g1 ~ g1@4 ~@2 bb1 b1", AN: "[bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1@33 ~]/3",
})).s("gm_electric_bass_finger").gain(0.36)

// other · overdriven guitar · "SoloGtr PB=2"
const overdriven_guitar = note("<~@46 A@5 B@2 C@2 D E F@3 G H I ~@39 J@2 K@5 L M N O P Q@3 R@4>".pickRestart({
  A: "[~@10 c4@4 g3@29 ~@3 eb4@13 ~ eb4 d4 c4@8 eb4@3 ~@7]/5",
  B: "[~@4 eb4@4 eb4 d4 c4@2 bb3@2 c4@8 g3 bb3 c4@2 g3 bb3 c4@2 eb4 ~]/2", C: "[eb4@3 ~ eb4@6 c4@2 eb4@2 f4@9 ~@9]/2",
  D: "~@2 c4@2 eb4 ~ f4 ~ f4@8", E: "eb4@2 c4@2 eb4@4 f4@3 ~ f4@4",
  F: "[~@10 bb4@14 g4@2 f4@10 eb4@2 c4 ~ bb3@2 c4@2 eb4 ~ f4 ~]/3", G: "f4@2 ~@2 f4@5 eb4 c4@2 bb3@2 c4 ~",
  H: "c4 bb3 g3 ~ bb3 g3 f3 ~ g3 f3 eb3 ~ f3 eb3 c3@2", I: "bb2@13 ~@3", J: "[~@4 f5@10 ab5@8 f5@8 eb5 c5]/2",
  K: "[eb5@7 c5@16 ~@5 g4!2 bb4@6 g4 ~ c5@6 bb4 ~ eb5@6 c5 ~ f5@8 bb5@14 f5 ~ eb5 f5]/5",
  L: "eb5 c5 ~@2 eb5 c5 ~ bb4 c5 ~ c5@4 ~@2, ~@3 f5@2 ~@11", M: "~@4 g4!2 bb4@2 g4 ~ f4 ~ g4@2 eb4 ~",
  N: "f4@3 ~ f4@2 eb4@4 ~ c4 ~@4", O: "~@4 f4 ~ bb4 ~ bb4@2 g4@2 f4 ~ eb4 ~, ~@5 g4@2 ~@9", P: "f4@2 ~ f4@3 eb4@6 ~@4",
  Q: "[f4@2 g4 ~ bb4@2 ~@2 bb4@2 g4 ~@3 c5@4 g4 ~ bb4@2 ~@2 bb4@2 f4@2 g4@6 ~@2 bb4@2 c5@2 ~@2 eb5@2 f5@3 ~]/3",
  R: "[eb5@2 f5@2 bb5@27 ~]/4",
})).s("gm_overdriven_guitar").gain(0.31)

// chords · rock organ · "ORGAN"
const rock_organ = note(`<
  ~@46 A@2 B@2 C@2 D@2 E@2 F@2 G@4 H@8 I@8 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 A@2 B@2 C@2 D@2 E@2 F@2 G@4
  L@3
>`.pickRestart({
  A: "[~@4 [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@16 ~@2]/2", // Cm Csus4
  B: "[~@4 [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@15 ~@3]/2", // Cm Csus4
  C: "[~@4 [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@17 ~]/2", // Cm Csus4
  D: "[[g4,c5,eb5]@3 ~ [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@18]/2", // Cm Csus4
  E: "[[g4,c5,eb5]@3 ~ [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@17 ~]/2", // Cm Csus4
  F: "[~@4 [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@18]/2", // Cm Csus4
  G: "[[g4,c5,eb5]@5 ~@5 [g4,c5,eb5] ~@3 f5@18 eb5@5 ~@5 [g4,c5,eb5] ~@3 [g4,c5,f5]@16 ~@2, ~@14 [g4,c5]@23 ~@27]/4", // Cm Csus4 C5
  H: "[[ab4,c5,eb5]@7 [bb4,d5,f5]@8 [ab4,c5,eb5]@8 [bb4,d5,f5]@8 [ab4,c5,eb5]@8 [bb4,d5,f5]@8 [ab4,c5,eb5]@8 [bb4,d5,f5]@8 [ab4,c5,eb5]]/8", // Ab Bb Ab Bb Ab Bb Ab Bb …
  I: "[~@7 [bb4,d5,f5]@8 [ab4,c5,eb5]@8 [bb4,d5,f5]@8 [ab4,c5,eb5]@8 [bb4,d5,f5]@8 [c5,eb5,ab5]@8 [f5,bb5]@4 [gb5,b5]@5, ~@55 d5@9]/8", // Bb Ab Bb Ab Bb Ab Bb5 B5
  J: "[[c5,eb5] [bb4,d5], g4]/2", K: "[[ab4,c5]@7 [bb4,d5], f4]/2", L: "[[ab4,c5,eb5]@7 [bb4,d5,f5]@16 ~]/3",
})).s("gm_rock_organ").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@14 B@2 A B@3 A@15 B@3 A B@5 C@16 A@15 B@3 A B@7 A B@7 A B@5 C@16 D ~ E
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@2 x!2 ~@2 x", D: "x ~ x!2", E: "~@3 x",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!116 [~@4 x ~@5 x!2 ~@2 x ~] ~ [~@13 x!2 ~]>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  [x!2]
  [x!4]
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!44
  [x!4]!16
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!40
  [x!4]!16
  [x ~ x!3 ~ x!3 ~@7]
  ~@2
>`).gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  ~@14 A ~@7 A ~@15 B ~@3 B ~@11 A ~@7 A ~@15 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@11 A ~@7 C ~@2
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~@4 x ~ x",
})).gain(0.41)

// drums · ride
const ride = s("rd").struct("<~@46 [x!8]!16 ~@40 [x!8]!16 ~@3>").gain(0.36)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@46 [~ x!3 ~ x!3]!16 ~@40 [~ x!3 ~ x!3]!16 ~@3>").gain(1.3)

stack(
  epiano2, electric_guitar_clean, electric_guitar_clean_2, bass, overdriven_guitar, rock_organ, kick, snare, hihat,
  crash, ride, cabasa
)

More by Ace