Strudelify

Beauty Is Only Skin Deep

The Temptations

KeyC majorTempo118 bpm
0:00/0:00
// Beauty Is Only Skin Deep — The Temptations
// 118 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 68 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · "BEAUTY IS ONLY SKIN DEEP        ;Edward Holland / Norman Whitfield"
const piano = note(`<
  ~@12 A B C D@2 E F G H ~@8 I J K@2 L M N O ~ P@2 Q@2 R S T U ~@8 V@2 W@2 X Y Z AA AB AC AD AE AF AG
>`.pickRestart({
  A: "~@6 [f2,a3,c4,f4]@5 ~ [f2,a3,c4,f4]@5 ~ [f2,a3,c4,f4]@4 ~@2", // F
  B: "[e4,g4]@6 c4 ~@9 c5 ~ [d2,d4,f4,a4]@3 ~ g2@2, c2@9 ~ [d2,d4,f4,a4]@8 ~@6, c4@5 ~@19", // Em Dm
  C: "[c2,c4,e4,g4]@6 [c3,e4,g4,c5]@3 ~@3 [f3,a3,d4]@4 c4 ~@5 g2@2, ~@10 d2@5 ~@9", // C Dm
  D: "[e4@5 ~ e4@2 ~@2 [f4,a4,d5]@10 ~@2 [g4,b4,e5]@10 ~@2 [f2,a4,c5,f5]@3 ~@3 [f2,a4,c5,f5]@3 ~@5, c2@5 d2@6 e2@6 ~@7, [g4,c5] ~@5]/2", // Dm Em F C5
  E: "[g4,c5,e5]@3 ~ [g4,e5]@2 ~@4 e2@2 [f2,f4,a4]@4 c5@2 ~@6, c2 ~@3, ~@4 c5 ~@7 d5@3 ~@9", // C F
  F: "[g2,b3,d4,g4]@4 [a2,c4,f4,a4]@3 ~@3 [c3,e4,g4,c5]@8 ~@6", // G F C
  G: "[c4,e4,g4]@3 ~ [c4,e4,g4] ~@7 [a3,f4]@4 g4@2 [a3,f4]@2 ~@4, c3@3 ~@3 [f2,c4]@4 ~@2", // C Dm F5
  H: "[g2,b3,d4,g4]@2 [a2,b3] ~@2 [c3,g3,c4,e4]@4 ~@3, ~@4 [d4,g4] ~@19", // G Asus2 C G5
  I: "[c3,c5]@9 ~ [d3,f4,a4,d5]@10 ~@4, [e4,g4]@7 ~@17", J: "[c3,c5]@9 ~ [d3,f4,a4,d5]@12 ~@2, [e4,g4]@7 ~@17",
  K: "[[c3,g4,c5]@8 ~@2 [d3,a4,d5]@11 ~ [e3,b4,e5]@11 ~ [f3,a4,c5,f5]@4 ~@2 [f3,a4,c5,f5]@4 ~@4, e4@6 ~@4 f4@9 ~@3 g4@9 ~@17]/2", // C5 D5 E5 F
  L: "[c3,g3,c4,e4]@8 ~@2 [g3,c4] ~ [f2,f3,a3]@4 c4 ~@7, ~@10 c3@2 d4@3 ~@9", // C C5 F
  M: "[g2,b3,d4,g4]@4 [a2,c4,a4]@3 ~@3 [c3,g3,c4,e4]@9 ~@5, ~@4 f4 ~@19", // G Am C
  N: "[c3,g3,c4,e4]@9 ~ [c3,g3,c4] ~ [f3,a3,d4]@4 c4 ~@7, ~@2 f2 ~", // C C5 Dm
  O: "[g2,b3,d4,g4]@3 ~ [g2,b3,d4,g4]@2 ~@4 [c3,g3,c4,e4]@9 ~@5", // G C
  P: "[[f2,a3,c4,f4]@3 ~ [f2,a3,c4,f4]@3 ~ [f2,a3,c4,f4]@4 [c3,c4,e4]@32 ~@4, ~@2 g3@5 ~]/2", // F C
  Q: "[[f2,a3,c4,f4]@3 ~ [f2,a3,c4,f4]@3 ~ [f2,a3,c4,f4]@4 [c3,g3,c4,e4]@30 ~@4 g2@2]/2", // F C
  R: "[g3,c4,e4]@9 c3@2 ~ [f2,f3,a3,d4]@4 c4@2 ~@6, c3@7 ~@17", // C Dm
  S: "[g2,b3,d4,g4]@4 [a2,c4,f4,a4]@3 ~@3 [g3,c4,e4]@8 ~@4 g2@2, ~@9 c3@8 ~@7", // G F C
  T: "[g3,c4,e4]@5 c3 [f2,f3,a3,d4]@2 c4 ~@3, c3@7 ~@17", // C Dm
  U: "[g2,g3,b3,d4]@3 ~ [g2,g3,b3,d4]@3 ~@3 [c3,c4,e4]@8 ~@6, ~@9 g3@8 ~@7", // G C
  V: "[[c2,g3,c4]@9 ~ [d2,a3]@11 ~ [c2,g3,c4]@10 ~@2 d4@6 c4 ~ [f3,a3,d4]@2 ~@4, e3@7 ~@3 [f3,d4]@9 ~@3 e3@8 ~@4 d2@11 ~@3, ~@17 [f3,a3]@4 ~@3]/2", // C5 D5 C5 Dm F
  W: "[[c2,e4,g4,c5]@8 ~@2 [d2,a4,d5]@11 ~ [e2,e5]@12 [f2,a4,c5,f5]@3 ~@3 [f2,a4,c5,f5]@4 ~@4, ~@10 f4@9 ~@3 [g4,b4]@10 ~@16]/2", // C D5 E F G
  X: "[c2,g3,c4,e4]@8 ~@2 [g3,c4,e4] ~ [f2,f3,a3,d4]@4 c4 ~@7, ~@5 c2 ~@6", // C Dm
  Y: "[g2,b3,d4,g4]@2 [a2,a4] ~@2 [e4,g4,c5]@4 ~@3, ~@4 [c4,f4] ~@5 c3@10 ~@4", // G A C F5
  Z: "[c2,c4,e4,c5]@8 ~@2 [c4,e4,c5] ~ [f2,f3,a3,d4]@4 c4 ~@7, ~@5 c2 ~@6", // C Dm
  AA: "[g2,b3,d4,g4]@3 ~ [g2,b3,d4,g4]@3 ~@3 [c3,c4,e4,c5]@9 ~@5", AB: "[e4,g4,c5]@8 ~@4 [f2,c4,f4,a4]@9 ~@3, c3@5 ~@7",
  AC: "[g2,d4,g4]@4 [a2,c4,f4,a4]@3 ~@3 [c3,e4,g4,c5]@10 ~@4, b3 ~@11", // G5 F C
  AD: "[e4,g4,c5]@5 ~ [c4,f4,a4]@4 ~@2, c3@6 f2@5 ~", // C F
  AE: "[g2,b3,d4,g4]@3 ~ [g2,d4,g4]@3 ~@3 [c3,e4,g4,c5]@10 ~@4, ~@4 b3 ~@19", // G G5 C
  AF: "[e4,g4,c5]@9 ~@3 [f2,c4,f4,a4]@10 ~@2, c3@11 ~@13", // C F
  AG: "[g2,d4,g4]@4 [a2,c4,f4,a4]@3 ~@3 [e4,g4,c5]@10 ~@4, b3@2 ~@8 c3@7 ~@7", // G5 F C
})).s("gm_piano").gain(0.28).pan(0.4)

// bass · fretless bass
const bass = note(`<
  A B@2 C@2 D@2 E@2 F@2 G@2 H I J K L M N O P@2 Q@2 R@2 S@2 T U V W X Y N Z ~ AA@4 AB AC AD AE AF@2 AG@2 AH@2 AI@2 AJ AK
  AL@2 AM AN AO AP AQ AR AS AP AT AU
>`.pickRestart({
  A: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1@2", B: "[c2@45 ~ g1@2]/2", C: "[c2@16 ~ c2 f1@2 ~ f1@2 ~]/2",
  D: "[c2@7 ~@3 c2@2 e1@4 g1@3 ~@3 f1@9 ~@3 a1@2 g1@3 ~ a1@2 c2@3 ~@3]/2",
  E: "[c2@7 ~@3 c2@2 e1@3 ~ e1@3 ~@3 f1@10 ~@2 a1@2 g1@3 ~ a1@2 c2@3 ~ a1@2]/2",
  F: "[c2@8 ~@2 c2@2 e1@3 ~ g1@3 ~@3 f1@9 ~@3 a1@2 g1@4 a1@2 c2@3 ~@3]/2",
  G: "[c2@8 ~@2 c2@2 e1@3 ~ g1@3 ~@3 f1@9 ~@3 f1 ~ f1@6 f1@4 f1@2]/2", H: "c2@7 ~@3 c2@2 d2@7 ~@3 c2@2",
  I: "c2@6 ~@4 d2 ~ d2@7 ~@3 c2 ~", J: "c2@7 ~@3 d2 ~ d2@7 ~@3 e2 ~", K: "e2@6 ~@4 f2@2 f2@3 ~ f2@2 f2@3 ~ g1@2",
  L: "c2@7 ~@3 e1@2 f1@6 ~@4 f1@2", M: "g1@3 ~ a1@3 ~@3 c2@2 e1@2 g1@2 a1@2 g1@3 ~ g1@2", N: "c2@7 ~@3 c2@2 f1@6 ~@6",
  O: "g1@3 ~ a1@3 ~@3 c2@9 ~ a1 ~ g1@2", P: "[c2@7 ~@3 c2@2 e1@3 ~ g1@3 ~@3 f1@9 ~@3 a1@2 g1@5 ~ b1@4 ~@2]/2",
  Q: "[c2@7 ~@3 c2@2 e1@3 ~ g1@3 ~@3 f1@8 ~@4 a1@2 g1@3 ~ a1 ~ b1@3 ~ a1@2]/2",
  R: "[c2@9 ~ c2@2 e1@3 ~ g1@4 ~@2 f1@9 ~@3 a1@2 g1@3 ~ a1 ~ b1@3 ~ a1@2]/2",
  S: "[c2@8 ~@2 c2@2 e1@3 ~ g1@3 ~@3 f1@9 ~@3 e1@2 f1@4 ~@2 f1@4 ~@2]/2", T: "c2@7 ~@3 d2@2 d2@7 ~@3 c2 ~",
  U: "c2@8 ~@2 d2 ~ d2@7 ~@3 c2 ~", V: "c2@7 ~@3 d2@2 d2@7 ~@3 e2 ~", W: "e2@3 ~@2 f2@2 ~ f2@2 ~ d2",
  X: "c2@8 ~@2 c2 ~ f1@6 ~@4 a1@2", Y: "g1@4 a1@2 ~@4 c2 ~ c2@4 g1@2 a1@4 c2@2", Z: "g1@4 g1@3 ~@3 c2@5 ~@9",
  AA: "[f1@3 ~ f1@3 ~ f1@4 c2@36]/2", AB: "c2@9 ~ f1@11 ~ a1@2", AC: "g1@4 a1@3 ~@3 c2@5 ~ g1@2 a1@4 g1@2",
  AD: "c2@10 ~@2 f1@9 ~@3", AE: "g1@3 ~ g1@3 ~@3 c2@9 ~@3 g2 ~",
  AF: "[c2@6 ~@4 c2@2 e1@4 g1@2 ~@4 f1@9 ~@3 a1@2 g1@6 a1@3 ~@3]/2",
  AG: "[c2@7 ~@3 c2@2 e1@4 g1@3 ~@3 f1@8 ~@4 a1@2 g1@2 ~@2 a1@2 c2@3 ~ a1@2]/2",
  AH: "[c2@7 ~@3 c2@2 e1@4 g1@3 ~@3 f1@10 ~@2 a1@2 g1@4 ~@2 a1@5 ~]/2",
  AI: "[c2@8 ~@2 c2@2 e1@4 g1@2 ~@4 f1@11 ~@3 f1@5 ~ f1@4 ~@2]/2", AJ: "c2@8 ~@2 d2@10 ~@2 c2 ~",
  AK: "c2@8 ~@2 d2 ~ d2@9 ~ c2@2", AL: "[c2@8 ~@2 d2 ~ d2@7 ~@3 e1@11 ~ f1@4 ~@2 f1@4 g1@2 a1@2]/2",
  AM: "c2@3 ~@2 e1 f1@3 ~@2 a1", AN: "g1@4 a1@3 ~@3 g1@2 e1@3 ~ g1@2 a1@3 ~ b1@2", AO: "c2@7 ~@3 f1 ~ f1@6 ~@4 a1@2",
  AP: "g1@3 ~ g1@3 ~@3 c2@7 ~@3 a1 ~ g1 ~", AQ: "c2@7 ~@3 e1@2 f1@6 ~@4 a1@2", AR: "g1@3 ~ a1@3 ~@3 c2@8 ~@6",
  AS: "c2@7 ~@3 c2 ~ f1@6 ~@4 a1@2", AT: "c2@7 ~@3 c2 ~ f1@7 ~@3 a1@2", AU: "g1@3 ~ a1@3 ~@3 c2@6 ~@8",
})).s("gm_fretless_bass").gain(0.44)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A B A B A B A B C D E F G H D I A B J B A B A K C D C L G I D I ~ M@2 N@2 C I C H A B A O A B A K C@2 E P C I C H
  C Q R H C S
>`.pickRestart({
  A: "~@3 [e4,g4,c5] ~@5 [e4,g4,c5] ~@2", B: "~@3 [c4,f4,a4] ~@5 [c4,f4,a4] ~@2",
  C: "~@3 [e4,g4,c5] ~@5 [c4,f4,a4] ~@2", D: "~@6 [e4,g4,c5]@3 ~@9 [c4,f4,a4]@2 ~@4",
  E: "~@3 [e4,g4,c5] ~@5 [f4,a4,d5] ~@2", F: "~@2 [g4,b4,e5] ~@3 [a4,c5,f5] ~",
  G: "~@6 [e4,g4,c5]@2 ~@10 [c4,f4,a4]@3 ~@3", H: "~@3 [d4,g4,b4] ~@5 [e4,g4,c5] ~@2",
  I: "~@3 [c4,f4,a4] ~@5 [e4,g4,c5] ~@2", J: "~@6 [e4,g4,c5]@2 ~@10 [e4,g4,c5] ~@5",
  K: "~@6 [c4,f4,a4]@2 ~@10 [c4,f4,a4] ~@5", L: "~@6 [d4,g4,b4]@2 ~@10 [f4,a4,c5]@3 ~@3",
  M: "[f4@4 ~@4 [c4,c5]@4 [c4,e4,g4]@33 ~@3, [c4,a4] ~@5, ~ f4@2 ~@9]/2", // C F
  N: "[[f4,a4]@2 a4@2 c5@2 [c4,e4,g4]@15 ~@3, c4 ~@3, ~@4 f4@7 ~@37]/2", O: "~@6 [c4,f4,a4] ~@11 [c4,f4,a4]@2 ~@4",
  P: "~@3 [g4,b4,e5] ~@5 [a4,c5,f5] ~@2", Q: "~@6 [c4,f4,a4] ~@11 [e4,g4,c5]@2 ~@4",
  R: "~@6 [e4,g4,c5]@2 ~@10 [c4,f4,a4] ~@5", S: "~@3 [d4,g4,b4] ~@8",
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.6)

// chords · lead 3 calliope
const lead_3_calliope = note("<~@17 A B C D ~@12 A B C E ~ F ~ F ~ A B C E ~@12 A B C D ~ G ~ G ~ H>".pickRestart({
  A: "[c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4] [a3,d4,f4]@2 [a3,c4,f4] ~@3", // C Dm F
  B: "[g3,b3,d4]@2 [a3,c4,f4]@3 [c4,e4,g4]@3 ~@4", // G F C
  C: "[g3,c4,e4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4] [c4,f4,a4]@2 [f4,a4,c5] ~@3", // C F
  D: "[e4,g4]@2 [f4,a4]@2 [e4,g4] [d4,f4] [c4,e4]@2 ~@4", E: "[e4,g4]@2 [f4,a4]@2 [e4,g4] [d4,f4] [c4,e4]@3 ~@3",
  F: "[c4,f4,a4]@5 [c4,e4,g4]@7", G: "[e4,g4]@2 [f4,a4]@3 [c4,e4,g4]@3 ~@4", H: "[e4,g4]@2 [f4,a4]@3 [c4,e4,g4]@4 ~@3",
})).s("gm_lead_3_calliope").gain(0.14)

// chords · lead 3 calliope
const lead_3_calliope_2 = note(`<
  ~@13 A B A C ~@4 D@2 E@2 D@2 F@2 A B A C ~@13 D@2 E@2 D@2 F@2 A B A C ~@10
>`.pickRestart({
  A: "[e4,g4]@5 [f4,a4]@4 ~@3", B: "~@3 e5@3 d5@2 c5 ~@3", C: "~@3 e5@2 d5@3 c5 a4@2 ~",
  D: "[~@8 [g3,g4] [c4,c5]@2 [a3,a4]@7 [g3,g4]@3 ~@3]/2", // G C A G
  E: "[~@8 [c4,e4,g4] [e4,g4,c5]@2 [c4,f4,a4]@7 [b3,d4,g4]@3 ~@3]/2", // C F G
  F: "[~@8 [c4,e4,g4] [e4,g4,c5]@2 [c4,f4,a4]@7 ~@6]/2", // C F
})).s("gm_lead_3_calliope").gain(0.17).pan(0.3)

// other · glockenspiel
const glockenspiel = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G ~@7 H@2 I@2 J@2 K@2 L ~@16 M@2 N@2 D@2 O@2 P ~@13
>`.pickRestart({
  A: "[c6@7 ~@3 c6@2 g6@2 ~@2 c7@5 ~ a6@6 ~@8 g6@3 ~ f6@2 e6@4 d6@2]/2",
  B: "[c6@7 ~@3 c6@2 g6@2 ~@2 c7@3 ~@3 a6@6 ~@8 f6@3 ~@3 f6@3 ~@3]/2",
  C: "[e6@6 ~@4 e6@2 g6@4 c7@5 ~ a6@7 ~@7 g6@4 f6@2 e6@4 d6@2]/2",
  D: "[c6@7 ~@3 c6@2 g6@4 c7@4 ~@2 a6@9 ~@5 g6@4 f6@2 e6@4 d6@2]/2",
  E: "[c6@7 ~@3 c6@2 g6@3 ~ c7@4 ~@2 a6@10 ~@4 g6@4 f6@2 e6@4 d6@2]/2",
  F: "[c6@7 ~@3 c6@2 g6@3 ~ c7@4 ~@2 a6@11 ~@3 f6@4 ~@2 f6@4 ~@2]/2", G: "e6@3 ~@5",
  H: "[~@10 c6@2 g6@4 c7@3 ~@3 a6@10 ~@4 g6@4 f6@2 e6@4 d6@2]/2",
  I: "[c6@6 ~@4 c6@2 g6@4 c7@3 ~@3 a6@11 ~@3 g6@4 f6@2 e6@4 d6@2]/2",
  J: "[c6@7 ~@3 c6@2 g6@4 c7@5 ~ a6@10 ~@4 g6@4 f6@2 e6@4 d6@2]/2",
  K: "[c6@6 ~@4 c6@2 g6@4 c7@5 ~ a6@9 ~@5 f6@4 ~@2 f6@3 ~@3]/2", L: "e6 ~@5",
  M: "[c6@8 ~@2 c6@2 g6@4 c7@5 ~ a6@9 ~@5 g6@4 f6@2 e6@4 d6@2]/2",
  N: "[c6@7 ~@3 c6@2 g6@4 c7@5 ~ a6@8 ~@6 g6@4 f6@2 e6@4 d6@2]/2",
  O: "[c6@5 ~@5 c6@2 g6@4 c7@4 ~@2 a6@8 ~@6 f6@3 ~@3 f6@3 ~@3]/2", P: "e6@5 ~@19",
})).s("gm_glockenspiel").gain(0.38).pan(0.7)

// other · trumpet
const trumpet = note(`<
  A ~@3 B C ~@9 D@2 E F ~ G H ~@9 D@2 E F ~ I J K L K M N F O P Q ~@9 D@2 E F ~ R ~@6
>`.pickRestart({
  A: "[c5,a5]@23 ~", B: "~@4 c6 ~ c6 ~", C: "c6 ~", D: "[c5@8 ~@2 d5@11 ~ e5@12 f5@3 ~@3 f5@4 ~@4]/2",
  E: "e5@4 e5@2 e5@3 ~@3 d5@4 c5 ~@7", F: "g5@2 ~@2 a5@2 ~@4 c6@3 ~@11", G: "g5@2 ~@2 g5@2 ~@4 c6@3 ~@5 g5 ~@5",
  H: "c6@17 ~@7", I: "g5@2 ~@2 g5@2 ~@4 c6@3 ~@3 [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ [a4,a5] ~",
  J: "[c5,c6] ~ [c5,c6] ~ [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ [a4,a5] ~ [c5,c6] ~@11", // C A C A C
  K: "~@16 [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ [a4,a5] ~", // A C A
  L: "[c5,c6] ~ [c5,c6] ~ [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ a5@2 [c5,c6] ~@11, ~@10 a4 ~@13", // C A C
  M: "[c5,c6] ~ [c5,c6] ~ [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ [a4,a5] ~@13", N: "~@6 e5@3 ~ c5@2 d5@4 c5@2 ~@6",
  O: "e5@3 ~ e5@2 e5@2 ~@4 d5@4 c5@2 ~@6", P: "g5@3 ~ g5@3 ~@3 c6@3 ~@11", Q: "c6@17 ~@7, b5 ~@23",
  R: "g5@2 ~@2 g5@2 ~@4 c6@3 ~@11",
})).s("gm_trumpet").gain(0.44).pan(0.3)

// chords · alto sax
const alto_sax = note(`<
  ~@4 A B ~@7 C D E@2 F G ~ H I ~@7 C D E@2 F G ~ J ~@5 K L M N O ~@7 C D E@2 F G ~ J ~@6
>`.pickRestart({
  A: "~@4 [f3,a3,f4] ~ [f3,a3,f4] ~", B: "[g3,c4,e4] ~", C: "[c3,g3,e4]@4 ~ [d3,a3,f4]@5 ~@2",
  D: "[c3,g3,e4]@8 ~@2 [d3,a3,f4]@9 ~@5", // C Dm
  E: "[[c3,g3,e4]@8 ~@2 [d3,a3,f4]@10 ~@2 [e3,b3,g4]@10 ~@2 [f3,c4,a4]@4 ~@2 [f3,c4,a4]@3 ~@5]/2", // C Dm Em F
  F: "[g3,c4,e4]@4 [g3,e4]@2 [g3,c4,e4]@3 ~@3 [f3,a3,d4]@4 [f3,a3,c4]@2 ~@6, ~@4 c4 ~@19", // C Dm F
  G: "[b3,g4]@3 ~ [c4,a4]@2 ~@4 [e4,c5]@2 ~@12", H: "[b3,g4]@2 ~@2 [b3,g4]@3 ~@3 [e4,c5]@3 ~@5 [g3,g4] ~@5",
  I: "[c4,e4]@3 ~", J: "[b3,g4]@2 ~@2 [b3,g4]@3 ~@3 [e4,c5]@3 ~@11", K: "~@6 [g3,c4,e4]@4 c4 ~ [f3,a3,d4]@4 c4 ~@7",
  L: "[b3,g4] ~ [c4,a4] ~@2 [e4,c5] ~@6", // Em F C
  M: "[g3,c4,e4]@3 ~ [g3,c4,e4]@2 [g3,c4,e4]@3 ~@3 [f3,a3,d4]@3 ~ [f3,a3,c4]@3 ~@5", // C Dm F
  N: "[g3,g4]@3 ~ [g3,g4]@3 ~@3 [c4,c5]@3 ~@11", O: "[c4,e4,c5]@3 ~",
})).s("gm_alto_sax").gain(0.28).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@12 A B@7 C ~@7 A C@2 B C B D E D@6 E@3 C ~@7 A E D@3 C E B F C D@5>".pickRestart({
  A: "x!4", B: "x ~@4 x!2 ~@4 x", C: "x ~@4 x!2 ~@5", D: "x!2", E: "x ~@5 x ~@4 x", F: "x ~@5 x ~ x ~@2 x",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct("<A B ~@10 C D@8 ~@7 E D@17 ~@7 E D@9 F D F D G>".pickRestart({
  A: "x!2 ~@10 x!10 ~@2", B: "x", C: "x!12", D: "~ x ~ x", E: "~@3 x!9", F: "~@3 x ~@3 x!5", G: "~ x ~@2",
})).gain(0.49)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@2 x!10 ~@10 x!2] ~@27 [x!3 ~@9] ~@24 [x!3 ~@9] ~@14>").gain(0.27)

// drums · hihat
const hihat = s("hh").struct("<~@13 A@7 B ~@8 A@16 C ~@8 A@9 C A C A D>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x ~@3", C: "x ~ x!2 ~ x!2 ~@5", D: "x ~ x!2 ~ x ~@6",
})).gain(0.27)

// drums · congas
const congas = s("conga:13").struct("<~ A@21 B A C A B A@2 ~@13 A@5 B A C A B A@16>".pickRestart({
  A: "~ x ~@2", B: "~ x!3", C: "~ x ~ x",
})).gain(0.7)

// drums · congas
const congas_2 = s("conga:18").struct("<~ A@19 B A C D E F G F H ~@13 A@5 C D E F G F H A@13 ~>".pickRestart({
  A: "~@9 x ~ x", B: "~@3 x", C: "~@4 x ~@5 x ~@11 x!2", D: "x ~@7 x ~@2 x", E: "~@4 x ~@11 x ~@5 x!2", F: "x ~ x",
  G: "~@11 x", H: "~@2 x!2",
})).gain(0.7)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~ A B C B A B C B A B C B A B C B A B C D C E F G H I H J ~@13 B@2 C B C E F G H I H J A B C B A B C B A B C B A K
>`.pickRestart({
  A: "~@5 x!2 ~ x ~@3", B: "~@2 x ~@2 x!2 ~ x ~@3", C: "x ~ x ~@2 x!2 ~ x ~@3", D: "~@2 x ~@2 x!2 ~ x ~ x!2",
  E: "~@2 x", F: "~@2 x ~@2 x ~@3 x ~@2", G: "~@5 x!2 ~@5", H: "~@2 x ~@2 x!2 ~@4 x", I: "x ~ x ~@2 x ~@2 x ~@3",
  J: "~@2 x ~@2 x ~@5 x", K: "~@2 x ~@2 x!2 ~@5",
})).gain(0.7)

// … 4 more lines

More by The Temptations