Strudelify

I Heard It Through The Grapevine

Marvin Gaye

KeyD majorTempo120 bpm
0:00/0:00
// I Heard It Through The Grapevine — Gaye,Marvin
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 brass section (copy of ch 3 alto sax)
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 B@8 C@6 D@7 E@2 F G H I@8 J@8 K L@8 F G H I@8 J@8 K L@8 F G H I@8 J@8 M@6>".pickRestart({
  A: "[d4,a4]@5 ~ [d4,a4]@2 [f4,c5] ~@3 [d4,a4]@4", // D5 F5 D5
  B: "[~@4 [d4,a4] ~ a4@2 [f4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@4, ~@6 d4 ~@15 f4 ~@15 a4@2 ~@14 f4 ~@15 a4@2 ~@14 f4 ~@15 a4@2 ~@14 f4 ~@9]/8", // D5 F5 G Dm D5 F Dm F …
  C: "[~@4 [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@4, ~@6 a4@2 ~@14 f4 ~@15 a4@2 ~@14 f4 ~@15 a4@2 ~@14 f4 ~@9]/6", // Dm F G Dm D5 F Dm F …
  D: "[~@4 [d4,f4,a4] ~ [d4,f4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [f4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@17 ~ [c#4,e4,a4]@7 ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~@3 [b3,d4,g4]@17 ~ [d4,f4,a4]@8 [f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@16 ~@2 [c#4,e4,a4]@2, ~@6 a4@2 ~@14 d4 ~@89]/7", // Dm F G Dm F Dm A G …
  E: "[~@6 [c#4,e4] ~ [c#4,e4,a4] ~@3 [b3,d4]@18 ~@2, ~@3 g4@5]/2", // C#m A Bm
  F: "[a3,d4,f#4]@3 ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~@5", // D
  G: "[b3,d4,g4] ~ [b3,d4,g4]@2 ~@2 [b3,d4]@8 ~@2, ~@3 g4@5", // G Bm
  H: "[a3,d4,f#4]@4 [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4]@5 ~", // D
  I: "[[b3,d4,g4] ~ [b3,d4,g4]@3 ~@3 [d4,g4]@3 ~ [b3,d4,g4] ~ [d4,f4,a4]@7 ~ [d4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@11 ~ [d4,f4,a4] ~ [d4,f4,a4]@3 ~ [b3,d4,g4]@7 ~ [b3,d4,g4] ~ [b3,d4,g4] ~@3 [b3,d4,g4]@10 ~@2 [b3,d4,g4] ~ [b3,d4,g4]@3 ~ [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@11 ~ [d4,f4,a4] ~ [d4,f4,a4]@2 ~@2 [b3,d4,g4]@7 ~ [d4,g4] ~ [b3,d4,g4] ~@3 [b3,d4,g4]@4, ~@8 b3 ~@119]/8", // G G5 G Dm D5 F Dm G …
  J: "[~@4 [d4,g4] ~ d4 ~ [b3,d4,g4] ~ [b3,d4,g4]@3 ~ [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ a4 ~ a4 ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ a4 ~ a4 ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@4]/8", // G5 G Dm F Dm F G Dm …
  K: "~@6 [f4,a4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@2", // F G Dm
  L: "[~@6 [f4,a4]@2 [f4,a4,c5] ~@3 [d4,f4,a4]@17 ~ [c#4,e4,a4]@7 ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~@3 [b3,d4,g4]@17 ~ [d4,f4,a4]@8 [f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@16 ~@2 [c#4,e4,a4]@7 ~ [c#4,e4] ~ [c#4,e4,a4] ~@3 [b3,d4]@18 ~@2, ~@6 d4 ~@101 g4@20]/8", // F Dm A G Dm F Dm A …
  M: "[~@6 [f4,a4] ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@6 ~@2 [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ a4 ~ a4 ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~ [d4,f4,a4] ~ [f4,a4,c5] ~@3 [d4,f4,a4]@7 ~ a4 ~ a4 ~ [f4,a4,c5] ~ [d4,g4,b4]@3 ~ [d4,f4,a4]@7 ~@11]/6", // F G Dm F Dm F G Dm …
})).s("gm_piano").gain(0.36).pan(0.6)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@20 A ~ B ~@4 C D ~@2 E ~@2 F G ~ H ~ H ~ A ~ I ~@4 A ~ B ~@4 C D ~@2 E ~@2 F G ~ H ~ H ~ A ~ I ~@4 A ~ B ~@4 C D ~@2
  E ~@2 F G ~ H ~ H ~ A ~ I ~ H ~ H ~
>`.pickRestart({
  A: "~@6 d4 ~@9", B: "~@6 a4 ~@9", C: "~@6 b3 ~@3 b3 ~@5", D: "~@6 f4 ~@9", E: "~@6 [b3,d4,g4] ~@9", F: "~@6 b3 ~@9",
  G: "~@4 b3 ~ [b3,g4] ~@9", H: "~@4 [d4,f4] ~ [d4,f4] ~@9", I: "~@4 [d4,f4,a4] ~ d4 ~@9",
})).s("gm_piano").gain(0.24).pan(0.6)

// bass · fretless bass
const bass = note(`<
  ~@4 A B@2 C A B@2 C A B@2 D@7 E@2 F G H I@8 J@2 K@4 L K M@7 E@2 F G H I@8 J@2 K@4 L K M@7 E@2 F G H I@8 J@2 K@4 L K
  N@2 K@3 O
>`.pickRestart({
  A: "d2", B: "d2@15 ~", C: "d2@7 ~",
  D: "[~@14 d2@7 ~ d2@2 f2 ~@3 d2@11 ~ d2@2 f2 ~ g2 ~ a2@7 ~ a2 ~ a2@2 g#2 ~ g2@9 ~ g2 ~ g2@2 c2@2 c#2@2 d2@7 ~ d2@2 f2@2 ~@2 d2@9 ~ d2 ~ d2@2 f2@2 g2@2 a2@2]/7",
  E: "[~@6 a2 ~ a2 ~ g#2 ~ g2@10 g2 ~ g2@2 f#2 ~ g2@2 a2 ~]/2", F: "b2@5 ~ b2 ~ b2@4 a2@4",
  G: "g2@5 ~ g2 ~ g2@2 f#2 ~ g2@2 a2 ~", H: "b2@6 b2 ~ b2@4 a2@4, ~@8 a2 ~@7",
  I: "[g2@5 ~ g2 ~ g2@2 f2 ~ e2 ~ d2@7 ~ d2@2 f2 ~@3 d2@10 d2 ~ d2@2 e2 ~ f2 ~ g2@7 ~ g2 ~ g2@2 ~@2 g2@9 ~ g2 ~ g2@2 f2 ~ e2 ~ d2@7 ~ d2 ~ f2 ~@3 d2@9 ~ d2 ~ d2@2 e2 ~ f2 ~ g2@7 ~ g2 ~ g2 ~@3 g2@4]/8",
  J: "[~@6 g2 ~ g2@2 c2 ~ c#2 ~ d2@7 ~ d2 ~ d2@5 ~ d2 ~]/2", K: "d2@5 ~ d2 ~ d2@5 ~ d2 ~", L: "d2@5 ~ d2 ~ d2@6 d2 ~",
  M: "[d2@2 d3 ~ c3@2 a2 ~ g2@2 f2 ~ e2 ~ d2@7 ~ d2@2 f2 ~@3 d2@11 ~ d2@2 f2 ~ g2 ~ a2@7 ~ a2 ~ a2@2 g#2 ~ g2@9 ~ g2 ~ g2@2 c2@2 c#2@2 d2@7 ~ d2@2 f2@2 ~@2 d2@9 ~ d2 ~ d2@2 f2@2 g2@2 a2@2]/7",
  N: "[d2@2 d3 ~ c3@2 a2 ~ g2@2 f2 ~ e2 ~ d2@6 ~@2 d2 ~ d2@5 ~ d2 ~]/2", O: "d2 ~",
})).s("gm_fretless_bass").gain(0.54)

// chords · alto sax
const alto_sax = note("<~@5 A B@2 ~@5 A B@2 ~@25 A B@2 ~@25 A B@2 ~@33>".pickRestart({
  A: "~@12 d4@3 f4", B: "[d5@7 ~, a4 ~@31]/2",
})).s("gm_alto_sax").gain(0.42).pan(0.2)

// chords · tenor sax
const tenor_sax = note("<~@5 A B@2 ~@5 A B@2 ~@25 A B@2 ~@25 A B@2 ~@33>".pickRestart({
  A: "~@12 d3@3 f3", B: "[d4, a3 ~@31]/2",
})).s("gm_tenor_sax").gain(0.42).pan(0.8)

// chords · overdriven guitar
const overdriven_guitar = note("<~@3 A@4 B@8 C@3 ~@9 D@3 E@7 F@8 ~@10 D@3 E@7 F@8 ~@10 G@4 ~@5 H@8 I@4 ~>".pickRestart({
  A: "[~@14 [f4,a4,d5]@7 ~ [a4,d5] ~ [a4,c5,f5] ~@3 [f4,a4,d5]@7 ~ [a4,d5] ~ [a4,d5] ~ [a4,c5,f5] ~ [g4,b4,d5]@3 ~ c5 ~ d5@5 ~ [a4,d5] ~ [a4,d5,f5] ~@3 [f4,a4,d5]@4, ~@46 [f4,a4]@7 ~@11]/4", // Dm D5 F Dm D5 F G D5 …
  B: "[~@4 [a4,d5] ~ [f4,a4,d5] ~ [a4,c5,d5,f5] ~ [g4,b4,e5]@3 ~ [f4,a4,d5]@7 ~ [f4,a4] ~ [a4,c5,f5] ~@3 [f4,a4,d5]@7 ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [a4,c5,f5] ~ [g4,b4,e5]@3 ~ [f4,a4,d5]@7 ~ [f4,a4,d5] ~ [a4,c5,d5,f5] ~@3 [f4,a4,d5]@7 ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [a4,c5,f5] ~ [g4,b4,e5]@3 ~ [f4,a4,d5]@7 ~ [f4,a4,d5] ~ [a4,c5,d5,f5] ~@3 [f4,a4,d5]@7 ~ [f4,a4,d5] ~ [a4,d5] ~ [a4,c5,f5] ~ [g4,b4,e5]@3 ~ [f4,a4,d5]@7 ~ [f4,a4] ~ [a4,c5,d5,f5] ~@3 [f4,a4,d5]@4]/8", // D5 Dm Dm7 Em Dm F Dm F …
  C: "[~@4 [f4,a4,d5] ~ [f4,a4,d5] ~ [a4,c5,f5] ~ [g4,b4,e5]@3 ~ [f4,a4]@10 ~@24, ~@7 d5@15 ~@2]/3", // Dm F Em F
  D: "[~@14 [a4,d5,f5]@6 ~@2 [a4,d5] ~ [c5,f5,a5] ~@3 [a4,d5]@16 ~@4, ~@7 f5@5]/3", // Dm D5 F D5
  E: "[~@6 [g4,b4,d5] ~ [g4,b4,d5] ~@3 [g4,b4,d5]@16 ~@2 [a4,d5,f5]@7 ~ [a4,d5,f5] ~ [c5,f5,a5] ~@3 [a4,d5]@16 ~@2 [g4,b4,d5]@6 ~@2 d5 ~ [g4,b4,d5] ~@3 [b4,d5]@15 ~@3 [a4,d5,f5]@7 ~ [a4,d5,f5] ~ [c5,f5,a5] ~@3 [a4,d5,f5]@4, ~@22 f5@9 ~@25]/7", // G Dm F D5 G Bm Dm F …
  F: "[~@4 d5 ~ d5 ~ [c5,f5,a5] ~ [b4,e5,g5]@3 ~ [a4,d5,f5]@7 ~ d5 ~ [c5,f5,a5] ~@3 [a4,d5,f5]@7 ~ d5 ~ d5 ~ [c5,e5,f5,a5] ~ [b4,d5,g5]@3 ~ [a4,d5,f5]@7 ~ [a4,d5] ~ [c5,f5,a5] ~@3 [a4,d5,f5]@7 ~ d5 ~ d5 ~ [c5,f5,a5] ~ [b4,d5,g5]@3 ~ [a4,d5,f5]@7 ~ [d5,f5] ~ [c5,f5,a5] ~@3 [a4,d5,f5]@7 ~ d5 ~ [d5,f5] ~ [c5,f5,a5] ~ [b4,d5,g5]@3 ~ [a4,d5,f5]@8 ~@10]/8", // F Em Dm F Dm Fmaj7 G Dm …
  G: "[~@14 [a4,d5,f5]@6 ~@2 [a4,d5] ~ [c5,f5,a5] ~@3 [a4,d5]@16 ~@10 [g4,b4,d5] ~ [g4,b4,d5] ~@7, ~@7 f5@6 ~@3]/4", // Dm D5 F D5 G
  H: "[~@6 [a4,d5,f5] ~ [c5,f5,a5] ~@3 [a4,d5,f5]@7 ~ d5 ~ d5 ~ [c5,f5,a5] ~ [b4,e5,g5]@3 ~ [a4,d5,f5]@7 ~ d5 ~ [c5,f5,a5] ~@3 [a4,d5,f5]@7 ~ d5 ~ d5 ~ [c5,e5,f5,a5] ~ [b4,d5,g5]@3 ~@3]/4", // Dm F Dm F Em Dm F Dm …
  I: "[~@6 d5 ~ [c5,f5,a5] ~@3 [a4,d5,f5]@7 ~ d5 ~ d5 ~ [c5,e5,f5,a5] ~ [b4,d5,g5]@3 ~@3]/2", // F Dm Fmaj7 G
})).s("gm_overdriven_guitar").gain(0.42).pan(0.4)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@4 A B ~ B C ~@4 A C ~@13 D ~@5 E@2 ~ F G F D F H I ~@12 D ~@5 E@2 ~ F G F D F H I ~@12 D ~@8 F G F ~ F G F G F G F ~
>`.pickRestart({
  A: "~@6 f4 ~@9", B: "~@4 f4 ~@11", C: "~@6 d5 ~@9", D: "~@6 f5 ~@9", E: "[~@6 [g4,b4] ~@5 g4@11 ~@9]/2",
  F: "~@4 [a4,f5] ~ [a4,f5] ~@9", G: "~@6 [a4,f5] ~@9", H: "~@6 a4 ~@9", I: "~@4 [a4,f5] ~ a4 ~@9",
})).s("gm_overdriven_guitar").gain(0.24).pan(0.4)

// chords · percussive organ
const percussive_organ = note(`<
  ~@3 A B@7 C@5 ~@8 D E D F@5 G@4 H@8 ~@8 D E D F@5 G@4 H@8 ~@8 D E D I@5 J@7 K@8 L ~
>`.pickRestart({
  A: "~@12 [c2,f2] [g2,a2,b2,c3,d3] [e3,f3,g3,a3,b3,c4] [d4,e4,f4,g4,a4]", // F5 G Cmaj7 Dm
  B: "[[d5,f5,a5]@6 [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@7 ~ [f5,a5] ~@3 [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~@3 [f5,a5,c6] ~@3 [d5,f5,a5]@7 ~ a5 ~ a5 ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@7 ~ [d5,a5] ~@3 [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@4, b4 ~@25 a5 ~@85]/7", // Dm F Dm F G Dm F Dm …
  C: "[~@4 [f5,a5] ~ a5 ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [d5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~@3]/5", // F G Dm F Dm D5 F G …
  D: "[a4,d5,f#5]", E: "[b4,g5]", F: "[[b4,g5]@7 [d5,f5,a5]@5 [f5,a5,c6] ~ [d5,f5,a5]@9 [d5,g5,b5]@16 [d5,f5,a5]]/5",
  G: "[~@8 [f5,a5,c6]@2 ~@2 [d5,f5,a5]@18 [d5,g5,b5]@31 ~ [d5,f5,a5]@2]/4", // F Dm G Dm
  H: "[~@8 [f5,a5,c6] ~@3 [f5,a5]@11 ~ [d5,g5,b5] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@8 d5 ~ [f5,a5,c6] ~@3 [d5,f5,a5]@11 ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [f5,a5]@8 d5 ~ [f5,a5,c6] ~@3 [f5,a5]@11 ~ [d5,g5,b5] ~ [d5,g5,b5]@3 ~ [f5,a5]@9 ~ [f5,a5,c6] ~@3 [d5,f5,a5]@16 ~@4, ~@12 d5@9 ~@41 d5@7 ~@7 d5@9 ~@9 d5@7 ~@27]/8", // F G Dm F Dm F G F …
  I: "[[b4,g5]@13 ~ [d5,f5,a5]@7 ~ [f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@18 [g5,b5]@32 [d5,f5,a5]@2]/5", // Em Dm F Dm G Dm
  J: "[~@6 [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@18 [d5,g5,b5]@31 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@8 [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5]@2 ~@2 [d5,f5,a5]@4, ~@104 c6 ~@7]/7", // Dm F Dm G Dm F Dm F …
  K: "[~@4 [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@8 [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5]@2 ~@2 [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5,c6] ~@3 [d5,f5,a5]@8 [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f5,a5]@7 ~ [d5,f5,a5] ~ [f5,a5]@2 ~@2 [d5,f5,a5]@4, ~@56 c6 ~@63 c6 ~@7]/8", // Dm F G Dm F Dm F G …
  L: "~@4 [d5,f5,a5] ~ [d5,f5,a5] ~ [f5,a5,c6] ~ [d5,g5,b5]@3 ~@3", // Dm F G
})).s("gm_percussive_organ").gain(0.48).pan(0.4)

// chords · percussive organ · soft notes
const percussive_organ_soft = note(`<
  ~@3 A ~ B C D ~ E ~ F ~ G ~@22 C H I ~@2 H@2 ~@21 C H I ~@2 H@2 ~@13 H J@3 ~@17
>`.pickRestart({
  A: "~@12 [d2,e2] ~@3", B: "~@4 d5 ~ [d5,f5,a5] ~@3 c6 ~@5", C: "~@6 [d5,f5,a5] ~@9",
  D: "~@4 [d5,f5] ~ [d5,f5] ~@3 a5 ~@5", E: "~@4 f5 ~ [d5,f5,a5] ~@9", F: "~@4 d5 ~ [d5,f5] ~@9", G: "~@6 f5 ~@9",
  H: "~@6 d5 ~@9", I: "~@6 [f5,a5] ~@9", J: "[~@14 d5@31 ~@3]/3",
})).s("gm_percussive_organ").gain(0.24).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@7 B C D E D E D E F A@3 G E H E H E D E H F I@6 B C D E D E D E F A@3 G E H E H E D E H F I@6 B C D E D E D E F
  A@3 G E H E H E D E H F I@6 J F I@3 K
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@4", C: "x ~@2 x!2 ~ x ~", D: "~@3 x!2 ~@2 x", E: "~@3 x!2 ~ x ~", F: "~@3 x!2 ~@3",
  G: "x ~@2 x!2 ~@2 x", H: "~@7 x", I: "x!2", J: "x ~@2 x ~@3 x", K: "x",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B C B C B C B D E B E B E B E B C B C B E B E B E B E F ~@7 D E B E B E B E B C B C B E B E B E B E F ~@7 D E B
  E B E B E B C B C B E B E B E B E F ~@13
>`.pickRestart({
  A: "~ x!2 ~ x!2 ~@2", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x", D: "~@2 x ~ x ~@3 x ~ x ~ x ~ x!2", E: "~ x ~@2",
  F: "~@2 x ~@2 x!2 ~",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@13 x ~@2] ~@97>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  A@7 ~ B C D E F G H I J K L M L N O N P Q R S T U O V O V L N W X Y Z AA AB AC AD J K L M L N O N P Q R S T U O V O V
  L N W X Y Z AA AB AC AD J K L M L N O N P Q R S T U O V O V L N W X Y Z AA AB AC AD W X Y Z ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!4 ~ x ~", C: "x!2 ~ x", D: "x ~ x ~ x ~@3 x ~ x!3 ~ x ~", E: "x!7 ~",
  F: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3", G: "x!3 ~ x!3 ~", H: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~", I: "~ x!6 ~",
  J: "x ~ x!3 ~@3 x ~ x ~@5", K: "~@3 x!2 ~@3 x ~@3 x ~@3", L: "~@2 x!3 ~@3 x ~@7", M: "~@3 x!2 ~@3 x!5 ~@3",
  N: "~@2 x!3 ~@3 x ~@3 x ~@3", O: "~@2 x!3 ~ x ~ x ~@7", P: "~@3 x!2 ~@3 x!2 ~@2 x ~@3",
  Q: "x ~@2 x!2 ~@3 x ~@3 x ~@3", R: "x ~@2 x!2 ~@3 x!2 ~@2 x ~@3", S: "x ~@3 x ~@2 x!2 ~ x ~ x ~@3",
  T: "~@3 x!2 ~ x ~ x ~@7", U: "~@2 x!3 ~@3 x ~ x ~ x ~@3", V: "~@3 x!2 ~@3 x ~ x ~ x ~@3", W: "~@3 x!2 ~@5 x!3 ~@2 x",
  X: "x ~ x!5 ~ x ~@2 x!2 ~@3", Y: "~@10 x!5 ~", Z: "x!5 ~@2 x!2 ~@7", AA: "~@4 x!5 ~@4 x!3", AB: "x!3 ~ x ~@5 x!4 ~@2",
  AC: "~@2 x ~ x!5 ~@6 x", AD: "x ~@2 x!6 ~@2 x!3 ~@2",
})).gain(0.36)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@8 A B C ~ D ~ E ~ F E G H G C I G J K J L E C ~ H ~ E ~ C ~ M N O P Q D R F E G H G C I G J K J L E C ~ H ~ E ~ C ~
  M N O P Q D R F E G H G C I G J K J L E C ~ H ~ E ~ C ~ M N O P Q D R ~ M N O ~
>`.pickRestart({
  A: "x ~@4 x ~ x", B: "~ x ~ x!2 ~@3", C: "~@3 x ~@4", D: "~@7 x", E: "~ x ~@6", F: "~ x ~@14", G: "~@3 x ~ x ~@2",
  H: "~ x ~ x ~@4", I: "~@5 x ~@2", J: "~@2 x ~@3 x ~@3 x!2 ~@4", K: "~ x!2 ~@4 x ~ x!3 ~@4", L: "~@2 x!2 ~@2 x ~@9",
  M: "~@7 x ~@8", N: "~@15 x", O: "~@13 x ~@2", P: "~@2 x!2 ~@12", Q: "~@3 x ~@5 x ~@6", R: "~ x ~@3 x ~@2",
})).gain(0.18)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A ~ A ~ A ~ A ~ A B A B A B A B ~ C A@2 ~@12 A ~ A ~ A B A B A B A B ~ C A@2 ~@12 A ~ A ~ A B A B A B A B ~ C A@2
  ~@12 A ~ A ~ A ~@3 A ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "x ~@6 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@27 A B A B A B A B A ~@19 A B A B A B A B A ~@19 A B A B A B A B A ~@12 C
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "x",
})).gain(0.54)

// drums · guiro
const guiro = s("guiro:0").struct("<~@39 A ~ A ~ A ~@23 A ~@3 A ~@21 A ~ A ~ A ~ A ~ A ~ A ~>".pickRestart({
  A: "~ x ~@6",
})).gain(12.68)

// drums · guiro
const guiro_2 = s("guiro:4").struct(`<
  ~@28 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(12.68)

stack(
  piano, piano_soft, bass, alto_sax, tenor_sax, overdriven_guitar, overdriven_guitar_soft, percussive_organ,
  percussive_organ_soft, kick, snare, low_tom, hihat, hihat_soft, open_hat, crash, guiro, guiro_2
)

More by Marvin Gaye