Strudelify

Love Is Alive

Gary Wright

KeyF majorTempo97 bpm
0:00/0:00
// Love Is Alive — Gary Wright
// 97 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · synth bass 2 · "Track 2"
const bass = note(`<
  ~ A@4 B@5 C D E F E G H I J K J L M N O@3 P@3 Q R S T U T V@2 W@2 X@2 Y@2 Z AA AB@3 AC ~ AD AE@2 ~ AF ~ AG AH AI AJ AI
  AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY ~ AZ BA BB BC BD BE BF ~
>`.pickRestart({
  A: "[~@23 bb2@4 c3@23 ~ eb3@4 f3@4 g3@4 eb3@4 f3@18 ~@6 bb2@3 c3@8 eb2@8 f2@8 bb2@8 c3@2]/4",
  B: "[~@2 c3@18 ~@2 eb2@4 f2@9 ~@3 eb3@4 f3@9 ~@3 eb2@4 f2@4 bb2@3 c3@4 ~ eb3@7 f3@12 ~@4 c3@8 bb2@8 f2@8 eb2@8 c2@7 ~ bb1@5 ~@3 bb1@8 eb1@4 f1@5 ~@2]/5",
  C: "~@6 ab1 bb1", D: "~@2 bb1 f1 ~ eb1 f1 ~", E: "~@23 ab1@4 bb1@4 ~", F: "~@8 bb1@3 f1@4 ~@4 eb1@4 f1@4 ~@5",
  G: "~@7 bb1@3 f1@4 ~@5 eb1@4 f1@4 ~@5", H: "~@22 ab1@4 bb1@3 ~@3", I: "~@3 bb1@2 f1@2 ~@2 eb1@2 f1@2 ~@3",
  J: "~@21 ab1@4 bb1@4 ~@3", K: "~@5 bb1@4 f1@4 ~@4 eb1@4 f1@4 ~@7", L: "~@5 bb1@3 f1@3 ~@18 c3@3",
  M: "f1@4 ~@4 f1@2 ~@2 f1@3 ~@17", N: "c2@2 eb2@2 f2@2 bb1@2 f1 ~@3 f1@3 ~@13 c3@4",
  O: "[f1@4 ~@4 f1 ~@2 f1@3 ~@17 c2@2 eb2@2 f2@2 bb1@2 f1 ~@3 f1@2 ~@14 c3@4 f1@4 ~@4 f1@2 ~@2 f1@3 ~@16 g2@2]/3",
  P: "[c2@2 eb2@2 f2@2 ~ f1 ~@3 f1@3 ~@12 c3@4 f1@4 ~@4 f1 ~@3 f1@3 ~@18 eb2@2 f2@3 bb1@2 f1 ~@3 f1@3 ~ eb1@4 f1@4 ~@10, ~@62 c2@3 ~@31]/3",
  Q: "~@17 ab1@4 bb1@4 ~@7", R: "~ bb1@4 f1@4 ~@4 eb1@4 f1@4 ~@11", S: "~@17 ab1@3 bb1@4 ~@8",
  T: "bb1@3 ~ f1@4 ~@4 eb1@3 ~ f1@3 ~@13", U: "~@4 ab1 bb1 ~@2",
  V: "[~@15 ab1@4 bb1@3 ~@9 bb1@3 ~ f1@4 ~@4 eb1@3 ~ f1@4 ~@13]/2",
  W: "[~@15 ab1@3 bb1@4 ~@8 bb1@4 f1@4 ~@4 eb1@3 ~ f1@4 ~@14]/2",
  X: "[~@14 ab1@4 bb1@4 ~@8 bb1@4 f1@3 ~@16 c3@4 f1@4 ~@3]/2",
  Y: "[~ f1@2 ~@2 f1@4 ~@16 c2@2 ~ f2@3 bb1@2 f1@2 ~@2 f1@3 ~@13 c3@4 f1@4 ~@3, ~@27 eb2@2 ~@35]/2",
  Z: "f1@2 ~@3 f1@3 ~@16 c2@2 eb2@2 f2@2 bb1@2", AA: "f1@2 ~@2 f1@3 ~@13 c3@4 f1@4 ~@4",
  AB: "[f1 ~@3 f1@3 ~@18 eb2@2 f2@2 bb1@2 f1@2 ~@2 f1@3 ~@14 c3@3 f1@3 ~@5 f1@2 ~@2 f1@2 ~@19 eb2@2 f2@2 bb1@2 ~ f1, ~@24 c2@2 ~@61 c2@2 ~@7]/3",
  AC: "~@3 f1@2 ~@27", AD: "~@6 eb3@2 ~ g3@2 eb3@2 ~ f3@3 ~@15, ~@4 f3 ~@11",
  AE: "[~@30 g2 ab2@2 g2@2 c2@2 eb2@4 f2@4 ~@19]/2", AF: "~@6 f3@2 g3@2 eb3@2 f3@3 ~@17, ~@5 eb3@2 ~@25",
  AG: "~@4 eb1@2 ~@2 f1@3 ~@21", AH: "~@8 ab1@3 bb1@4 ~@8 bb1@4 f1@3 ~@2", AI: "~@3 eb1@4 f1@3 ~@22",
  AJ: "~@7 ab1@4 bb1@3 ~@9 bb1@3 ~ f1@4 ~", AK: "~@6 ab1@4 bb1@4 ~@8 bb1@3 ~ f1@4 ~@2", AL: "~@2 eb1@4 f1@3 ~@23",
  AM: "~@6 ab1@3 bb1@4 ~@8 bb1@4 f1@4 ~@3", AN: "~ eb1@4 f1@3 ~@24", AO: "~@5 ab1@4 bb1@3 ~@9 bb1@4 f1@4 ~@3",
  AP: "~ eb1@4 f1@4 ~@23", AQ: "~@4 ab1@4 bb1@3 ~@9 bb1@4 f1@3 ~@5", AR: "~@12 c3@4 f1@4 ~@4 f1 ~@3 f1@3 ~",
  AS: "~@15 c2@2 eb2@2 f2@2 bb1@2 ~ f1 ~@2 f1@2 ~@3", AT: "~@11 c3@4 f1@4 ~@4 f1@2 ~@2 f1@3 ~@2",
  AU: "~@14 c2@2 eb2@2 f2@2 bb1@2 ~ f1@2 ~ f1@2 ~@4", AV: "~@10 c3@4 ~ f1@4 ~@3 f1@2 ~@2 f1@3 ~@3",
  AW: "~@14 g2@2 c2@2 eb2@2 f2@2 f1 ~@3 f1@2 ~@4", AX: "~@10 c3@4 f1@3 ~@4 f1@2 ~@2 f1@3 ~@4",
  AY: "~@14 eb2@2 f2@2 ~ bb1 ~ f1 ~@3 f1@2 ~@5, ~@13 c2@2 ~@17", AZ: "~@14 eb3 f3", BA: "g3@2 eb3@2 f3@3 ~@25",
  BB: "~@20 g2 ab2@2 g2@2 c2@3 eb2@4", BC: "f2@3 ~@29", BD: "~@27 eb3@2 ~ g3@2, ~@29 f3@2 ~", BE: "eb3@2 f3@3 ~@27",
  BF: "~@26 eb1 ~@3 f1@2",
})).s("gm_synth_bass_2").gain(0.72)

// chords · electric guitar clean · "Track 4"
const electric_guitar_clean = note(`<
  ~@10 A B C D@2 E@2 F G H I ~@8 J K L M N ~ O P Q R S T ~@8 U V@2 W@2 X@2 Y Z AA AB AC AD AE AD ~ AF ~ AG ~@9 AH AI AJ
  AK AL@2 AM AN ~
>`.pickRestart({
  A: "~ a4@2 ~ [f4,a4]@2 ~@2 a4 ~@7 a4 ~@3 a4 ~@11, [f4,ab4] ~@15", B: "~@31 ab4",
  C: "f4@2 ~@2 [f4,a4]@2 ~@2 a4 ~@3 a4 ~@3 a4 ~@15", D: "[~@31 [f4,ab4,a4]@2 ~@2 a4@2 ~@2 a4@2 ~@2 a4@2 ~@19]/2",
  E: "[~@31 [f4,ab4,a4]@2 ~ [f4,a4]@2 ~@2 a4@2 ~@10 a4 ~@13]/2", F: "~@15 [f4,ab4]",
  G: "~@2 [f4,a4] ~@3 [f4,a4] ~@3 a4 ~@2 a4 ~@3 a4 ~@14", H: "~@29 [f4,ab4,a4]@2 ~",
  I: "~ a4 ~@3 a4 ~@3 a4 ~@3 a4 ~@3 a4 ~@14", J: "~@25 [f4,ab4,a4]@2 ~@2 [f4,a4]@2 ~",
  K: "~ [f4,a4]@2 ~@2 a4@2 ~@2 a4 ~@3 a4 ~@18", L: "~@25 a4@2 ~@2 a4@2 ~, ~@12 [f4,ab4] ~@3",
  M: "~ a4 ~@3 a4 ~@3 a4 ~@22", N: "~@12 [f4,ab4,a4] ~@3", O: "~@23 [f4,ab4,a4] ~@8", P: "~@3 a4 ~@3 a4 ~@3 a4 ~@20",
  Q: "~@22 [f4,ab4,a4]@2 ~@7 a4", R: "~@3 a4 ~@28", S: "~@11 [f4,ab4,a4] ~@3 a4", T: "~@2 a4 ~@3 a4 ~@25",
  U: "~@19 [g4,c5] ~@2 c5 g4 ~ [g4,c5] ~@2 c5 g4 ~ [g4,c5]", // C5
  V: "[~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@2 c5 ~ [g4,c5] ~@3 c5 ~ [g4,c5] ~@3 [f4,bb4]@10 ~@14 [g4,c5]@2 ~@2 [g4,c5] ~ [g4,c5]@2 ~@2 c5 ~ c5 ~, ~@61 g4@2 ~]/2", // C5 Bb5 C5
  W: "[~ [g4,c5] ~@2 [g4,c5]@2 ~ [g4,c5] ~ g4 c5 ~@2 [g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~@3 [f4,bb4]@12 ~@13 [g4,c5] ~@2 [g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~@2]/2", // C5 Bb5 C5
  X: "[~ [g4,c5] ~ [g4,c5] ~@2 c5 g4!2 c5 ~@2 c5 g4 [g4,c5] ~@3 c5 ~ [g4,c5] ~@3 [f4,bb4]@11 ~@13 [g4,c5]@2 ~@2 [g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~@3]/2", // C5 Bb5 C5
  Y: "[g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~@3 c5 ~ [g4,c5] ~@3 [f4,bb4]@8", // C5 Bb5
  Z: "~@8 [f4,ab4,a4] ~ f4 ~@5", AA: "~@4 a4 ~@27", AB: "~@15 [f4,ab4,a4]@2 ~@6 f4@2 ~@7", AC: "~@3 [f4,a4]@2 ~@27",
  AD: "~@7 [f4,ab4,a4] ~@8", AE: "~ a4 ~@14", AF: "~@12 ab4 [f4,a4]@2 ~@17", AG: "~@13 a4 ~@18, ~@6 [f4,ab4] ~@9",
  AH: "~@9 [g4,c5] ~@3 [g4,c5] ~ [g4,c5]@2 ~@2 [g4,c5] ~ [g4,c5]@2 ~ [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~", // C5
  AI: "[g4,c5]@2 ~@3 [g4,c5] ~ [g4,c5] ~@2 c5 ~ [g4,c5] ~@3 [f4,bb4]@13 ~@3", // C5 Bb5
  AJ: "~@8 [g4,c5]@2 ~@2 [g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~@2 c5 g4 ~ [g4,c5] ~@3 c5 ~", // C5
  AK: "[g4,c5]@2 ~@2 [g4,c5] ~ [g4,c5] ~@2 c5 ~@2 [g4,c5] ~@3 [f4,bb4]@14 ~@2", // C5 Bb5
  AL: "[~@7 c5 g4 ~@2 [g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~ [g4,c5]@2 ~@2 [g4,c5] ~ [g4,c5] ~@3 c5 ~ [g4,c5]@2 ~@2 c5 ~ [g4,c5] ~@3 c5 ~ [g4,c5] ~@3 [f4,bb4]@12 ~@5]/2", // C5 Bb5
  AM: "~@7 [g4,c5] ~@2 c5 g4!2 c5 ~@2 [g4,c5] ~ [g4,c5] ~@3 c5 g4 [g4,c5] ~@3 [g4,c5] ~ [g4,c5] ~", // C5
  AN: "~@3 [g4,c5] ~ [g4,c5] ~@2 c5 ~ [g4,c5] ~@3 [f4,bb4]@11 ~@7", // C5 Bb5
})).s("gm_electric_guitar_clean").gain(0.48)

// chords · electric guitar clean · "Track 4" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@10 A ~ B ~ C ~ D E F ~ G ~@9 H I J K L M N O P Q R ~@9 S T ~@4 U V W X@2 Y Z AA AB AC AD AE AF ~@9 AG AH ~ AI AJ ~
  AK ~
>`.pickRestart({
  A: "~@8 f4 ~@3 [f4,a4] ~@3 f4 ~@3 f4 ~@11", B: "~ a4@2 ~@5 f4 ~@3 f4 ~@3 f4 ~@3 [f4,a4] ~@11",
  C: "~@3 f4@2 ~@2 f4@2 ~@2 f4@2 ~@2 [f4,a4]@2 ~@2 [f4,a4] ~@12", D: "~@7 f4 ~@2 [f4,a4] ~@3 a4 f4 ~@2 f4 ~@13",
  E: "~@31 a4", F: "~@10 f4 ~@3 f4 ~@2 f4 ~@14", G: "~ f4 ~@3 f4 ~@3 f4 ~@3 f4 ~@3 f4 ~@14",
  H: "~@5 f4@2 ~@2 f4 ~@3 f4 ~@18", I: "~@29 f4@2 ~", J: "~ f4 ~@3 f4 ~@3 f4 ~@3 [f4,a4] ~@18", K: "~@14 [f4,a4] ~",
  L: "a4 f4 ~@2 [f4,a4] ~@3 [f4,a4] ~@3 [f4,a4] ~@19", M: "~@28 f4 ~@2 [f4,a4], ~@27 a4@2 ~@3",
  N: "~@4 f4 ~@2 f4 ~@3 f4 ~@20", O: "~@27 f4@2 ~@2 f4, ~@13 a4 ~@2", P: "~@3 f4 ~@3 [f4,a4] ~@3 [f4,a4] ~@20",
  Q: "~@13 [f4,a4] ~ f4", R: "~@2 f4 ~@3 f4 ~@3 [f4,a4] ~@21", S: "~@14 g4 ~@17", T: "~@28 g4 ~@3", U: "~@18 g4 ~@13",
  V: "~@10 a4 ~ [f4,a4] ~ [f4,a4] ~", W: "[f4,a4] ~@3 f4 ~@27",
  X: "[~@19 [f4,a4]@2 ~@2 a4@2 ~@2 [f4,a4]@2 ~@2 [f4,a4]@2 ~@31]/2", // F
  Y: "~@18 [f4,a4]@2 ~@2 [f4,a4] ~@3 [f4,a4] ~@3 [f4,a4] ~", Z: "~ f4 ~@14",
  AA: "~@18 [f4,a4]@2 ~@2 [f4,a4]@2 ~ [f4,a4] ~@3 [f4,a4] ~@2", AB: "~@2 [f4,a4] ~@29",
  AC: "~@17 [f4,a4]@2 ~@2 [f4,a4]@2 ~@2 [f4,a4] ~@3 [f4,a4] ~@2", AD: "~ [f4,a4] ~@30",
  AE: "~@8 [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~", AF: "[f4,a4] ~@15", AG: "~@11 g4 ~@20", AH: "~@30 g4 ~",
  AI: "~@29 g4 ~@2", AJ: "~@3 g4 ~@28", AK: "~@8 g4 ~@23",
})).s("gm_electric_guitar_clean").gain(0.24)

// other · electric guitar clean · "Track 5"
const electric_guitar_clean_3 = note(`<
  ~@10 A ~ B ~ B ~ C ~ D ~ E ~@8 F G H I H J K L M N M N ~@16 O P Q R S T U V W X Y X ~@17
>`.pickRestart({
  A: "~@4 ab4 ~@3 ab4 ~@3 ab4 ~@2 ab4 ~@3 ab4 ~@12", B: "~@3 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@12",
  C: "~@2 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@13", D: "~ ab4 ~@3 ab4 ~@3 ab4 ~@4 ab4 ~@3 ab4 ~@13",
  E: "~ ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@14", F: "~@29 ab4 ~@2", G: "~ ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@18",
  H: "~@28 ab4 ~@3", I: "ab4 ~@3 ab4 ~@3 ab4 ~@4 ab4 ~@18", J: "ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@19",
  K: "~@27 ab4 ~@3 ab4", L: "~@3 ab4 ~@3 ab4 ~@3 ab4 ~@20", M: "~@26 ab4 ~@3 ab4 ~", N: "~@2 ab4 ~@3 ab4 ~@3 ab4 ~@21",
  O: "~@20 ab4 ~@2 ab4 ~@3 ab4 ~@3 ab4", P: "~@4 ab4 ~@27", Q: "~@19 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4", R: "~@3 ab4 ~@28",
  S: "~@18 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~", T: "~@2 ab4 ~@29", U: "~@17 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@2",
  V: "~ ab4 ~@30", W: "~@17 ab4 ~@3 ab4 ~@2 ab4 ~@3 ab4 ~@3", X: "ab4 ~@31", Y: "~@16 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~@3",
})).s("gm_electric_guitar_clean").gain(0.35)

// other · pad warm · "Track 8"
const pad_warm = note("<~@4 A@8 ~@9 B@8 C@5 ~@7 D@8 E@8 ~@12 F@8 G@2 H@6 ~>".pickRestart({
  A: "[~@153 c6@30 ~ c6@72, ~@13 bb5@78 ~@37, ~@58 eb5@125 ~@73, ~@121 f5@61 ~@74]/8",
  B: "[~@52 a5@32 g5@31 a5@29 ~@3 bb5@32 a5@31 g5@32 a5@14, ~@20 bb5@31 ~@205, ~@21 f5@235]/8", C: "[~@9 c6@63 ~@8]/5",
  D: "[~@13 bb5@30 ~@2 a5@31 g5@32 a5@30 ~@2 bb5@29 ~@2 a5@32 ~ g5@31 a5@21, ~@13 f5@243]/8",
  E: "[~@11 g5@47 f5@16 g5@47 f5@16 g5@47 f5@17 g5@47 f5@8]/8",
  F: "[~@4 bb5@31 a5@32 g5@31 a5@29 ~@3 bb5@29 ~@3 a5@32 g5@31 a5@31, ~ f5@63]/8", G: "[~ g5@47 f5@16]/2",
  H: "[g5@48 f5@15 g5@47 f5@17 g5@46 f5@11 ~@8]/6",
})).s("gm_pad_warm").gain(0.3)

// chords · tenor sax · "Track 9"
const tenor_sax = note(`<
  ~@13 A B C@2 D E F@2 G H I@4 J@3 ~@3 K L@3 M N O@2 P Q R S T@2 U@3 ~@2 V W X Y ~@5 Z AA AB AC AD AE AF AG AH@2 AI@2
  AJ@2 AK@3 ~@2 AL@2 ~@4
>`.pickRestart({
  A: "~@15 f4@4 eb4@2 ~@2 ab4@2 ~@2 ab4@4 ~", B: "~@3 f4@6 ~@2 ab4@2 ~@2 f4@2 ~@2 f4@8 eb4@2 ~@3",
  C: "[~@10 eb4 ~@3 f4@2 ~@2 ab4@10 ~@2 f4@4 ~@4 f4@2 ~@2 ab4@2 ~@2 f4@2 ~@2 f4@9 ~@5]/2",
  D: "~@10 eb4 ~@3 f4@4 ~@4 ab4@2 ~ g4@2 ~@2 f4 ~@2", E: "~@2 g4@6 ~@9 eb4 ~@4 f4@2 ~@2 ab4@5 ~",
  F: "[~ f4@8 ~@15 eb4@2 ~@3 ab4@5 ~@3 f4@2 ~@2 eb4 ~@3 ab4@2 ~@2 f4@10 ~@5]/2", G: "~@14 a4 ~, ~@28 f4 ~@3",
  H: "[f4,a4]@5 ~@3 [g4,bb4]@2 ~@2 [a4,c5]@3 ~ [g4,bb4]@3 ~ a4@5 ~@7, ~@19 f4@5 ~@8", // F Gm Am Gm
  I: "[~@27 f4 a4 ~@3 a4@5 ~@2 [g4,bb4]@3 ~ [f4,a4]@2 ~@2 [a4,c5]@6 ~@2 [a4,c5]@5 ~@3 [g4,bb4]@5 ~@3 [f4,a4]@6 ~@14 [f4,a4] ~@3 [f4,a4]@5 ~@3 g4@2 ~@2 a4@2 ~@2 g4@3 [f4,a4]@6 ~@8, ~@31 f4@5 ~@66 bb4@2 ~@2 c5@2 ~@2 bb4@4 ~@14]/4", // Gm F Am Gm F
  J: "[~@26 [f4,a4] ~@3 [f4,a4]@5 ~@3 [g4,bb4]@2 ~@2 [f4,a4]@2 ~@2 [a4,c5]@14 ~@2 [a4,c5]@6 ~@2 bb4@5 ~@3 [f4,a4]@5 ~@13, ~@69 g4@7 ~@20]/3", // F Gm F Am F
  K: "~@12 f4 ~@3 g4 ~@3 g4@2 ~@2 ab4@5 ~@3",
  L: "[f4@8 ~@4 eb4 ~@3 f4@2 ~@2 g4@2 ~@2 ab4 ~@3 f4@7 eb4@4 ~@12 eb4@2 ~@2 ab4@3 ~ eb4@2 ~@2 f4@2 ~@2 f4 ~@3 ab4 ~@3 f4@8 eb4@3 ~@10]/3",
  M: "~@15 ab4 ~@3 ab4@5 ~@3 f4@5", N: "~@2 eb4 ~@3 eb4@4 ~@4 f4@2 ~@2 g4@2 ~@2 ab4@2 ~@2 f4@6",
  O: "[~@2 eb4@4 ~@12 ab4 ~@3 ab4@5 ~@3 ab4@6 ~@6 eb4@2 ~@2 g4@8 f4@6 ~@4]/2",
  P: "~@21 f4@2 ~@2 [f4,a4]@5 ~@2, ~@21 a4 ~@10", // F
  Q: "~ [g4,bb4]@2 ~@2 [a4,c5]@2 ~@2 [g4,bb4]@3 ~ f4@5 ~@14, ~@12 a4@5 ~@15", R: "~@21 [f4,a4] ~@2 [f4,a4]@5 ~@3",
  S: "[g4,bb4]@3 ~ [f4,a4]@2 ~@2 [a4,c5]@6 ~@2 [a4,c5]@5 ~@3 [g4,bb4]@5 ~@3", // Gm F Am Gm
  T: "[[f4,a4]@6 ~@14 [f4,a4] ~@3 [f4,a4]@5 ~@3 bb4@2 ~ [a4,c5]@2 ~@2 [g4,bb4]@4 [f4,a4]@5 ~@16, ~@31 g4@2 ~@31]/2", // F Am Gm F
  U: "[~@19 [f4,a4] ~@3 [f4,a4]@5 ~@3 [g4,bb4]@2 ~@2 [f4,a4]@2 ~@2 a4@14 ~@2 c5@4 ~@3 [g4,bb4]@6 ~@3 f4@4 ~@21, ~@39 c5@11 ~@4 a4@6 ~@10 a4@5 ~@21]/3", // F Gm F Gm
  V: "~@29 f4 ~@2", W: "~ f4@2 ~@2 ab4@2 ~@2 f4@2 ~@2 f4@7 ~@12", X: "~@7 c5",
  Y: "~@2 bb4@5 ~@2 f4@3 ~ ab4@3 f4@2 ~@2 f4@2 ~@3 f4@7", Z: "~@7 ab4 ~@3 ab4@5 ~@2 f4@7 ~ eb4@4 ~@2",
  AA: "~@2 eb4@2 ~@2 f4@2 ~@2 ab4@5 ~@3 f4@7 ~@7", AB: "~@2 eb4 ~@3 f4 ~@3 ab4 ~@3 ab4 ~@3 f4@6 ~@2 eb4 ~@2 f4 ~@2",
  AC: "~ f4@5 ~@3 ab4@5 ~@3 f4@7 ~@8", AD: "~@13 ab4 ~@3 ab4@6 ~@2 f4 ~@3 f4 ~@2",
  AE: "~ f4@8 d4@4 ~@11 f4 ~@3 f4@2 ~@2", AF: "ab4@11 ~@13 ab4 ~@3 f4 ~@3", AG: "f4@11 ~@5 f4@4 ~@4 f4@4 ~@4",
  AH: "[~@12 [f4,a4] ~@3 a4@5 ~@2 g4@2 ~@2 [a4,c5]@2 ~@2 [g4,bb4]@4 [f4,a4]@6 ~@23, ~@15 f4@6 ~@2 bb4 ~@40]/2", // F Am Gm F
  AI: "[~@11 [f4,a4] ~@3 [f4,a4]@5 ~@3 [g4,bb4]@2 ~@2 a4@2 ~@2 [a4,c5]@5 ~@3 a4@5 ~@3 g4@5 ~@2 [f4,a4]@6 ~@4, ~@26 f4@2 ~@10 c5@5 ~@3 bb4@5 ~@13]/2", // F Gm Am F
  AJ: "[~@10 [f4,a4] ~@3 [f4,a4]@5 ~@3 [g4,bb4]@2 ~@2 [a4,c5]@2 ~@2 [g4,bb4]@3 [f4,a4]@6 ~@25]/2", // F Gm Am Gm F
  AK: "[~@9 f4 a4 ~@2 [f4,a4]@5 ~@3 [g4,bb4]@2 ~@2 [f4,a4]@2 ~@2 [a4,c5]@13 ~@3 [a4,c5]@5 ~@3 [g4,bb4]@5 ~@3 [f4,a4]@5 ~@30]/3", // F Gm F Am Gm F
  AL: "[~@19 f4 ~@3 f4@2 ~@2 ab4@2 ~@2 f4@2 ~@2 f4@7 ~@22]/2",
})).s("gm_tenor_sax").gain(0.62)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@2 C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU
  AV E@2 AW AX@2 AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW@2 BX BY BZ CA ~
>`.pickRestart({
  A: "~@23 x ~@3 x ~@4", B: "~@11 x ~@15 x ~@4", C: "~@5 x ~@7 x ~@2", D: "~@5 x ~@2 x ~@2 x ~ x ~@2",
  E: "~@3 x ~ x ~@5 x ~ x ~@2", F: "~@9 x ~@11 x ~@3 x ~@6", G: "~@5 x ~@3 x ~@22", H: "~@25 x ~@6", I: "~ x!2 ~@2 x!3",
  J: "~ x!3 ~ x!2 ~", K: "~@4 x ~@3 x ~@11 x ~@3 x ~@2 x ~@4", L: "~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@8",
  M: "~@3 x ~@3 x ~@11 x ~@3 x ~@3 x ~@4", N: "~@3 x ~@3 x ~@3 x ~@5 x ~ x!2 ~@2 x ~@8", O: "~ x ~ x ~@5 x ~ x ~ x ~@2",
  P: "~ x ~ x ~ x ~@3 x ~ x ~@4", Q: "~@2 x ~@3 x ~@10 x ~@3 x ~@3 x ~@6", R: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@10",
  S: "~ x ~@3 x ~@11 x ~@3 x ~@3 x ~@6", T: "~ x ~@3 x ~@3 x ~@10 x ~@11", U: "~@2 x ~@7 x ~@2 x ~@2",
  V: "~@2 x ~@2 x ~@2 x ~ x ~@5", W: "~@4 x ~@2 x ~@11 x ~@5 x ~@6", X: "~@3 x ~@5 x ~@5 x ~@3 x ~@12",
  Y: "~@3 x ~@3 x ~@11 x ~@5 x ~@6", Z: "~ x ~@2 x ~@2 x ~ x ~@6", AA: "~ x ~ x ~@5 x ~@6", AB: "~@18 x ~@10 x ~@2",
  AC: "~ x ~@11 x ~@3 x ~@3 x ~@7 x ~@2", AD: "~ x ~@3 x ~@7 x ~@3 x ~@11 x ~@2",
  AE: "~ x ~@11 x ~@3 x ~@3 x ~@6 x ~@3", AF: "x!2 ~ x!2 ~@2 x", AG: "x ~@2 x!3 ~ x",
  AH: "x ~@3 x ~@5 x ~ x!2 ~@2 x ~@10 x ~@3 x", AI: "~@11 x ~@3 x ~@3 x ~@7 x ~@3 x",
  AJ: "~@3 x ~@7 x ~@3 x ~@11 x ~@3 x", AK: "~@11 x ~@2 x ~@3 x ~@7 x ~@3 x ~", AL: "~ x ~@3 x ~ x ~@5 x ~ x",
  AM: "~@5 x ~ x ~ x ~@3 x ~ x", AN: "~@2 x ~@10 x ~@15 x ~@2", AO: "~@13 x ~@5 x ~@9 x ~@2",
  AP: "~@3 x ~@5 x ~@3 x ~@15 x ~@2", AQ: "~ x ~@10 x ~@5 x ~@9 x ~@3", AR: "~ x ~@2 x ~ x ~@7 x ~",
  AS: "x ~@5 x ~@2 x ~@4 x ~", AT: "~ x ~@5 x ~@3 x ~@15 x ~@3 x", AU: "~@11 x ~@20", AV: "~@11 x ~@10 x ~@3 x ~@5",
  AW: "~@6 x ~@3 x ~@10 x ~@3 x ~@6", AX: "~@5 x ~@3 x ~@11 x ~@3 x ~@6", AY: "~@5 x ~@3 x ~@10 x ~@3 x ~@7",
  AZ: "~ x!2 ~@5", BA: "~@2 x ~@2 x!2 ~", BB: "~@4 x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@4",
  BC: "~@3 x ~@3 x ~@11 x ~@3 x ~@8", BD: "~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@4", BE: "~@2 x ~@4 x ~@10 x ~@3 x ~@9",
  BF: "~ x ~ x ~ x ~@3 x ~ x ~ x ~@2", BG: "x!4 ~@5 x ~ x ~@4", BH: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@6",
  BI: "~ x ~@3 x ~@11 x ~@3 x ~@10", BJ: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@2 x ~@7", BK: "x!2 ~@2 x!2 ~@2",
  BL: "x!3 ~ x!3 ~", BM: "~@4 x ~@14 x ~@12", BN: "~@3 x ~@5 x ~@9 x ~@5 x ~@5 x", BO: "~@3 x ~@15 x ~@3 x ~@8",
  BP: "~@3 x ~@5 x ~@8 x ~@5 x ~@5 x ~", BQ: "~ x ~@7 x ~ x ~@4", BR: "~ x ~@2 x ~@4 x ~@2 x ~@2 x",
  BS: "~@2 x ~@14 x ~@3 x ~@10", BT: "~ x ~@30", BU: "~ x ~@11 x ~@3 x ~@11 x ~@2", BV: "~ x ~@10 x ~@3 x ~@11 x ~@3",
  BW: "x ~@2 x!2 ~@2 x", BX: "x ~@10 x ~@3 x ~@11 x ~@3 x", BY: "~@11 x ~@3 x ~@11 x ~@3 x",
  BZ: "~@11 x ~@3 x ~@10 x ~@3 x ~", CA: "~@13 x ~ x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@2 B C@2 D E F G@2 H I@2 J K@2 L M@2 N@3 O@3 P Q R S@2 T U@2 V W@2 X Y@2 Z AA@2 AB@3 A AC AD C@3 E@2 AE AF AG AH
  I@2 K@2 L M@2 AI N@2 AJ O@2 AK P@2 S ~ S U@3 W@3 AL ~
>`.pickRestart({
  A: "~@3 x ~@15 x ~@12", B: "~@3 x ~@14 x ~@13", C: "~ x ~@7 x ~@6", D: "~@2 x ~@14 x ~@14", E: "~ x ~@15 x ~@14",
  F: "~@9 x ~ x ~ x ~ x ~ x ~@3 x ~@10", G: "x!2", H: "x ~@15 x ~@14 x", I: "~@15 x ~@15 x", J: "~@15 x ~@14 x ~",
  K: "~@7 x ~@7 x", L: "~@14 x ~@14 x ~@2", M: "~@13 x ~@15 x ~@2", N: "~@3 x ~@3 x", O: "~@11 x ~@15 x ~@4",
  P: "~@5 x ~@7 x ~@2", Q: "~@5 x ~@10", R: "~@13 x ~@2", S: "~@9 x ~@15 x ~@6", T: "~@9 x ~@14 x ~@7", U: "~ x ~ x",
  V: "~@8 x ~@14 x ~@8", W: "~@7 x ~@15 x ~@8", X: "~@7 x ~@14 x ~@9", Y: "~@3 x ~@7 x ~@4", Z: "~@6 x ~@14 x ~@10",
  AA: "~@5 x ~@15 x ~@10", AB: "~ x ~@3 x ~@2", AC: "~@3 x ~@28", AD: "~@19 x ~@12", AE: "~ x ~@14 x ~@15", AF: "x",
  AG: "~ x", AH: "x ~@14 x ~@15 x", AI: "~@13 x ~@14 x ~@3", AJ: "~@12 x ~@14 x ~@4", AK: "~@11 x ~@14 x ~@5",
  AL: "~@13 x ~ x",
})).gain(0.5)

// drums · low tom
// … 81 more lines

More by Gary Wright