Strudelify

Cloud Nine

The Temptations

KeyD majorTempo118 bpm
0:00/0:00
// Cloud Nine — The Temptations
// 118 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 65, 4/4 at bar 65, 2/4 at bar 88, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// 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(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 · electric guitar clean · "CLOUD NINE                      ;Barrett Strong / Norman Whitfield"
const electric_guitar_clean = note(`<
  ~@3 A B C ~@2 D@2 E@2 ~@8 F@2 G@2 ~@8 F@2 H@2 F@2 I@2 J ~ K ~ K ~@3 L@2 M N ~@7 O@3 P Q R S T U T V W X Y Z@2 AA ~@7
  AB O@3 AC@2 AD@2 AC@2 AE@2 AF@2 AG@2 ~@5
>`.pickRestart({
  A: "c4 d4 ~@2 d4@3 ~ c4 d4 ~@2 d4@3 ~", B: "c4 d4@2 ~ d4@3 ~ c4 d4@2 ~ d4@3 ~",
  C: "c4 d4@2 ~ d4@3 ~ c4 d4 ~@2 d4@3 ~", D: "[[d3,c4]@4 c4@2 f4 [f#3,f4]@24 ~, [f#3,f4]@6 c4@25 ~, ~@4 d3@27 ~]/2",
  E: "[[f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,d4]@3 [d3,d4]@2 [d3,f#3,a3,d4]@2 [f#3,d4] [f#3,d4]@2 [f#3,a3,d4]@18, d3@4 [f#3,a3]@5 ~@2 a3@3 g#5 ~@17, ~@3 d3@5]/2", // D F#m
  F: "[[d3,f#3,c4,f4]@7 ~]/2", // D7
  G: "[[d3,d4]@2 [d3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 ~@2 a3 [d3,a3]@2 [d3,a3]@17 ~, a3@4 ~@5 [d3,a3]@3 ~@20, ~@10 d4@2 ~@2 c4@11 ~@7]/2", // D D5
  H: "[[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4]@2 [a3,d4] [d3,a3,d4]@2 [d3,a3,c4]@15 ~@3]/2", // D5 D7
  I: "[[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4] [a3,d4]@2 [a3,c4]@18, ~@3 d3@5]/2", // D5 Am
  J: "~@4 e4@4 ~@4 e4@3 ~", K: "~@4 e4@3 ~@5 e4@3 ~",
  L: "[[e2,a4,a#4] g#2 ~ [f#2,a2] e2@2 ~@26, [d3,f#3,c4,f4]@27 ~@5]/2", // A F#m D7
  M: "[a3,d4]@2 [a3,d4]@2 [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4] [a3,d4]@2 [a3,c4]@2, d3 ~@2 d3", // D5 Am
  N: "[d3,a3,d4]", O: "c3 d3 ~@2 d3@3 ~ c3 d3 ~@2 d3@3 ~", P: "c3 d3 ~@2 d3@3 ~ c3 d3 ~@2 d3@4",
  Q: "c3 d3 ~@2 d3@4 ~@4 [a3,d4,f#4]@4", R: "~ [b3,d4,g4] ~ [a3,d4]", S: "~@2 [b3,d4,g4]@2 ~@2 e3!2",
  T: "e3 e3@2 d3@3 [a3,d4,f#4]@2, ~@12 [g#3,c#4,f4] ~@3", U: "~@2 [f3,b3]@2 ~@2 e3!2, ~@4 [e3,a#3] ~@11",
  V: "~@4 [e3,a#3] b3@4 ~@3 e3@2 e3@2, ~ f3 ~@2", W: "e3@2 e3@3 ~ d3@6 [a3,d4,f#4]@3 ~, ~@12 [g#3,c#4,f4] ~@3",
  X: "~ [f3,b3] ~@2, ~@4 [e3,a#3] ~@11", Y: "~@8 c3 d3 ~@2 d3@4", Z: "c3 d3 ~@2 d3@4 c3 d3 ~@2 d3@4",
  AA: "c3 d3@2 ~ d3@4 ~@8", AB: "~@8 c3 d3 ~@2 d3@3 ~",
  AC: "[~@2 e3 f3!2 f3@2 d3@3 [d4,f#4]@2 ~@2 [f3,b3]@2, ~@20 [c#4,f4] ~@7 [e3,a#3] ~@3]/2", // D Fdim C# Edim
  AD: "[~@2 e3 f3!2 f3@2 ~@3 [d4,f#4]@2 ~@2 [f3,b3]@2, ~@14 d3@9 ~@5 [e3,a#3] ~@3, ~@20 [c#4,f4] ~@11]/2", // D Fdim Edim C#
  AE: "[~@2 e3 f3!2 f3@2 d3@3 [a3,d4,f#4]@2 ~@2 [f3,b3]@2, ~@20 [g#3,c#4,f4] ~@7 [e3,a#3] ~@3]/2", // D Fdim C# Edim
  AF: "[~@4 e3@2 f3@2 f3@2 f3@4 d3@6 [a3,d4,f#4]@4 ~@4 [e3,g3,a#3] ~@3, ~@20 [g#3,c#4,f4] ~@7 [f3,b3]@4]/2", // D Edim C# Fdim
  AG: "[~@4 e3@2 f3@2 e3@2 e3@4 d3@6 [d4,f#4]@4 c#4 ~@3 [f3,b3]@4, ~@20 [c#4,f4] ~@7 [e3,a#3] ~@3]/2", // D Fdim C# Edim
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.3)

// bass · fretless bass
const bass = note(`<
  ~@4 A@2 B C B D B C B C E F G H I J B K B K B K L M N O P@2 B K B Q R C B S T U V U V U W X B K B Y Z AA Z AB Z AB Z
  ~@2 A@2 AC AD AE AF AG AH AI AJ AK ~ AL AM AN AO@2 ~ AP AQ AR ~@2 AL A@2 AS AT AU@2 AV@2 AW@2 AX AY AZ@2 BA@2 BB@2 ~
>`.pickRestart({
  A: "c2 d2@2 ~ d2@3 ~ c2 d2@2 ~ d2@3 ~", B: "d2@2 ~ d2 a1 c2 ~ d2@3 ~ d2 a1@2 c2 ~",
  C: "d2@2 ~ d2 a1 c2 ~ d2 ~ d2 a1 d2 c2@2 c#2@2", D: "d2@2 ~ d2 a1 c2 ~ d2 ~ f#1@3 g1@2 a1 ~",
  E: "d2@2 ~ d2 a1 c2 ~ d2@2 d2 a1@2 b1 c2 c#2@2", F: "d2@3 ~ a1 c2 ~ d2 ~ d2 a1@2 c2@2 c#2 ~",
  G: "d2@2 ~ d2 a1 c2@2 d2@2 f#1@2 a1 g1@2 a1@2", H: "d2@2 ~ d2 a1 c2@2 d2 ~ d2 a1 ~ c2@2 c#2@2",
  I: "d2@2 ~ d2 a1 c2 ~ d2 ~ d2 a1 d2 b1 ~ c2@2", J: "d2@2 ~ d2 a1 c2 ~ d2 ~ g2@2 g#2 a2 a1@3",
  K: "d2@2 ~ d2 a1 c2 ~ d2 ~ d2 a1 ~ c2@2 c#2@2", L: "d2@2 ~ d2 a1 c2 ~ d2@2 d2 a1 d2 c2 ~ c#2@2",
  M: "d2@2 ~ d2 a1 c2 ~ d2 ~ f#1@2 a1 g1@2 a1 ~", N: "d2@2 ~ d2 a1 c2 ~ d2 ~ a1@3 c2@2 c#2@2",
  O: "d2@2 ~ d2 a1 c2@2 d2 ~ d2 a1 d2 b1@2 c2@2",
  P: "[d2@2 ~ d2 a1 c2@2 d2 ~ d2 a1 ~ c2 c#2 ~ d2@3 ~ d2 a1 c2 ~ d2 ~ d2 a1 ~ c2 ~ c#2@2]/2",
  Q: "d2@2 ~ d2 a1 c2 ~ d2 ~ f#1 ~ g1 ~ a1@2 c2", R: "d2@2 ~ d2 a1 c2 ~ d2@2 d2 a1@2 c2@2 c#2 ~",
  S: "d2@2 ~ d2 a1 c2 ~ d2 ~ a1@2 ~ c2 ~ c#2 ~", T: "d2 ~ d2@4 ~@2 d2 ~ d2@3 ~@3", U: "g2@7 ~ a2 g2@2 f2@2 d2@2 c2",
  V: "d2@2 d2@3 ~@3 d2 ~ d2@4 ~@2", W: "a1 ~ a1@3 c2 c#2 d2 d#2@2 e2 ~ g2@2 a2@2",
  X: "a1 ~ a1@2 ~ c2 c#2 d2@2 e2@2 g2 a2@2 a1@2", Y: "d2@2 ~ d2 a1 c2 ~ d2@4 ~ c2@3 ~", Z: "d2@3 ~@13", AA: "~@6 c2 ~",
  AB: "~@12 c2@3 ~", AC: "c2 d2@2 ~ d2@3 ~ d2@7 ~", AD: "g2@5 ~ d2@3 ~ e2 ~ f#2 ~ a2 d2",
  AE: "g2@2 b2 ~ d3 ~ d2@4 e2@2 f#2@2 a2 ~", AF: "g2 ~ b2 ~ d3 ~ d2@4 e2 ~ f#2 ~ a2 d2",
  AG: "g2 ~ b2 ~ d3@2 ~ d2!2 ~ e2 ~ f#2@2 a2 d2", AH: "g2@2 b2 ~ d3 ~ d2@4 f#2@2 a2 ~ d2 ~",
  AI: "g2@2 b2@2 d3@3 d2!2 ~ f#2 ~ a2@2 d2 ~", AJ: "g2@2 b2@2 d3@2 d2@4 f#2@2 a2@2 d2 ~",
  AK: "g2@2 b2@2 d3@2 d2 ~ d2@3 ~@5", AL: "~@8 c2 d2@2 ~ d2@3 ~", AM: "c2 d2@2 ~ d2@3 ~ c2 d2@2 ~ d2@2 ~ c2",
  AN: "f#1 ~ g1 ~ c2@3 ~ d2@3 ~@5", AO: "[~@2 f#1@5 ~ g1@3 ~ a1@7 ~ c2@2 ~@2 d2@3 ~@5]/2", AP: "~@2 c2 ~ d2 ~@2 f#1",
  AQ: "~@2 g1@3 ~ a1@3 ~ b1@5 ~", AR: "c2@3 ~ c2@3 ~ d2@3 ~@5", AS: "d2 ~ d2@2 f#2@2 a2 d2 g2@2 b2@2 d3 ~ d2@2",
  AT: "~@2 e2 ~ f#2 ~ a2@2 g2@2 b2 ~ d3@3 d2",
  AU: "[d2@2 e2@2 f#2@2 a2 ~ g2 ~ b2 ~ d3 ~ d2@4 f#2 ~ a2 ~ d2@2 g2 ~ b2 ~ d3@2 ~ d2]/2",
  AV: "[d2 ~ f#2 ~ a2@2 g2@3 ~ b2 ~ d3 ~ d2@4 f#2@2 a2 ~ d2 ~ g2@2 b2@2 d3@3 d2]/2",
  AW: "[d2 ~ f#2 ~ a2@2 d2 ~ g2@2 b2@2 d3@2 d2@4 f#2@2 a2@2 g2@3 a2 b1@2 c2 ~ c#2 ~]/2",
  AX: "d2 ~ f#2@2 a2@2 d2@2 g2@2 b2@2 d3 ~ d2@2", AY: "~@2 f#2 ~ a2 ~ d2@2 g2@2 b2 ~ d3@3 d2",
  AZ: "[d2@2 f#2@2 a2@2 g2@3 ~ b2 ~ d3 ~ d2@4 e2 ~ f#2 ~ d2@2 g2 ~ b2 ~ d3@2 ~ d2]/2",
  BA: "[d2 ~ f#2 ~ a2@2 g2@3 ~ b2 ~ d3 ~ d2@4 e2@2 f#2 ~ d2 ~ g2@2 b2@2 d3@3 d2]/2",
  BB: "[d2 ~ f#2 ~ a2@2 g2@4 b2@2 d3@2 d2@4 f#2@2 a2@2 g2@3 a2 b1@2 c2 ~ c#2 ~]/2",
})).s("gm_fretless_bass").gain(0.44)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@5 A B ~@33 C D E F G H I J ~@15 K L@3 M N L O P ~ Q R S T@6 U ~@2 V W@2 X Y Z AA AB AC AD AE AF AG AH AI AF AG AH ~
>`.pickRestart({
  A: "~ d5 ~ d5 ~ d5 ~ d5 [d4,d5,d6] d5 ~ d5 ~ d5 ~ d5, [d4,d5]!4 ~ [d4,d5]!3", B: "[d4,d5] ~@15",
  C: "[d3,f#3]@4 [c4,f4]@3 c4@3 d3@2 [d3,c4,f4]@2 ~@2, ~@2 [d3,f#3]@3 f#3@2 ~, ~@7 f4@5 ~@4", // D F5 Dm7 D
  D: "~@2 g2@2 g4@2 ~ g4!2 [b3,d4,g4]@2 [b3,d4] d4 [d3,g3,b3,d4,g4] [d4,g4] ~, [d3,g3,b3]@2 [g2,d3]@5 ~, ~@4 [g3,b3,d4]@5 g3@4 ~@3", // G Bm G G5 G G5 G
  E: "[d3,f#3,c4]@2 [d3,f#3]@2 f4@3 f4@2 ~ [d3,f#3,c4,f4]@2 [d3,f#3,c4,f4]@2 ~@2, ~@2 [d3,f#3,c4]@3 ~@3", // D7 D D7
  F: "[g3,b3]@2 [g3,b3]@2 [d4,g4]@3 [d4,g4]@2 [d3,g3,b3,d4,g4]@3 [d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4] ~, d3@4 [d3,g3,b3]@5 ~@7, ~@2 g2@13 ~", // G G5 G
  G: "[d3,f#3,c4] f#3 [f#3,c4,f4]@2 [f#3,c4,f4]!2 [d3,f#3,c4,f4] ~, ~ d3@2 ~", // D7 F D7
  H: "g2@2 g2@2 [d3,g4]@3 d3@2 [d3,b3,d4,g4]@2 d3 [g2,d3,b3,d4,g4]@2 [d3,g3,b3] ~, [d3,g3,b3,d4,g4] g2@2 ~, ~@4 [g3,b3,d4]@5 g3@5 ~@2", // G5 G
  I: "[e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@3 [e3,g3,c#4]@2 [e3,g3]@2 [e3,g3] g3@2 [a2,g3]@2, a2 a2@2 e3, ~@12 c#4 ~@3", // C#dim Em A7
  J: "[e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@3 c#4!2 ~ c#4 [g3,c#4] c#4@2 c#4@2, a2 a2@2 [a2,e3,g3], ~@7 e3@5 ~@4, ~@7 g3@2 [g3,c#4]@2 ~@5", // C#dim Gdim A7 Gdim
  K: "~@8 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3", L: "[g4,b4,d5] ~@3 [g4,b4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3",
  M: "[g4,b4,d5] ~@3 [g4,b4] ~@3 [f#4,a4] ~@3 [f#4,a4,d5] ~@3", // G F#m D
  N: "[b4,d5] ~@3 [g4,b4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3", // Bm G D
  O: "[b4,d5] ~@3 [g4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3", P: "[b4,d5] ~@3 [g4,b4,d5] ~@11",
  Q: "~@8 c5 d5 ~@2 d5@4", R: "d5 ~@3 d5!12", S: "d5@9 ~@3 d6!4", T: "d6!16", U: "d6!4 d6@2 [b5,c6,c#6] ~@9",
  V: "~@9 d5!7",
  W: "[d5!15 ~ [f#3,a3,d4,f#4]@4 [f#3,a3,d4,f#4]@2 ~ [d4,g4] g4 ~ g3@2 [g3,b3,d4,g4]@2 g4 ~, ~@15 d5@2 ~@6 [g3,b3]@3 ~@6, ~@6 d4 ~]/2", // D G5 G
  X: "[a3,d4,f#4]@4 [a3,d4,f#4]@2 ~ [d4,g4] ~@2 g3@2 [g3,b3,d4,g4]@2 g4 ~, f#3@6 ~ [g3,b3]@3 ~@6, ~@2 [d4,g4] ~", // D G5 G G5
  Y: "[a3,d4]@4 [a3,d4,f#4]@2 ~ [g3,b3,d4,g4] [g3,b3]@2 g3@2 [g3,b3,d4,g4]@3 ~, f#3@3 ~ [d4,g4]@2 ~@2", // D5 D G G5
  Z: "[d4,f#4]@4 [a3,d4,f#4]@2 f#4 g4 ~@2 [g3,b3]@2 [g3,b3,d4,g4]@2 ~@2, f#3@7 [g3,b3,d4]@3 ~@6, a3 ~@7 g4@4 ~@4", // D G
  AA: "[a3,d4,f#4]@4 [a3,d4,f#4]@2 ~ g4 ~@2 b3@2 [b3,d4,g4]@2 ~@2, f#3@6 ~ d4@5 ~@4, ~@7 [g3,b3]@3 g3@4 ~@2, ~@2 g4 ~", // D G
  AB: "[a3,d4,f#4]@4 [f#3,a3,d4,f#4]@2 ~ [g3,b3]@3 [g3,b3]@2 [g3,b3,d4,g4]@2 g4 ~, ~@7 [d4,g4]@5 ~@4", // D G G5
  AC: "[a3,d4]@4 [a3,d4,f#4]@2 ~ g4 ~@2 b3@2 [g3,b3,d4,g4]@2 ~@2, f#3@6 ~ g3@5 ~@4, ~@7 [b3,d4]@3 ~@6, ~@2 g4 ~", // D5 D G Bm
  AD: "[f#3,a3,d4,f#4]@4 [f#3,a3,d4,f#4]@2 ~ [d4,g4] ~@4 [b3,d4,g4]@2 ~@2, ~@7 [g3,b3]@3 g3@4 ~@2, ~@2 [d4,g4] ~", // D G5 G G5
  AE: "[a3,d4]@4 [a3,d4,f#4]@2 ~ [d4,g4] ~@2 b3@2 [b3,d4,g4]@2 ~@2, f#3@6 ~ [g3,b3]@3 g3@4 ~@2, ~@2 [d4,g4] ~", // D5 D G5 G G5
  AF: "[d4,f#4]@4 [d4,f#4]@2 ~ [d4,g4] ~@2 b3@2 [b3,d4,g4]@2 ~@2, [f#3,a3]@6 ~ [g3,b3]@3 g3@4 ~@2, ~@2 [d4,g4] ~", // D G5 G F#m G G5
  AG: "[f#3,a3,d4,f#4]@4 [f#3,a3,d4,f#4]@2 ~ [d4,g4] ~@2 [g3,b3]@2 [g3,b3,d4,g4]@2 ~@2, ~@7 [g3,b3]@3 ~@6, ~@2 [d4,g4] ~", // D G5 G G5
  AH: "[f#3,a3,d4,f#4]@4 [f#3,a3,d4,f#4]@2 ~ [g3,b3,d4,g4] ~@2 g3@2 [g3,b3,d4,g4]@3 ~, ~@2 [b3,d4,g4] ~", // D G
  AI: "[a3,d4]@4 [a3,d4,f#4]@2 ~ [d4,g4] ~@2 b3@2 [b3,d4,g4]@2 ~@2, ~@7 [g3,b3]@3 g3@4 ~@2, ~@2 [d4,g4] ~", // D5 D G5 G G5
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.7)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_3 = note(`<
  ~@40 A B C D E F G ~@20 H I ~ J I ~@2 K L ~@6 M ~@2 N ~@3 O ~ P Q O R O ~@3 O ~@4
>`.pickRestart({
  A: "[c4,f4] ~@3", B: "d4@4 ~@2 g4 ~@4 g4 b3 ~ g2 b3, g2 ~@7", C: "f4@4 ~@5 f4 ~@6", D: "d4 ~@3, g2 ~@7",
  E: "~@3 d3 ~@11 g4", F: "~@7 g4@2 ~@7", G: "~@6 a2 ~", H: "~@4 d5 ~@3 d5 ~@7", I: "g4 ~@15", J: "g4 ~@3 b4 ~@11",
  K: "~ d5!3 ~@12", L: "~@9 d6!3 ~@4", M: "~@7 [g#5,a5,a#5] ~@8", N: "~@8 d5 ~@7", O: "f#4 ~@3", P: "~@9 b3 ~@6",
  Q: "f#3 ~@3", R: "~@5 b3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.7)

// other · pan flute
const pan_flute = note(`<
  ~@32 A@2 B C D@2 B ~@8 E@3 B F G F G ~@2 F G ~ H@3 I@3 ~@3 J K ~@4 L ~ L ~ M ~ N ~@2 O@2 P@3 Q R Q R Q R Q R Q ~@6
>`.pickRestart({
  A: "[[f#3,c4,f4]@9 ~@4 [b2,b3] [d3,d4]@2]/2", B: "[f#3,a3,c4,d4] ~@3", C: "~@5 [c3,c4] [d3,d4]!2",
  D: "[f4@8 d4@4 ~ [c3,c4] [d3,d4]@2, [f#3,c4]@3 ~]/2", // C D F#dim
  E: "[~@15 f4@17 d4@8 ~@2 [c3,c4]@2 [d3,d4]@4, ~@15 [f#3,c4]@25 ~@8]/3", F: "~@3 [d3,d4]", G: "[d3,d4]@3 ~@13",
  H: "[~@7 d4@2 c4@2 [d4,d5]@2 [c4,c5]@2 d4@2 c4@2 ~ d4 ~@3]/3", // D C
  I: "[d4@2 b3@2 a3@2 [f#3,c4,f4,a4]@29 ~ [d3,d4]@4 [d3,d4]@5 ~@3]/3", J: "~@4 g#4 g4@2 a4", K: "f4 d4@2 f4 d4 ~@3",
  L: "~@4 [d3,d4]@4 [d3,d4]@3 ~@5", M: "~@4 [d4,d5]@4 [d4,d5]@3 ~@5", N: "~@4 d4@4 d4@3 ~@5",
  O: "[~@3 d4@2 c4@2 [d4,d5]@2 [c4,c5]@2 d4@2 c4@2 ~]/2", P: "[d4@2 ~@6 d4@2 b3@2 a3@2 [f#3,c4,f4,a4]@29 ~ d4@4]/3",
  Q: "d4 ~@7", R: "~@3 d4",
})).s("gm_pan_flute").gain(0.25).pan(0.4)

// other · clavinet
const clavinet = note(`<
  ~ A@2 B A@2 ~@2 C@2 D@2 ~@8 E@2 F@2 ~@8 G@2 H@2 E@2 I@2 ~@8 J@2 F@2 ~@7 K L K A M@2 ~@6 N L@3 O ~@6 P Q R A@2 ~@17
>`.pickRestart({
  A: "c3 d3 ~@2 d3@3 ~ c3 d3 ~@2 d3@3 ~", B: "c3 d3@2 ~ d3@3 ~ c3 d3 ~@2 d3@3 ~", C: "[[d3,f#3,c4,f4]@15 ~]/2",
  D: "[d3,f#3,a3]/2", E: "[[d3,f#3,c4,f4]@31 ~]/2", F: "[[d3,f#3,a3]@31 ~]/2", G: "[[d3,f#3,c4,f4]@7 ~]/2",
  H: "[[d3,f#3,a3]@29 ~@3]/2", I: "[[d3,f#3,a3]@15 ~]/2", J: "[[d3,f#3,c4,f4]@29 ~@3]/2",
  K: "c3 d3 ~@2 d3@4 c3 d3 ~@2 d3@3 ~", L: "c3 d3 ~@2 d3@4 c3 d3 ~@2 d3@4",
  M: "[c3 d3 ~@2 d3@3 ~ c3 d3 ~@2 d3@12 ~@8]/2", N: "~@8 c3 d3 ~@2 d3@4", O: "c3 d3 ~@2 d3@4 ~@8",
  P: "~@8 c3 d3 ~@2 d3@3 ~", Q: "c3 d3 ~@2 d3@3 ~ c3 d3 ~@2 d3@4", R: "c3 d3 ~@2 d3@3 ~ c3 d3@2 ~ d3@3 ~",
})).s("gm_clavinet").gain(0.4).pan(0.9)

// other · electric guitar clean
const electric_guitar_clean_4 = note("<~@40 A ~ A ~ B ~@17 C D ~@40>".pickRestart({
  A: "~ a4 ~ a4", B: "~@4 a4@3 ~@5 a4@3 ~", C: "~@6 [d4,d5]!2 ~ d5 ~ d5!5, ~@8 [d4,d5]@2 [d4,d5]@2 d4@3 ~",
  D: "~ d5 ~ d5 ~ d5 ~ d5 ~ d5!3 d5@4, [d4,d5]!5 d4@3", // D
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.3)

// other · piano · C D C D C D C D …
const piano = note(`<
  ~@2
  [[c3,c4] d3@2 ~ [d3,d4]@3 ~ [c3,c4] [d3,d4] ~@2 [d3,d4]@3 ~, ~ d4 ~@14]
  [[c3,c4] [d3,d4] ~@2 [d3,d4]@3 ~ [c3,c4] d3@2 ~ [d3,d4]@3 ~, ~@9 d4 ~@6]
  [[c4,c5] d4@2 ~ [d4,d5]@3 ~ [c4,c5] [d4,d5] ~@2 [d4,d5]@3 ~, ~ d5 ~@14]
  [[c4,c5] d4@2 ~ [d4,d5]@3 ~ [c4,c5] d4@2 ~ [d4,d5]@3 ~, ~ d5 ~@7 d5 ~@6]
  ~@98
>`).s("gm_piano").gain(0.31).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B C D ~ D ~ D ~@9 D ~ D ~ E@8 D ~ D ~ D ~ D ~ A F A G A G H I D ~ D ~ D J D J D J D A@2 K L M C@2 N C N C N O A
  P Q R ~ S ~ S ~ S T A P Q U V C Q K Q K Q K C@2 Q K Q K Q K ~
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!5 ~ x!2", C: "x!8", D: "x", E: "x!2 ~@6", F: "x ~@3 x!2 ~ x", G: "x ~@4 x ~ x",
  H: "x!2 ~ x ~ x ~ x", I: "x!2 ~ x!3 ~ x", J: "~@3 x", K: "x!3 ~ x!4", L: "x!3 ~ x ~ x!2", M: "x!5 ~@2 x",
  N: "x!3 ~ x!3 ~", O: "x!6 ~@2", P: "x!2 ~@2 x!3 ~", Q: "x!7 ~", R: "x ~ x!3 ~@3", S: "~ x!2 ~", T: "~@4 x!2 ~@2",
  U: "x ~ x!6", V: "x ~@2 x!5",
})).gain(0.38)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@4 A ~@56 B C ~@3 D ~ D ~ D ~@2 E@2 F ~@8 E@2 F ~@2 E B E B E B ~@2 E B E B E B ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@4", C: "~@3 x ~ x ~@2", D: "~@3 x ~@3 x", E: "~@7 x", F: "~ x ~@6",
})).gain(0.27)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~@15 A ~ B ~ B ~ B ~ C ~@3 A ~@19 D ~@27 D@3 ~@2>".pickRestart({
  A: "~@11 x ~@3 x", B: "~@11 x ~@4", C: "~@15 x", D: "~@7 x ~@8",
})).gain(0.22)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@4 B C@14 D C@11 D C D C D C D C D C D C D C D C D C D C D C@10 E F@3 G F@3 H A@3 I J@11 K F@3 K F@3 K F@3 D C@3 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!13 ~ x ~", D: "~ x!12 ~ x ~", E: "x!8 ~@2 x ~ x ~ x ~", F: "x!8", G: "x!4 ~ x!3",
  H: "x!4 ~@2 x ~", I: "~@4 x ~@4 x!7", J: "x!5 ~ x ~ x!8", K: "~ x!7",
})).gain(0.22)

// … 85 more lines

More by The Temptations