Strudelify

Never Too Much

Luther Vandross

KeyB minorTempo114 bpm
0:00/0:00
// Never Too Much — Luther Vandross
// 114 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 37, 4/4 at bar 37, 3/4 at bar 54, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(114/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@2 ~ B@2 C@4 D@4 E@5 F@2 G@2 H@2 G@2 F@2 G@2 F@2 I@2 J@4 K@4 J@4 K@4 ~ L M@8 N@4 O@4 N@8 P@3 Q R@3 Q S@3 Q R@3 Q T@2
  ~@5 Q S@3 Q R@3 Q U V W@3 ~
>`.pickRestart({
  A: "[~@21 [g3,b3,d4]@6 ~@3 [f#3,a#3,c#4]@6 ~@3 [g3,b3,d4]@6 ~@2 [g#3,c4,d#4]@5 ~@2 [a3,c#4,e4]@3 ~@7]/2", // G F# G G# A
  B: "[~@3 [g3,b3,d4,f#4]@5]/2", // Gmaj7
  C: "[~@11 [g3,b3,d4]@7 ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@64 ~ [g3,b3,d4,f#4]@33 ~@2 [d3,g3,b3,d4]@3]/4", // G A Gmaj7 G
  D: "[~@13 [g3,b3,d4]@7 ~ [g#3,c4,d#4]@5 ~@2 [a3,c#4,e4]@62 ~@3 [g3,b3,d4,f#4]@35]/4", // G G# A Gmaj7
  E: "[~@16 [g3,b3,d4]@7 ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@64 ~ [g3,b3,d4,f#4]@48 ~@3 [g3,b3,d4]@7 ~ [g3,b3,d4]@5 ~]/5", // G A Gmaj7 G
  F: "[[a3,c#4,e4]@63 ~]/2", G: "[[g3,b3,d4,f#4]@47 ~@3 [g3,b3,d4]@7 ~ [g3,b3,d4]@5 ~]/2", H: "[[a3,c#4,e4]@61 ~@3]/2",
  I: "[[g3,b3,d4,f#4]@47 ~@3 [g3,b3,d4]@14]/2", // Gmaj7 G
  J: "[~@2 [b3,d4,f#4]@5 ~ [g3,b3,d4]@5 ~ [e3,g3,b3]@51 ~@17 [g3,b3,d4]@31 ~ [a3,c#4,e4]@14]/4", // Bm G Em G A
  K: "[~@2 [b3,d4,f#4]@5 ~ [g3,b3,d4]@5 ~ [e3,g3,b3]@51 ~@17 [g3,b3,d4]@31 ~ [a3,c#4,e4]@2 ~@12]/4", // Bm G Em G A
  L: "~@3 [g3,b3,d4]@15 ~ [f#3,a#3,c#4]@7 ~ [g3,b3,d4]@5", // G F# G
  M: "[~@3 [g#3,c4,d#4]@5 ~ [a3,c#4,e4]@60 ~@6 [g3,b3,d4,f#4]@50 [g3,b3,d4]@7 ~@2 [g3,b3,d4]@5 ~ [a3,c#4,e4]@64 ~ [g3,b3,d4,f#4]@50 ~]/8", // G# A Gmaj7 G A Gmaj7
  N: "[[g3,b3,d4]@7 ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@63 ~ [g3,b3,d4,f#4]@47 ~@3]/4", // G A Gmaj7
  O: "[[g3,b3,d4]@7 ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@61 ~@3 [g3,b3,d4,f#4]@47 ~@3]/4", // G A Gmaj7
  P: "[[g3,b3,d4]@15 ~ [b3,d4,f#4]@5 ~ [g3,b3,d4]@5 ~ [e3,g3,b3]@51 ~@17]/3", Q: "[g3,b3,d4]@31 ~",
  R: "[[a3,c#4,e4]@15 ~ [b3,d4,f#4]@5 ~ [g3,b3,d4]@5 ~ [e3,g3,b3]@51 ~@17]/3", // A Bm G Em
  S: "[[a3,c#4,e4]@2 ~@14 [b3,d4,f#4]@5 ~ [g3,b3,d4]@5 ~ [e3,g3,b3]@51 ~@17]/3", // A Bm G Em
  T: "[[a3,c#4,e4,a4]@2 ~@14 [b3,d4,f#4]@5 ~ [g3,b3,d4]@5 ~ [e3,g3,b3]@35 ~]/2", U: "[a3,c#4,e4] ~@15",
  V: "~@16 [g3,b3,d4]@15 ~", // G
  W: "[[f#3,a#3,c#4]@7 ~ [g3,b3,d4]@7 ~ [b3,d4,g4]@7 ~ [b3,d4,g4]@5 ~ [b3,d4,f#4]@46 ~@20]/3", // F# G Bm
})).s("gm_piano").gain(0.35)

// bass · electric bass finger
const bass = note(`<
  A@2 B C D@3 E@7 F@3 G H@16 I J K L M J K L M J K L M J N O ~ P@2 Q R S T U@3 V W@15 X Y Z AA AB Y Z AA AB Y Z AA AB Y
  Z AA AB AC@2 AD AE AC@2 AD AF Y Z AA AB Y Z AG AH AI AJ@3 ~
>`.pickRestart({
  A: "[~@21 a1@9 g#1@9 a1@8 a#1@6 ~ b1@2 ~@2 b1@2 b1@2 ~@2]/2",
  B: "b1@2 ~@3 a1@2 ~@2 b1@2 ~@4 b1@2 ~@4 a1@2 ~@4 b1@2 b1@2 ~", C: "~ b1 ~ a1 ~ b1 ~@2 b1 ~ b1 f#2 ~@2 b1!2",
  D: "[~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@5 b1@2 ~@4 a1@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@4 b1@2 b1@2 b1@2 f#2@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@3 a1@2 ~@2 b1@2 ~@4 b1@2 ~@4 a1@2 ~@4 b1@2]/3",
  E: "[b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@4 b1@2 ~@2 b1@2 f#2@2 ~@5 b1@2 b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@4 b1@2 ~@4 a1@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@4 b1@2 b1@2 ~ b1@2 f#2@2 ~@2 b1@65 g1@32 a1@16 ~ a1@8 a1@8]/7",
  F: "[b1@65 g1@31]/3", G: "~ a1@8 a1@4 a1@3", H: "~ b1 ~@3 b1 ~@2 b1!2 ~ f#2@3 a1@2",
  I: "~ b1@2 ~ f#2@3 d2@2 ~ b1@3 b1 ~ d2", J: "~ e2 ~@2 f#2 ~@2 e2 ~@2 b1@3 b1 ~ d2",
  K: "~ e2 ~@2 f#2 ~@2 g2 ~@2 g1@3 b1 ~ d2", L: "~ e2 ~@2 f#2 ~@2 e2 ~@2 a1@3 a1 ~ b1",
  M: "~ d2 ~@2 d2 e2 d2 b1 ~@2 b1@3 b1 ~ d2", N: "~ e2 ~@2 f#2 ~@2 g2 ~@2 g1@3 g1 ~ b1",
  O: "~ d2 ~@2 e2 ~@2 e2 ~ a1 ~@6",
  P: "[~@3 a1@16 g#1@8 a1@8 a#1@6 b1@2 ~@2 b1@2 ~ b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@2]/2",
  Q: "~ b1 ~@2 a1 ~@2 b1!2 ~ b1 ~ a1 ~ b1 ~", R: "~@2 b1@2 ~@2 b1@2 ~ f#2@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~",
  S: "~@3 b1@2 ~@4 a1@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~", T: "~@2 b1!3 f#2 ~@2 b1!2 ~ b1 ~ a1 ~ b1",
  U: "[~@4 b1@2 ~@4 a1@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@3 a1@2 ~@2 b1@2 ~@4 b1@2 ~@2 b1@2 f#2@2 ~@4 b1@2 b1@2 ~@2 b1@2 ~@2 a1@2 ~@2 b1@2 ~@4 b1@2 ~@4 a1@2 ~@4 b1@2 ~ b1@2 ~@2 b1@2 ~@2 a1@2 ~@2]/3",
  V: "b1 ~@2 b1!3 f#2 ~ b1 ~@3 b1 ~@2 b1", W: "b1 ~ f#2@3 a1@3 b1 ~@3 b1 ~@2 b1",
  X: "b1 ~ f#2@3 a1@3 b1@2 ~ f#2@3 d2@2", Y: "~ b1@3 b1 ~ d2 ~ e2 ~@2 f#2 ~@2 e2 ~",
  Z: "~ b1@3 b1 ~ d2 ~ e2 ~@2 f#2 ~@2 g2 ~", AA: "~ g1@3 b1 ~ d2 ~ e2 ~@2 f#2 ~@2 e2 ~",
  AB: "~ a1@3 a1 ~ b1 ~ d2 ~@2 d2 e2 d2 b1 ~", AC: "b1/2", AD: "g1", AE: "a1", AF: "a1@2 a1!2",
  AG: "~ g1@3 g1 ~ b1 ~ d2 ~@2 e2 ~@2 e2 ~", AH: "a1 ~@15", AI: "~ a1", AJ: "[g#1@4 a1@3 ~ a1@4 d#2@3 d2@33]/3",
})).s("gm_electric_bass_finger").gain(0.45)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C D E F G H ~ I J K ~ L M N ~@5 O P O Q O R O P O S O T U@4 V@4 W@4 V@4 ~@2 X Y Z AA AB AC AD AE ~@4 AF AG AH AG
  AI AG AJ AG AH AK AJ AL AM@3 AN AO@3 AP AQ@3 AN AO@3 AP AR@3 ~@4 AP AQ@3 AN AO@3 AP ~@6
>`.pickRestart({
  A: "~@28 [a4,d5] ~@3", B: "[b4,e5] ~@10 [a4,d5] ~@3 [b4,e5] ~@16",
  C: "~@2 a3 ~ a3 ~@5 a3 ~ a3 ~@5 a3 ~ a3 ~@9 [a4,d5] ~", D: "~@2 [b4,e5] ~@10 [a4,d5] ~@3 [b4,e5] ~@14",
  E: "~@31 [a4,d5]", F: "~@3 [b4,e5] ~@10 [a4,d5] ~@3 [b4,e5] ~@9 [d4,f#4] ~ [d4,f#4] ~",
  G: "b3 ~@3 [d4,f#4] ~@3 e4 ~@3 [d4,f#4] ~ [c#4,e4] ~@3 [d4,f#4] ~@13", // D C#m D
  H: "~ [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5] ~@3 [b4,e5] ~@12", I: "~@2 [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5] ~@3 [b4,e5] ~@11",
  J: "~@6 a3 ~ a3 ~@5 a3 ~@2 a3 ~@5 a3 ~ a3 ~@6", K: "~@3 [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5] ~@3 [b4,e5] ~@10",
  L: "~@4 [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5] ~@3 [b4,e5] ~@9", // D5 E5 D5 E5
  M: "[d4,f#4] ~@2 [d4,f#4] ~ b3 ~@3 [d4,f#4] ~@3 e4 ~@3 [d4,f#4] ~ [c#4,e4] ~@3 [d4,f#4] ~@8", // D C#m D
  N: "~@5 [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5] ~@3 [b4,e5] ~@8", O: "~@10 a3 ~ a3 ~@5 a3 ~ a3 ~@5 a3 ~ a3 ~@3",
  P: "~@6 a3 ~@3 a3 ~ a3 ~@5 a3 ~@3 a3 ~@3 a3 ~@3 a3 ~", Q: "~@6 a3 ~@3 a3 ~ a3 ~@5 a3 ~@3 a3 ~@3 a3 ~ a3 ~@3",
  R: "~@6 a3 ~@3 a3 ~ a3 ~@5 a3 ~@3 a3 ~@3 a3 ~@5", S: "~@6 a3 ~@3 a3 ~ a3 ~@3 a3 ~ a3 ~@3 a3 ~@3 a3 ~@5",
  T: "~@10 a3 ~@7 a3 ~ a3 ~@5 a3 ~@5",
  U: "[~@2 f#4@6 d4@6 e4@66 ~ c4 [d4,b4]@30 ~ d4 [e4,c#5]@14, ~@82 c#4 ~@31 d#4 ~@13]/4", // G C#m
  V: "[~@2 f#4@6 d4@6 e4@62 ~@5 c4 [d4,b4]@32 ~@14, ~@82 c#4 ~@45]/4", // G
  W: "[~@2 f#4@6 d4@6 e4@64 ~@3 c4 [d4,b4]@30 ~ d4 [e4,c#5]@14, ~@82 c#4 ~@31 d#4 ~@13]/4", // G C#m
  X: "~@16 [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5] ~", Y: "~@2 [b4,e5] ~@17 a3 ~ a3 ~@5 a3 ~ a3 ~",
  Z: "~@4 a3 ~ a3 ~@10 [a4,d5] ~@3 [b4,e5] ~@9 [a4,d5]", AA: "~@3 [b4,e5] ~@28", AB: "~@18 [a4,d5] ~@3 [b4,e5] ~@9",
  AC: "[a4,d5] ~@3 [b4,e5] ~@9 [d4,f#4] ~ [d4,f#4] ~ b3 ~@3 [d4,f#4] ~@4 e4 ~@3 [d4,f#4]", // D5 E5 D
  AD: "~ [c#4,e4] ~@3 [d4,f#4] ~@13 [a4,d5] ~@3 [b4,e5] ~@8", AE: "~ [a4,d5] ~@3 [b4,e5] ~@26", AF: "~@24 a3 ~ a3 ~@5",
  AG: "a3 ~ a3 ~@5 a3 ~ a3 ~@9 a3 ~@3 a3 ~ a3 ~@5", AH: "a3 ~@3 a3 ~@3 a3 ~@3 a3 ~@11 a3 ~ a3 ~@5",
  AI: "a3 ~@3 a3 ~@3 a3 ~ a3 ~@13 a3 ~ a3 ~@5", AJ: "a3 ~@3 a3 ~@3 a3 ~@15 a3 ~ a3 ~@5",
  AK: "a3 ~ a3 ~@5 a3 ~ a3 ~@9 a3 ~@3 a3 ~ a3 ~@3 a3 ~", AL: "a3 ~ a3 ~@5 a3 ~ a3 ~@13 a3 ~@7",
  AM: "[a3 ~ a3 ~@5 a3 ~@7 f#4@6 d4@6 e4@66 ~ [c4,c#4]]/3", AN: "[d4,b4]@30 ~ [d4,d#4]",
  AO: "[[e4,c#5]@16 f#4@6 d4@6 e4@62 ~@5 [c4,c#4]]/3", AP: "[d4,b4]", AQ: "[~@16 f#4@6 d4@6 e4@64 ~@3 [c4,c#4]]/3",
  AR: "[~@8 f#4@3 d4@3 e4@32 ~@2]/3",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.2)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@36 A ~@3 A ~@3 A ~@3 A ~@29 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@7
>`.pickRestart({
  A: "~ e3 ~@2 f#3 ~@2 g3 ~@8", B: "~@8 e3 ~@2 f#3 ~@2 g3 ~",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.9)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@9 A@5 B@2 C@2 ~@8 D@4 E@4 F@4 G@4 H@4 I@4 ~@2 J@4 K@5 ~@7 L@4 M@4 N O P Q R S@2 Q T O P U V W@2 U X ~@8 O P U V S@2
  Y Z AA AB@4
>`.pickRestart({
  A: "[~@30 [c#4,e4,a4]@61 ~@4 [d4,f#4,a4]@49 ~@16]/5", B: "[[c#4,e4,a4]@59 ~@5]/2", C: "[~ [d4,f#4,a4]@51 ~@12]/2",
  D: "[~@25 e5@7 d5@23 ~@9, ~@5 a4@50 ~@9]/4",
  E: "[~@50 e5@14 d5@30 e5@4 f#5@15 ~ g4 ~ a4 b4 c#5 ~ d5 e5 f#5@2 e5@2 g5@2, ~@10 a4@101 ~@17]/4",
  F: "[f#5@2 a5@2 b5 ~@25 b4@4 f#5@5 ~ g5@5 a5@5 a5@6 b5@6 e5@20 [g4,b4,d5]@31 ~ [e4,a4,c#5]@14]/4", // G A
  G: "[~@18 [g4,e5]@64 [g4,b4,d5]@31 ~ [e4,a4,c#5]@2 ~@6 [f#5,f#6]@2 ~@4]/4", // C G A F#
  H: "[~@2 [d5,d6]@2 ~@4 [b4,b5]@2 ~@4 [g4,g5]@3 ~@13 b4@4 f#5@5 ~ g5@5 a5@5 a5@6 b5@6 e5@20 [g4,b4,d5]@32 [e4,a4,c#5]@14]/4", // D B G A
  I: "[~@9 [g4,e5]@31 ~ [g4,b4,d5]@14 g6 f#6 a6 ~@6]/4", J: "[~@11 [c#4,e4,a4]@61 ~@5 [d4,f#4,a4]@49 ~@2]/4",
  K: "[~@14 [c#4,e4,a4]@61 ~@4 [d4,f#4,a4]@53 ~@28]/5", L: "[~@32 e5@7 d5@23 ~@2, ~@6 a4@25 ~]/4",
  M: "[~@64 e5@14 d5@30 e5@4 f#5@15 ~, ~@24 a4@101 ~@3]/4",
  N: "g4 a4 ~ b4 c#5 d5 ~ e5 f#5@2 e5@2 g5@2 f#5@2 a5@2 b5 ~@13", O: "~@12 b4@4 f#5@5 g5@5 ~ a5@5",
  P: "a5@3 b5@3 e5@10", Q: "[g4,b4,d5]@31 ~", R: "[e4,a4,c#5]@15 ~@17", S: "[g4,e5]/2",
  T: "[e4,a4,c#5]@2 ~@6 [f#5,f#6]@2 ~@6 [d5,d6]@2 ~@4 [b4,b5]@2 ~@4 [g4,g5]@3 ~", U: "[g4,b4,d5]", V: "[e4,a4,c#5] ~",
  W: "[[g4,e5]@31 ~]/2", X: "[e4,a4,c#5] ~@15", Y: "~@8 a5 b5 c#6 d6 e6 f#6 g6 f#6", Z: "a6 ~@15", AA: "~ a5",
  AB: "[g#5@8 a5@8 b5@6 ~@2 b5@6 a5@67 ~@31]/4",
})).s("gm_string_ensemble_1").gain(0.3)

// other · piccolo
const piccolo = note(`<
  ~@34 A B@2 ~ C D E ~ A B@2 ~ C D F ~@28 G@2 ~@2 H I ~@2 G@2 ~@2 J K ~@10 L@2 ~@2 J K ~@7
>`.pickRestart({
  A: "~@10 b5 a5 ~ f#5 a5 ~", B: "[b4@11 ~@5]/2", C: "~@9 b5 a5 ~@2 f#5 a5 ~", D: "b4!32", E: "b4!5 ~ b4 ~@25",
  F: "b4!7 ~@25", G: "[~ b5 a5 ~ f#5 a5 ~ b4@22 ~@3]/2", H: "b5@2 a5@2 ~@4 f#5@2 a5@2 ~@2 b4!18", I: "b4!21 ~@11",
  J: "~@28 b4@2 e5 f5", K: "f#5@5 g5@5 ~ a5@3 [f#5,g5] [c#5,d5,e5] b4@13 ~@3", L: "[~ b5 a5 ~ f#5@2 a5 b4@19 ~@6]/2",
})).s("gm_piccolo").gain(0.3).pan(0.7)

// chords · brass section
const brass_section = note(`<
  A@2 ~@3 B ~@3 C ~@3 D ~@3 E F ~@18 G@2 ~@2 H ~@3 G@2 ~@2 H ~ I J ~@2 K@2 ~@3 L ~@18 M N ~@2 M O ~@2 M N ~@2 M O ~@10 M
  N ~@3 O P Q@3 ~
>`.pickRestart({
  A: "[~@21 [a4,a5]@8 ~ [g#4,g#5]@8 ~ [a4,a5]@8 [a#4,a#5]@6 ~ [b4,b5]@2 ~@8]/2", // A G# A A# B
  B: "~@11 [e4,e5]@7 ~ [a4,a5]@5 ~ [b4,b5]@2 ~@5", C: "~@13 [a4,a5]@7 ~ [a#4,a#5]@5 ~@2 [b4,b5]@2 ~@2",
  D: "~@16 [e4,e5]@7 ~ [a4,a5]@5 ~ [b4,b5]@2", E: "~@18 [e4,e5]@7 ~ [a4,a5]@5 ~", F: "[b4,b5] ~@15",
  G: "[~@2 [g4,b4,d5]@16 [e4,a4,c#5]@21 ~@25]/2", H: "~ [g4,b4,d5]@8 [e4,a4,c#5] ~@6",
  I: "~@3 [a4,a5]@16 [g#4,g#5]@7 ~ [a4,a5]@5", J: "~@3 [a#4,a#5]@5 ~ [b4,b5]@2 ~@21",
  K: "[~@29 [e4,e5]@7 ~@2 [a4,a5]@5 ~ [b4,b5]@2 ~@18]/2", L: "[e4,e5]@7 ~ [a4,a5]@5 ~ [b4,b5]@2 ~@16",
  M: "~ [g4,b4,d5]", N: "[e4,a4,c#5]@21 ~@11", O: "[e4,a4,c#5] ~@15", P: "~@16 [a4,a5]@15 ~",
  Q: "[[g#4,g#5]@7 ~ [a4,a5]@7 ~ [b4,b5]@7 ~ [b4,b5]@5 ~ [d4,f#4,a4,a5]@66]/3", // G# A B D
})).s("gm_brass_section").gain(0.59)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H I J K L M N O P Q R S T S T S T S R S T S T S T S R U V W V W V W V X V W V W V W V Y Z AA AB AC AD AE
  AF AG AH AI AJ AK AJ AK AJ AK AJ AI AJ AK AJ AK AJ AK AJ AL O AM O AM O AM O AN O AM O AM O AM O AN O AM O AM O AM O
  AN O AM O AM O AM O AN AO AP ~@3
>`.pickRestart({
  A: "~@21 x ~@8 x ~", B: "~@7 x ~@7 x ~@8 x ~@7", C: "x ~@6 x ~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@2",
  D: "~ x ~@2 x!2 ~ x ~ x!2 ~@2 x ~@2", E: "~@2 x ~@5 x ~ x ~@4 x ~@3 x ~@7 x ~@3 x",
  F: "~@3 x ~@5 x ~ x ~@3 x ~@3 x ~ x ~@5 x ~@4", G: "~@3 x ~@6 x ~ x ~@3 x ~@3 x ~@7 x ~@3",
  H: "x ~ x ~@2 x!2 ~ x ~ x!2 ~@2 x ~", I: "~@5 x ~@5 x ~ x ~@3 x ~@3 x ~@7 x ~@2",
  J: "~ x ~@3 x ~@5 x ~ x ~@3 x ~@3 x ~@2 x ~ x ~@3 x ~", K: "~@3 x ~@2 x!2 ~ x ~ x ~@3 x",
  L: "~@2 x ~@3 x ~@5 x ~ x ~@4 x ~@3 x ~ x ~@5 x", M: "~@7 x ~@5 x ~ x ~@3 x ~@3 x ~@7 x",
  N: "~@3 x ~@3 x ~@6 x ~ x ~@3 x ~@3 x ~ x ~@5", O: "x ~@3 x ~@2 x!2 ~ x ~ x ~@3",
  P: "x ~@4 x ~@3 x ~@5 x ~ x ~@3 x ~@3 x ~ x ~@4", Q: "~ x ~@7 x ~@5 x ~ x ~@3 x ~@3 x ~@6",
  R: "~ x ~ x ~ x ~@2 x!2 ~ x ~ x!3", S: "~ x ~@3 x ~@2 x!2 ~ x ~ x ~@2", T: "~ x ~ x ~ x ~@2 x!2 ~ x ~ x!2 ~",
  U: "~ x ~@7 x ~@3 x ~@2", V: "x!2 ~ x ~ x ~@3 x ~ x ~ x ~@2", W: "x!2 ~ x ~ x!2 ~@2 x ~@3 x ~@2",
  X: "x!2 ~ x ~ x!3 ~ x ~@3 x ~@2", Y: "x ~ x ~@3 x ~@3 x ~ x ~ x ~@3 x ~@8 x ~@4", Z: "~@3 x ~@7 x ~@7 x ~@7 x ~@4",
  AA: "~@3 x ~@7 x ~@8 x ~@5 x ~ x ~@3", AB: "x ~ x ~@3 x ~ x ~ x ~@2 x!2 ~",
  AC: "x ~@3 x ~ x ~@6 x ~@7 x ~@5 x ~ x ~@2", AD: "~ x ~@3 x ~@7 x ~@3 x ~@3 x ~@5 x ~ x ~@2",
  AE: "~ x ~ x!2 ~@2 x ~@3 x ~@2 x!2", AF: "~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@6 x ~ x",
  AG: "~@3 x ~@3 x ~ x ~@5 x ~@7 x ~@5 x ~ x", AH: "~@3 x ~@3 x ~@7 x ~@4 x ~@3 x ~@5 x ~",
  AI: "x ~ x ~ x!3 ~ x ~@3 x ~@2 x", AJ: "x ~ x ~ x ~@3 x ~ x ~ x ~@2 x", AK: "x ~ x ~ x!2 ~@2 x ~@3 x ~@2 x",
  AL: "x ~ x ~ x!3 ~ x ~@7", AM: "x ~ x ~ x ~@2 x!2 ~ x ~ x!2 ~@2", AN: "x ~ x ~ x ~@2 x!2 ~ x ~ x!3 ~", AO: "x!4",
  AP: "x ~@3 x ~@3 x ~@3 x ~@2 x",
})).gain(0.35)

// drums · rim
const rim = s("rim").struct(`<
  ~@2 A B C D E F G@2 H I J K L M@2 N@17 O P@14 Q ~@2 R S T U V W X Y Z@16 AA L@31 ~@6
>`.pickRestart({
  A: "x ~@6 x ~@9 x ~@14", B: "~ x ~@2 x ~@4 x ~@6", C: "~@2 x ~@5 x ~@10 x ~@12", D: "~@3 x ~@5 x ~@9 x ~@12",
  E: "~@3 x ~@6 x ~@9 x ~@11", F: "~@2 x ~@2 x ~@4 x ~@5", G: "~@5 x ~@5 x ~@9 x ~@10", H: "~@3 x ~@2 x ~@4 x ~@4",
  I: "~@6 x ~@5 x ~@10 x ~@8", J: "~@7 x ~@5 x ~@9 x ~@8", K: "~@7 x ~@6 x ~@9 x ~@7", L: "~@4 x ~@2 x ~@4 x ~@3",
  M: "~@9 x ~@5 x ~@9 x ~@6", N: "~@5 x ~@2 x ~@4 x ~@2", O: "~@2 x ~@4 x ~@5 x ~@2", P: "x ~@4 x ~@7 x ~@2",
  Q: "x ~@4 x ~@10", R: "~@10 x ~@2 x ~@2", S: "~@2 x ~@7 x ~@2 x ~@2", T: "~@4 x ~@16 x ~@5 x ~@4",
  U: "~@5 x ~@15 x ~@5 x ~@4", V: "~@3 x ~@7 x ~@2 x ~", W: "~@6 x ~@15 x ~@6 x ~@2", X: "~@7 x ~@15 x ~@5 x ~@2",
  Y: "~@7 x ~@16 x ~@5 x ~", Z: "~@4 x ~@7 x ~@2 x", AA: "~@4 x ~@4 x ~@4 x ~",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B ~@7 C D ~@6 C D ~@7 E ~@15 F G H ~@6 I J ~@6 K J ~@7 K ~@7 L ~@7 M ~@7 M ~@8 M N ~@3
>`.pickRestart({
  A: "~@29 x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@3", C: "~ x!15", D: "x",
  E: "~ x!8 ~@7", F: "~@18 x ~ x ~@2 x ~ x ~ x ~ x ~ x",
  G: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", H: "~ x ~ x ~ x ~ x ~ x ~@22",
  I: "~@15 x ~ x ~@2 x ~ x ~ x ~ x ~ x ~ x ~", J: "x!8 ~@8", K: "~@8 x!8", L: "x!6 ~ x!3 ~@4 x!2", M: "x!16",
  N: "x ~@3 x ~@3 x ~@3 x!4",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct(`<
  ~@2 A B C D E F G@2 H I J K L M@2 N@17 O P@14 Q ~@2 R S T U V W X Y Z@16 AA L@31 ~@6
// … 100 more lines

More by Luther Vandross