Strudelify

What's Goin' On

Marvin Gaye

KeyE majorTempo102 bpm
0:00/0:00
// What's Goin' On — Gaye,Marvin
// 102 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 7 "VIBRAPHONE" vibraphone (copy of ch 3 "E.PIANO 2" epiano2)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D A B E F G H I J K L M N A B E F G H I J K L M N O P O P O P Q R S T U V W X U V W X Y Z AA AB A B E F G H I J
  K L M N O P O P O P Q R S T U V W X U V W X Y Z AA AB U V W X U V W X Y Z AA AB AC@2 ~@6
>`.pickRestart({
  A: "e1@6 ~ b1 b1@2 c#2@2 b1@2 c#2@2", B: "e1@6 ~ b1 b1@2 c#2@2 e2@2 c#2@2", C: "e1@6 ~ b1!2 ~ c#2@2 b1@2 c#2@2",
  D: "e1@6 ~ b1!2 ~ c#2@2 e2 ~ c#2 ~", E: "c#2@7 g#1 c#2 ~ c#2@2 g#1 g#2@2 g#1",
  F: "c#2@7 g#1 c#2 ~ c#2 ~ g#2 c#2 g#1 ~", G: "e2@6 ~ b1 e2 ~ c#2@2 ~ b1 c#2@2",
  H: "e1@5 ~ b1 c#2 ~ b1 [e2,f#2] ~ e2@2 b1@2", I: "c#3@7 g#2 c#3 ~ c#3@2 ~ g#2 c#3 g#2",
  J: "c#2@7 g#1 c#2 ~ c#2@2 ~ b1@2 ~", K: "f#1@6 ~ f#2 f#1 ~ f#1@2 ~ f#1 c#2@2", L: "f#1@7 f#2 f#1 ~ f#1@2 ~ f#1 c#2@2",
  M: "b1@7 f#2 b1 ~ b1@2 ~ f#1@2 ~", N: "b1@6 b1 e2@2 ~ d#2@2 c#2@2 b1 ~",
  O: "f#1@2 ~ f#1 f#2@3 f#1 a1@2 ~ a1 c#2@3 c#2", P: "b1!2 ~ b1 a1@2 ~ a1 g#1@2 ~ g#1!2 a1 g#1 ~",
  Q: "e2@3 b1 e2@2 b1 e2 ~ e2 ~ b1 e2@2 b1 ~", R: "c#2@3 g#1 c#2@2 g#1 c#2 ~ c#2 ~ g#1 c#2@2 d#2 ~",
  S: "e2@3 b1 e2@2 e1 e2 ~ e2 ~ b1 e2 e1 e2 ~", T: "c#2@3 g#1 c#2@2 g#1 c#2 ~ c#2 ~ g#1 c#2 g#1 c#2 ~",
  U: "a1@2 ~ a1 a2@2 a1 a2 ~ a2 ~ a1 a2!2 a1 e2", V: "a1@2 ~ a1 a2@2 a1 a2 ~ a2 ~ a2!2 a1 e2 a2",
  W: "a1@3 a1 a2@2 a1 a2 ~ a2 ~ a2 ~ a1 a2 e2", X: "a1@2 ~ a1 a2@2 a1 a2 ~ a2 ~ a1 a2@2 a1 ~",
  Y: "b1@3 b2 b1@2 ~ b1 ~ b1 ~ b1 d#2@2 e2@2", Z: "f#2@2 ~ f#2 ~ f#2 g#2 a2 ~ b2 ~ b2 b2@2 c#3 ~",
  AA: "b2@2 b2 g#2@2 g#2 f#2!2 ~ f#2 ~ e2 ~ e2 d#2 ~", AB: "c#2@3 b1 d#2 b1 c#2 b1@4 ~ b1 b2 b1@2", AC: "[e1@29 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A@2 B C D@2 E@2 F@2 G@2 H@2 I J K@2 L@2 M@2 N@2 O@2 P Q R S T R U V W X Y Z AA AB AC AD AE AF AG@2 AH AI AJ AK K@2 L@2
  M@2 N@2 O@2 P Q R S T R U V W X Y Z AA AB AC AD AE AF AG@2 AH AI AJ AK AA AB AC AD AE AF AG@2 AH AI AJ AK AL@2 ~@6
>`.pickRestart({
  A: "[e3,b3,d#4,g#4]", B: "[e3,b3,d#4,g#4]@15 ~", C: "[e3,b3,d#4,g#4]@7 ~", D: "[[g#4,b4,d#5]@7 [g#4,b4,d#5], e3]/2",
  E: "[[g#4,c#5,e5]@25 ~@7, c#4@23 ~@9]/2", F: "[[e3,g#4,b4,d#5]@7 [e3,g#4,b4,d#5]]/2",
  G: "[c#4@22 ~@7 c#5@3, g#4, c#5@29 ~@3, e5@13 e5@3, ~@3 c#4]/2", H: "[[a4,c#5,e5]@23 ~ [f#3,a4,c#5,e5]@8]/2",
  I: "[b3,a4,c#5,e5]", J: "~@3 [a4,c#5,e5], [b3,b4,d#5,f#5]", K: "[[g#4,d#5]@29 ~@3, b4@27 ~@5]/2",
  L: "[[c#4,g#4,c#5,e5]@7 [c#4,g#4,c#5,e5]]/2", M: "[g#4@6 ~ b4, d#5, b4@7 ~, e3@11 ~ e3@4, ~@13 g#4@3]/2",
  N: "[c#5@5 ~@2 c#5, [c#4,g#4,e5], ~@5 c#5@2 ~, ~@3 b4]/2", O: "[[a4,c#5,e5]@27 ~ [a4,c#5]@3 ~]/2", P: "[a4,c#5,e5]",
  Q: "[b3,b4,d#5,f#5]@7 ~", R: "[f#3,a3,c#4,c#5,e5]@7 ~", S: "[f#3,a3,c#4,c#5,e5]@13 ~@3",
  T: "[f#3,a3,c#4,c#5,e5], g#3 ~@15", U: "[f#3,a3,c#4,c#5,e5]", V: "[f#3,a3,c#4,c#5,e5]@4 [d#5,f#5]@3 ~, g#3 ~@15",
  W: "[e4,g#4,b4]@7 ~", X: "[e4,g#4,c#5]@3 ~", Y: "[e4,g#4,b4] ~@15", Z: "[e4,g#4,c#5]@13 ~@3", AA: "b4@7 ~",
  AB: "c5@7 ~ d5@7 ~", AC: "e5 ~@15", AD: "~@8 d5@3 ~ c5@4", AE: "b4@15 ~", AF: "g4@2 d5 c5", AG: "[b4@3 ~]/2",
  AH: "g#4@15 ~", AI: "a4@7 ~ b4@8", AJ: "c#5", AK: "d#5@8 e5@4 f#5@3 ~", AL: "[[e3,b3,e4,g#4,b4,d#5]@7 ~]/2",
})).s("gm_epiano2").gain(0.56)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A@3 B C D E F G H I@2 J K L M N@2 O F P@2 Q@2 R K S T U V W X Y Z AA@2 AB AC AD@3 AE@3 AF@2 AG@2 AH AI N@2 O F P@2 Q@2
  R K S T U V W X Y Z AA@2 AB AC AD@3 AE@3 AF@2 AG@2 AH AI AD@3 AE@3 AF@2 AG@2 AH AJ@8 ~
>`.pickRestart({
  A: "[[g#3,b3,d#4]@2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~@5 [g#3,b3,d#4]@4 [g#3,b3,d#4]@2 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~@5 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~@3 [g#3,b3,d#4] ~, e2@4 ~@2 e2@2 ~@3 e2@2 e2@2 e2@5 ~@2 e2@2 ~@3 e2@2 e2@2 e2@5 ~@7 e2@2 e2@2 ~, ~@6 [g#3,b3,d#4]!2 ~@6 [g#3,b3,d#4]!2 ~@6 [g#3,b3,d#4] ~]/3", // G#m
  B: "~@4 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~ [g#3,b3,d#4]@2 e2 ~, [g#3,b3,d#4] ~@3, ~@2 e2@4 ~@5 e2@3 ~@2", // G#m
  C: "[e2,g#3,b3,d#4]@4 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 ~@2 [g#3,b3,d#4]@2, ~@6 [g#3,b3,d#4] ~, ~@13 b2@3", // Emaj7 G#m
  D: "[g#3,b3,d#4] ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~ [g#3,b3,d#4]@4, ~@11 e2@5", // G#m
  E: "[c#3,g#3,c#4,e4]@4 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 ~@3 c#3, ~@6 [g#3,c#4,e4]!2, ~@13 c#3@2 ~", // C#m
  F: "[g#3,c#4,e4] ~ [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 ~@2 c#3@2, ~@3 [g#3,c#4,e4]", // C#m
  G: "[e2,g#3,b3,d#4]@4 [g#3,b3,d#4]@2 ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 ~@3 e2, ~@6 e2@3 ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2, ~@13 e2@2 ~", // Emaj7 G#m
  H: "[g#3,b3,d#4] ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2", // G#m
  I: "[[c#3,g#3,c#4,e4]@4 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 c#3 ~@4 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@3 c#3@2, ~@6 [g#3,c#4,e4]!2 ~@6 [g#3,c#4,e4]@2, ~@13 c#3@2 c#3@7 ~@5 c#3@3 ~@2]/2", // C#m
  J: "[f#3,a3,c#4,e4]@4 [a3,c#4,e4]@2 f#3 [a3,c#4,e4]@2 [a3,c#4,e4]@2 f#3 [a3,c#4,e4] f#3 ~ f#3, ~@7 [a3,c#4,e4]", // F#m7 A
  K: "~@2 f#3@2 [a3,c#4,e4]@2 f#3 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~ [a3,c#4,e4]@2 [a3,c#4,e4]@2, [a3,c#4,e4]@4 ~@7 f#3@5", // A
  L: "[b2,a3,c#4,e4]@4 [a3,c#4,e4]@2 b2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 b2 [a3,c#4,e4]@2 [a3,c#4,e4]@2", // A
  M: "[b2,b3,d#4,f#4]@4 [b3,d#4,f#4]@2 b2 [b3,d#4,f#4]@2 [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@2 b2 ~, ~@11 b2@3 ~@2", // B
  N: "[[g#3,b3,d#4]@4 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~@5 [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 e2 [g#3,b3,d#4]@2 [g#3,b3,d#4]@2, ~@11 e2@2 e2@2 e2@5 ~@12, ~@6 [g#3,b3,d#4]!2 ~@8]/2", // G#m
  O: "[g#3,c#4,e4]@4 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@4 c#3, c#3@6 ~@5 c#3@2 c#3@2 ~, ~@6 [g#3,c#4,e4]!2", // C#m
  P: "[[g#3,b3,d#4] ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~@5 [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]@2 ~ [g#3,b3,d#4]@2 [g#3,b3,d#4]@2, e2@6 e2@3 ~@2 e2@2 e2@2 e2@7 e2@4 ~ e2@5, ~@6 [g#3,b3,d#4]!2 ~@8]/2", // G#m
  Q: "[[g#3,c#4,e4]@4 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@5 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 c#3 ~@2 c#3@2, c#3@6 ~@5 c#3@2 c#3@2 c#3@6 ~@11, ~@6 [g#3,c#4,e4]!2 ~@6 [g#3,c#4,e4]@2]/2", // C#m
  R: "[f#3,a3,c#4,e4]@4 [a3,c#4,e4]@2 f#3 [a3,c#4,e4]@2 [a3,c#4,e4]@2 f#3 ~@3 f#3, ~@6 [a3,c#4,e4]!2, ~@13 f#3@2 ~", // F#m7 A
  S: "[b2,a3,c#4,e4]@3 ~ [a3,c#4,e4]@2 ~ [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@3 b2@2, ~@6 b2@2 ~@3 b2@3 ~@2, ~@3 [a3,c#4,e4]", // A
  T: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 b2 [b3,d#4,f#4] ~ [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@3 ~, b2@6 ~@5 b2@4 ~", // B
  U: "[f#3,a3,c#4,e4]@4 [a3,c#4,e4]@2 f#3 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@4 f#3, ~@11 f#3@2 f#3@2 ~, ~@6 [a3,c#4,e4]!2", // F#m7 A
  V: "[a3,c#4,e4] ~ [a3,c#4,e4]@2 [a3,c#4,e4]@2 f#3 [a3,c#4,e4] ~ [a3,c#4,e4]@2 f#3 ~@2 f#3@2, ~@3 [a3,c#4,e4]", // A
  W: "[f#3,a3,c#4,e4]@3 ~ [a3,c#4,e4]@2 f#3 [a3,c#4,e4] ~ [a3,c#4,e4]@2 f#3 ~@2 [a3,c#4,e4]@2, ~@6 [a3,c#4,e4] ~, ~@13 f#3@3", // F#m7 A
  X: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@2 b2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 b2 ~@2 [a3,c#4,e4]@2, b2@2 ~@4 [a3,c#4,e4] ~, ~@13 b2@3", // A
  Y: "[a3,c#4,e4] ~ [a3,c#4,e4]@2 [a3,c#4,e4]@2 f#3 [a3,c#4,e4] ~ [a3,c#4,e4]@2 f#3 [a3,c#4,e4] f#3 [a3,c#4,e4]@2, f#3 ~@3", // A
  Z: "[b2,a3,c#4,e4]@4 [a3,c#4,e4]@2 b2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 b2 [a3,c#4,e4]@2 ~@2", // A
  AA: "[[e2,g#3,b3,e4]@4 [g#3,b3,e4]@2 e2 [g#3,b3,e4] ~ [g#3,b3,e4]@2 ~ [g#3,b3,e4]!2 ~@2 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@4 c#3, ~@11 e2@4 c#3@2 ~@10 c#3@2 c#3@2 ~, ~@7 [g#3,b3,e4] ~@6 [g#3,c#4,e4]!2]/2", // E C#m E C#m
  AB: "[g#3,b3,e4] ~ [g#3,b3,e4]@2 [g#3,b3,e4]@2 ~ [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4]@2 [g#3,b3,e4] [g#3,c#4,e4], ~@3 e2@3 ~@2", // E C#m
  AC: "[g#3,c#4,e4]@2 [g#3,c#4,e4]@2 [g#3,c#4,e4]@2 c#3 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@2 c#3 [g#3,c#4,e4]@2, c#3@5 ~@6 c#3@2 ~@3, ~@6 [g#3,c#4,e4] ~", // C#m
  AD: "[[e3,a3,c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@4 [c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4] ~ [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4] ~@2 [c4,e4,g4,b4] [c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 [c4,e4,g4,b4]@2 ~@3 [e3,a3]@2, ~@6 [e3,a3]@5 [e3,a3]@11 [e3,a3]@5 [e3,a3]@2 [c4,e4,g4,b4]@2 ~@13 [c4,e4,g4,b4]@4, ~@30 [e3,a3]@7 ~ [e3,a3]@4 ~ [e3,a3]@3 ~@2]/3", // Cmaj7 A5 Cmaj7 A5
  AE: "[[e3,a3,c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4] ~ [c4,e4,g4,g#4,b4]@2 [e3,a3] ~@2 [c4,e4,g4,b4] ~ [c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 [e3,a3] [c4,e4,g4,b4] ~ [c4,e4,g4,b4]@2 ~@5 [c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 [e3,a3] [c4,e4,g4,b4] ~ [c4,e4,g4,b4]@2 ~@3 [e3,a3]@2, ~@3 [e3,a3] ~@2 [c4,e4,g4,b4] ~@7 [c4,e4,g4,b4]!2 ~@6 [c4,e4,g4,b4]@2, ~@13 [e3,a3]@2 [e3,a3]@5 ~@7 [e3,a3]@2 [e3,a3]@2 [e3,a3]@5 ~@7 [e3,a3]@3 ~@2]/3", // Cmaj7 A5 Cmaj7 A5 Cmaj7 A5 Cmaj7 A5 …
  AF: "[[e3,a3,c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 [c4,e4,g4,b4]@2 [e3,a3] ~@4 [c4,e4,g4,b4]@4 [c4,e4,g4,b4]@2 [e3,a3] [c4,e4,g4,b4] ~ [c4,e4,g4,b4]@2 ~@3 [c4,e4,g4,b4] ~, ~@6 [e3,a3]@3 ~@3 [c4,e4,g4,b4]@2 [c4,e4,g4,b4]@2 ~@12 [c4,e4,g4,b4]@2 ~@2, ~@13 [e3,a3]@2 [e3,a3]@5 ~@7 [e3,a3]@2 [e3,a3]@2 ~]/2", // Cmaj7 A5 Cmaj7 A5 Cmaj7 A5 Cmaj7 A5
  AG: "[[c#4,e4,g#4]@4 [c#4,e4,g#4]@2 [f#3,a3] [c#4,e4,g#4] ~ [c#4,e4,g#4]@2 ~@5 [c#4,e4,g#4]@4 [c#4,e4,g#4]@2 [b2,f#3,a3] [c#4,e4,g#4] ~ [c#4,e4,g#4]@2 ~@3 [c#4,e4,g#4]@2, [b2,f#3,a3]@7 ~@4 [b2,f#3,a3]@2 [b2,f#3,a3]@2 [b2,f#3,a3]@5 ~@7 [b2,f#3,a3]@2 [b2,f#3,a3]@3, ~@6 [c#4,e4,g#4]!2 ~@6 [c#4,e4,g#4] ~]/2", // C#m F#m C#m B7 C#m B7 C#m
  AH: "[b2,f#3,a3,c#4,e4,g#4]@4 [c#4,e4,g#4]@2 [b2,f#3,a3] [c#4,e4,g#4] ~ [c#4,e4,g#4]@2 ~@3 [c#4,e4,g#4]@2, ~@11 [b2,f#3,a3]@2 [b2,f#3,a3]@3, ~@6 [c#4,e4,g#4] ~", // C#m7 C#m B7 C#m B7 C#m
  AI: "[b2,f#3,a3,c#4,e4,g#4]@4 [c#4,e4,g#4]@2 [b2,f#3,a3] [c#4,e4,g#4] ~ [c#4,e4,g#4]@2 [b2,f#3,a3] ~@2 [c#4,e4,g#4] ~, ~@6 [c#4,e4,g#4] ~, ~@13 [b2,f#3,a3]@2 ~", // C#m7 C#m B7 C#m B7 C#m B7
  AJ: "[[b2,f#3,a3,c#4,e4,g#4]@4 [c#4,e4,g#4]@2 [b2,f#3,a3] [c#4,e4,g#4] ~ [c#4,e4,g#4]@2 [b2,f#3,a3] ~@2 [c#4,e4,g#4]@114, ~@6 [c#4,e4,g#4] ~@57, ~@13 [b2,f#3,a3]@2 ~@113]/8", // C#m7 C#m B7 C#m B7 C#m B7
})).s("gm_electric_guitar_muted").gain(0.52)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  A@4 B@2 C@2 B@2 D E@3 F G H@2 I@2 J@3 K@4 L M@2 N@2 O P Q R S T U@7 V@8 W@5 X@3 Y Z@2 AA@2 AB AC AD AE AF AG U@7 AH@5
  U@7 AI@8 ~@5
>`.pickRestart({
  A: "[[b3,d#4]@63 ~]/4", B: "g#3/2", C: "[b3@31 ~]/2", D: "b3", E: "c#4/3", F: "e4", G: "d#4@15 ~", H: "[g#3@7 b3]/2",
  I: "[c#4@31 ~]/2", J: "[g#3@7 b3@3 c#4@2]/3", K: "[d#4@2 e4@8 c#4 e4@5]/4", L: "d#4@7 ~",
  M: "[g#5@25 ~ a5@2 g#5@2 e5@2]/2", N: "[c#5@25 ~ a5@2 g#5@2 e5@2]/2", O: "c#5", P: "e5@7 ~ f#5@7 ~",
  Q: "[b3,b4]@7 [g#4,g#5]", R: "[c#4,c#5]", S: "[f#4,f#5]", T: "[b3,b4]@15 ~",
  U: "[[b4,b5]@16 [c5,c6]@8 [d5,d6]@8 [e5,e6]@23 ~ [d5,d6]@4 [c5,c6]@4 [b4,b5]@24 [d5,d6]@4 [c5,c6]@4 [b4,b5]@16, [c4,e4,g4]]/7", // B C D E D C B D …
  V: "[~@8 g5@8 [g#4,g#5]@16 [a4,a5]@8 [b4,b5]@8 [c#5,c#6]@31 ~ [g#4,g#5]@6 [f#4,f#5]@10 [d#4,d#5]@10 ~@4 [f#4,f#5]@2 [g#4,g#5]@6 [f#4,f#5]@2 [e4,e5]@6 [e4,e5] [f#4,f#5], ~ g4@15, ~@16 [a3,c#4,e4]@63 ~ g#3@16 ~@10 [e4,e5]@4 ~@18, ~@27 b3 c#4@4]/8", // G# A B C# G# F# D# F# …
  W: "[[g#4,g#5]@12 [e4,e5]@2 ~@16 [c#4,c#5]@2 [d#4,d#5]@8 [e4,e5]@4 [f#4,f#5]@4 ~@14 [f#4,f#5] ~ d#4@8 e4@4 [e4,e5]@4, ~@14 [d#4,d#5]@16 ~@18 [g#4,g#5]@14 ~ [e4,e5]@2 ~@15, ~@4 g#3@7 b3@3 c#4@2 d#5@3 ~]/5", // G# E C# D# E F# E D# …
  X: "[c#4@3 ~ [g#5,g#6] [f#5,f#6], c#5@31 ~@17, ~ c#4, ~@7 e4@5]/3", Y: "[e5,e6]@4 [d#5,d#6]@3 ~, d#4@7 ~",
  Z: "[g#5@10 f#5@3 e5 f#5 g#5@15 ~@2]/2", AA: "[g#5@4 b5@6 g#5@3 f#5 e5 f#5@8 ~ e5@4 f#5@4]/2",
  AB: "g#5@10 f#5@3 e5 ~ f#5", AC: "g#5@4 b5@11 ~", AD: "[b4,b5]", AE: "[c#5,c#6]", AF: "[d#5,d#6]",
  AG: "[e5,e6]@8 [f#5,f#6]@7 ~, d6 ~@15", // E F#
  AH: "[~@8 g5@8 [g#4,g#5]@16 [a4,a5]@8 [b4,b5]@8 [c#5,c#6]@31 ~, ~ g4@9, ~@16 [a3,c#4,e4]@63 ~]/5", // G# A B C# A
  AI: "[~@8 g5@8 [g#4,g#5]@16 [a4,a5]@8 [b4,b5]@8 [c#5,c#6]@31 ~ [e4,b4,d#5]@29 ~@19, ~ g4@15, ~@16 [a3,c#4,e4]@63 ~@49]/8", // G# A B C# Emaj7 A
})).s("gm_synth_strings_2").gain(0.29)

// drums · kick
const kick = s("bd").struct("<[x ~@6 x!2 ~ x ~@3 x ~]!96 x ~@7>").gain(0.71)

// drums · snare
const snare = s("sd").struct("<A@37 B A@11 C A@21 D A@11 E A@11 B ~@8>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!4", C: "~@4 x ~@7 x ~ x!2", D: "~@4 x ~@4 x ~@2 x ~ x!2", E: "~@4 x ~@3 x!8",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@38 [~ x ~ x]!12 ~@22 [~ x ~ x]!24 ~@8>").gain(0.57)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!96 ~@8>").gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~ x ~ x ~ x ~ x]!96 ~@8>").gain(0.21)

// drums · crash
const crash = s("cr").struct("<~@38 A ~@11 A ~@21 A ~@11 A ~@11 A ~@7>".pickRestart({
  A: "x",
})).gain(0.64)

// drums · congas
const congas = s("conga:18").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@8
>`.pickRestart({
  A: "~@4 x ~@7 x ~@2 x", B: "~@4 x ~@7 x!2 ~@2", C: "~ x ~@2",
})).gain(2.29)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@8
>`.pickRestart({
  A: "x ~ x ~@4 x ~ x!2 ~@3 x ~", B: "x ~ x ~@3 x!5 ~@4 x", C: "x ~ x ~@7 x!2 ~ x!3",
})).gain(2.29)

// drums · shaker
const shaker = s("sh").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B@2 ~@8
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.71)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B@2 ~@8
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~@2 x ~ x",
})).gain(0.21)

stack(
  bass, epiano2, electric_guitar_muted, synth_strings_2, kick, snare, clap, hihat, hihat_soft, crash, congas, congas_2,
  shaker, shaker_soft
)

More by Marvin Gaye