Strudelify
Nightshift cover art

1985 · Soul Legends

Nightshift

Commodores

KeyA♭ majorTempo105 bpm
0:00/0:00
// Nightshift — Commodores
// 105 bpm, 4/4, key Ab major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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 · fretless bass · "Fretless  Bass"
const bass = note(`<
  ~@4 A B C D E@2 F G F B H@2 I@2 J K L B M@2 I@2 N O P Q R S T U V W X Y Z AA@2 AB AC AD AE Y AF AG AH AI AJ AK AL AM A
  AN N AO AP B AQ AR AS AT AU AV AW B AX@2 AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX
  BY ~@7 AO BZ Y CA BV CB CC CD@2
>`.pickRestart({
  A: "g2", B: "e2@2 c2 e2", C: "d2", D: "d3@13 ~@3", E: "[c2@23 ~ a2@4 c2@4]/2", F: "g1@15 ~", G: "g2@6 [a3,d4]@9 ~",
  H: "[d2@27 ~ a2@4]/2", I: "[c2@27 ~ c2@4]/2", J: "d2@15 ~", K: "d2@4 b1@2 c2 d2", L: "g1 g2", M: "[d2@3 a2]/2",
  N: "d2@7 ~", O: "d2@2 a2 d2", P: "e1@3 b1@3 e2@6 e1@2 b1@2", Q: "a1@3 e2@3 a2@6 a1@2 e2@2, g1 ~@15",
  R: "d2@3 a2@3 d3@3 ~ d2!2 a2 b2 a2@2", S: "d2@3 a2@3 d3@2 d2 ~ d2!2 a2@2 d2 ~", T: "e1@2 ~ b1@3 e2@4 e1!2 b1@2 e2@2",
  U: "a1@3 e2@3 a2@4 a1@2 e2@2 a1@2", V: "c2@13 ~@2 e3", W: "~@5 c2@9 ~@2, e3@3 ~", X: "g1@3 g1@3 d2@8 g1 d2",
  Y: "e2@2 ~ e2@2 ~ e2@2 c2@4 e2@4", Z: "d2@3 d2@3 a2@6 d2@3 ~",
  AA: "[d2@3 d2@3 d2@4 a2@5 ~ c2@2 ~ c2@2 ~ c2@9 ~, ~@15 d2@2 ~@15]/2", AB: "c2@2 ~ c2@2 ~ c2@5 ~ g2@4",
  AC: "g1@2 ~ g1@2 ~ g1@8 ~@2, a1 ~@15", AD: "g1@2 ~ g1@2 ~ d2 ~ d2@3 ~ d2@2 b1@2",
  AE: "g1@2 ~ g1@2 ~ g1@6 d2@4, a1 ~@15", AF: "d2@2 ~ d2@2 ~ d2@6 ~@2 a1 b1", AG: "d2@2 ~ d2@3 a2@6 d2@4",
  AH: "c2@2 ~ c2@2 ~ c2@6 ~@2 c2 ~", AI: "d2@2 ~ d2@2 ~ d2@3 ~ d2 ~ d2@3 ~",
  AJ: "g1@2 ~ g1@2 ~@3 ab2 ~@5 gb2@2, ~@6 g2@7 ~@3", AK: "e2@2 ~ e2@2 ~ e2@4 b2@2 e2@2 b1@2, ~@10 db3 ~@5",
  AL: "c2@2 ~ c2@2 ~ c2@3 ~ c2 ~ c2@2 db2 ~", AM: "d2@2 ~ d2@2 ~ d2@8 ~@2", AN: "e2@8 ~ b1 ~@2 e2@4, ~@2 c2 ~",
  AO: "~ [a2,d3]@6 ~", AP: "g1@11 ~ g2@4", AQ: "d2@7 ~@3 d3 e3 d3@4", AR: "d2@11 ~ [a2,d3]@4", AS: "c2@12 ~@2 g1 a1",
  AT: "~ db2 ~@10 c3@4, c2@3 ~", AU: "d2@3 ~", AV: "~@2 a2@2 d3@7 ~ b2@3 ~", AW: "g1@6 ~ g2",
  AX: "[d2@9 ~ a2@6 d2@7 ~@2 gb2!2 a2@5, ~@10 d3@15 ~@7]/2", AY: "c2@13 ~@3", AZ: "[g2,c3]@12 c2@3 ~",
  BA: "d2@3 a2@3 d2@10", BB: "d2@4 ~@3 d3@3 b2@2 a2@2 b2 ~", BC: "e1@3 b1@3 e2@4 e1@2 b1@2 bb1 ~",
  BD: "a1@3 e2@3 a2@4 a1!2 e2@2 a1 ~", BE: "d2@3 a2@2 ~ d3@3 ~ d2!2 d3 e3 d3@2",
  BF: "d2@2 ~ d2@2 ~ a2!2 d3!2 gb2!2 a2!2 e2 ~", BG: "e1@2 ~ db2 c2 ~ e2@4 e1 ~ b1@2 a1 ~",
  BH: "a1@2 ~ e2@2 ~ a2@3 ~ a1!2 e2@2 a1 ~", BI: "c2@15 ~", BJ: "[c2,e3]@13 ~@3", BK: "g1@2 ~ g1@2 ~ g1@2 d2@4 g1@3 ~",
  BL: "e2@2 ~ e2@2 ~ e2 ~ c2@4 e2@3 ~", BM: "d2@3 d2@2 ~ a2@6 d2@3 ~", BN: "d2@2 ~ d2 ~@2 d2@2 a2@4 d2@4",
  BO: "c2@2 ~ c2 ~@2 c2@6 ~@2 c2 a2", BP: "c2@2 ~ c2 ~@2 c2@5 ~ g2@4", BQ: "g1@2 ~ g1 ~@2 g1@9 ~",
  BR: "g1@2 ~ g1 ~@6 d3 e3 b2 a2 g2 e2", BS: "g1@2 ~ g1@2 ~ g1@6 d2@4", BT: "e2@3 e2@2 ~ e2@2 c2@4 e2@4",
  BU: "d2@2 ~ d2@2 ~ d2@5 ~ d2@3 ~", BV: "d2@2 ~ d2@2 ~ a2@6 d2@4", BW: "c2@2 ~ c2 ~@2 c2 ~ c2@5 ~ c2 db2",
  BX: "d2@2 ~ d2@2 ~ d2@5 ~ d2@4", BY: "[e1,e2]@13 ~@3", BZ: "g1@2 ~ g1@2 ~ g1@2 g1@4 ~@2 d2@2",
  CA: "d2@3 d2 ~@2 d2@5 ~ d2@2 ~@2", CB: "c2@2 ~ c2 ~@2 c2 ~ c2@4 ~@2 c2 db2", CC: "d2@2 ~ d2@2 ~ d2@5 ~ d2@2 ~@2",
  CD: "[e1@2 ~ [e1,e2]@22 ~@7]/2", // E
})).s("gm_fretless_bass").gain(0.52)

// chords · pad new age · "Synth  Bells"
const pad_new_age = note("<~@3 A@3 B@3 ~@47 C@2 ~@55>".pickRestart({
  A: "[~@16 g4@4 ~ g4@12 ~@15, ~@14 d5@19 ~@15, ~@5 a4@6 ~@5, ~ d4 ~]/3",
  B: "[~@14 d4@19 ~@15, ~@4 a4@13 ~@7, ~@11 e4@23 ~@14]/3", C: "[~@14 d4@17 ~, ~@8 a4@23 ~, ~@11 e4@20 ~]/2",
})).s("gm_pad_new_age").gain(0.26)

// other · electric guitar muted · "Damp Gtr.(Right)"
const electric_guitar_muted = note(`<
  ~@12 A ~ A B A ~ A C A ~ A ~ A ~ A D ~@8 E F G H I J K L M N O P Q R F S T U ~@2 V W A ~ A X A ~ A D Y ~ A B Y Z A AA
  ~@2 AB AC ~@4 AD AE AF AG E AH AI AJ AK AL AM AN AO AP AQ ~@8 AR AS AT AU AV AW AX ~
>`.pickRestart({
  A: "~@10 d3 e3 g3!2 ~@2", B: "~@6 a3 b3 a3@2 g3@2 e3@2 ~@2", C: "~@10 g3@2 g3@2 e3 ~",
  D: "~@8 [g3,a3]@2 g3@2 e3@2 d3 ~", E: "~@6 g3 ~@9", F: "~@3 e3 ~@2 e3 ~@9", G: "~@6 a3!2 ~@8",
  H: "~@2 gb3 a3 ~ a3 gb3 ~@9", I: "g3 ~@2 g3 ~@4 c4!2 ~@6", J: "~@3 c4 ~@2 g3 ~ c4!2 ~@6",
  K: "~@3 g3 ~@2 d3 e3 g3!2 ~@6", L: "g3 ~@2 g3 ~@3 e3 g3 ~ g3 ~@5", M: "~@6 d3 e3 g3@2 ~@6", N: "~@6 e3 ~ g3 ~ g3 ~@5",
  O: "~@6 d3 ~@7 gb3!2", P: "~@3 a3 ~ a3@2 ~@9", Q: "g3 ~@2 g3 ~@6 e3!2 g3 ~ a3 ~", R: "~@6 e3 ~@2 g3 ~@2 g3 ~@3",
  S: "~@3 e3 ~@6 e3!2 g3 ~ g3 ~", T: "~@6 g3 ~ a3 ~ g3 ~@5", U: "gb3 ~@2 gb3 ~@2 gb3 ~@9", V: "~@10 d3 ~@2 d3 ~@2",
  W: "~@10 d3 ~ e3 g3 ~@2", X: "~@6 a3 b3 a3@2 g3@2 e3@3 ~", Y: "~@10 d3 e3 g3@2 ~@2", Z: "~@9 d3 ~@3 d3 ~@2",
  AA: "~@6 a3 b3 a3@2 g3@2 e3@2 d3 ~", AB: "~@10 d3 e3 g3!2 ~ g3", AC: "~ g3 ~@8 d3 e3 g3!2 e3 d3",
  AD: "~ [g3,d4] ~ [g3,d4] ~@12", AE: "~@3 e4 ~@2 [g3,e4] ~@9", AF: "~@6 d3 ~@8 gb3", AG: "a3 ~@2 a3 ~@2 gb3 ~@9",
  AH: "[g3,c4] ~@2 [g3,c4] ~@3 e3 g3 ~ g3 ~@5", AI: "~@5 d3 e3 ~ g3 ~@7", AJ: "d3 e3 ~ g3 ~ g3 ~@10",
  AK: "~ [g3,d4] ~ [g3,d4] ~@6 g3 ~@5", AL: "~@3 [g3,e4] ~@4 [g3,c4]@2 ~@2 g3 ~@3", AM: "~@3 gb3 ~ gb3 ~@8 e3 ~",
  AN: "e3 gb3 ~ a3 ~@12", AO: "~ e3 ~ g3 ~ g3 ~@10", AP: "~ d3 ~ e3 ~ g3 ~ gb3!2 ~ gb3 ~ a3 ~@3", AQ: "~@3 e3 ~@12",
  AR: "[g3,d4] ~@2 [g3,d4] ~@12", AS: "g3 ~@2 g3 ~@2 g3!2 ~@8", AT: "d3 ~@2 d3 ~@2 d3!2 ~@6 e3 gb3",
  AU: "a3 ~@2 a3 ~ a3 gb3 e3 ~@8", AV: "g3 ~@2 g3 ~@2 d3 e3 g3 ~@7", AW: "d3 ~@2 e3 ~@2 gb3 ~@3 d3 ~ gb3 ~ d3 ~",
  AX: "e3 ~@2 e3 ~@12",
})).s("gm_electric_guitar_muted").gain(0.26).pan(0.9)

// other · electric guitar muted · "Damp Gtr.(Right)" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@19 A ~@16 B ~@3 C D E F ~ G ~@3 H I ~@26 J ~@5 B K ~ L M N ~ O P ~@2 G ~@13 Q ~@4
>`.pickRestart({
  A: "~@5 a3 ~@2", B: "~@3 g3 ~@12", C: "~@6 g3 a3 ~@8", D: "~@7 g3 ~@8", E: "g3 ~@15", F: "~@6 d3 ~@9",
  G: "~@7 e3 ~@8", H: "~@4 e3 ~@3 g3 ~@7", I: "e3 ~@15", J: "~@8 d3 ~@7", K: "~@14 e3 ~", L: "c4 ~@2 [g3,c4] ~@12",
  M: "~@6 e3 ~@9", N: "~@14 d3 ~", O: "~@10 d3 ~@5", P: "~ [g3,e4] ~@10 c4 ~@3", Q: "~@14 e3 a3",
})).s("gm_electric_guitar_muted").gain(0.13).pan(0.9)

// chords · electric guitar clean · "Clean Rhythm Gtr"
const electric_guitar_clean = note(`<
  ~@28 A B C D E F G@2 ~@38 H I J K L M N@2 O P Q@8 R@2 S T U ~@8 V@4 W@2 X@2
>`.pickRestart({
  A: "[e4,b4,e5]@3 [e4,b4,e5] ~@2 [e4,b4,e5] ~ [e4,b4,e5]@2 ~ [e4,b4,e5] ~@4", // E5
  B: "[a3,e4,a4]@3 [a3,e4,a4] ~@2 [a3,e4,a4] ~@2 [e4,a4]@3 [a3,e4] ~ e4 ~, ~@9 a3@2 ~@5", // A5
  C: "[c4,e4,g4]@2 ~ [e4,g4] ~@2 [d4,a4]@3 ~@2 e4 g4 ~@3", D: "a3@2 ~ [a3,d4] ~@2 d4@6 b3 ~@3, ~@6 a3@3 ~@7",
  E: "[e4,b4,e5]@2 ~ [b4,e5] ~@2 [e4,b4,e5] ~ [e4,b4,e5]@2 ~ [e4,b4,e5] ~@4", // E5
  F: "[a3,e4,a4]@2 ~ [a3,e4,a4] ~@4 [a3,e4,a4]@2 ~ [a3,e4,a4] ~@4", G: "[[b3,c4,e4,g4]@29 ~@3]/2",
  H: "[e4,b4]@2 ~ [e4,g4,b4] ~@2 [e4,g4,b4] ~ [e4,g4,b4]@2 ~ [e4,g4,b4] ~@4", // E5 Em
  I: "~@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [a3,e4,a4]@2 ~ [a3,e4,a4] ~@2 [a3,a4] ~", // Am A5 A
  J: "~@2 [d4,d5] ~@2 [d4,a4,d5] ~@4 [a3,d4] ~@2 [a3,d4] ~@2", // D D5
  K: "[a3,b3,d4] ~@2 [a3,b3,d4] ~@4 [g3,d4] ~ [g3,d4] ~ [gb3,d4] ~ gb3 ~", // Bm7 G5 D
  L: "e4 ~ [e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e4,g4,b4]@2 ~ [e4,g4,b4] ~@2 [e4,g4,b4] ~", // E5 Em
  M: "~@2 [a3,e4,a4] ~@2 [a3,e4,a4] ~@2 [a3,e4,a4]@2 ~ [a3,e4,a4] ~@2 a3 ~", N: "[[g3,b3,c4,e4]@13 ~@3]/2",
  O: "~ d3 ~ [d3,g3] ~@9 [d3,g3] ~@2", P: "[e3,g3]@7 ~ c3@3 ~ [c3,g3]@3 ~, ~ c4",
  Q: "[[d3,a3]@10 ~@6 d3@12 ~@2 a3@2 e3@8 ~@4 d4@10 ~@10 d3@8 ~@2 d3@2 ~@12 e3@7 ~@9 d4@11 ~@3 b3@2 ~@4 g3@4, ~@10 d4@15 ~@3 d4@9 ~@3 e4@15 ~ e4@6 ~@18 g3@16 d3@15 ~@4 e3@12 ~, ~@12 a3@12 ~@18 e3@15 ~ e3@5 ~@13 a3@12 ~@11 a3@14 ~@7 c4@8, ~@14 b3@8 ~@10 c4@24 ~@4 d4@12 b3@16 c4@10 ~@4 g3@11 ~@15]/8", // D5
  R: "[~@11 d4@5, a3@18 ~ a3@13, ~@3 d3@13 d3@15 ~, ~@6 d4@13 ~@13]/2", S: "~@7 e4, c4@15 ~, ~@3 e3@11 ~@2, ~@3 g3@5",
  T: "c4@3 ~@9 a3@3 ~, ~@3 d4@13, ~@3 gb3@5", U: "~@6 e3@7 ~@3, b3@7 ~, ~@3 g3@11 ~@2",
  V: "[~@38 d4@2 e4@4 ~@4 d3@3 ~@9 d4@4, ~@3 a3@13 ~@6 g3@10 gb3@6 ~@16 b3@4 a3@6, ~@6 g3@11 ~@2 e3@9 e4@6 ~@10 d4@15 ~@5, ~@8 b3@16 c4@8 ~@3 a3@14 ~@2 a3@5 e4@8]/4",
  W: "[~@8 e3 ~@5 gb3 ~, c4@11 ~ c4@7 ~@3 a3@9 ~, ~@3 e3@5 d4@8 ~@8 d4@7 ~, ~@6 g3@10 ~@3 gb3@5 ~@8]/2",
  X: "[[g3,b3,e4]@2 ~ [g3,b3,e4]@20 ~@9]/2", // Em
})).s("gm_electric_guitar_clean").gain(0.2)

// chords · electric guitar clean · "Clean Rhythm Gtr" · soft notes
const electric_guitar_clean_2 = note("<~@29 A B C D E ~@42 F G H ~@3 I ~@24 J ~@5>".pickRestart({
  A: "~@14 [a3,a4] ~", B: "~@10 d4 ~@2 g4 ~@2", C: "~@10 a3@3 ~@3", D: "~@3 e4 ~@12", E: "~@6 a4 ~@7 a4 ~",
  F: "~@13 d3 ~@2", G: "~@8 d3 ~@7", H: "b3 ~@15", I: "~ g3 ~@8 [d3,g3] ~@5", J: "~@5 gb3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.08)

// drums · kick
const kick = s("bd").struct(`<
  ~@28 A@6 B ~ C@8 D@10 ~@12 B E B E B E B E A@6 B@2 C@8 D@6 F G@7 H D@5 C I ~
>`.pickRestart({
  A: "x ~@2 x ~@6 x ~@5", B: "x", C: "x ~@2 x ~@2 x ~@9", D: "x ~@2 x ~@2 x ~@3 x ~@5", E: "x ~@14 x", F: "x!3 ~",
  G: "x ~@6 x!2 ~@7", H: "x ~@6 x!2 ~@3 x ~@3", I: "x ~@2 x ~@12",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@58 A B A C A B A C ~@47>".pickRestart({
  A: "~@3 x", B: "~@2 x ~@2 x ~@2 x ~@7", C: "~@2 x ~@2 x ~@10",
})).gain(0.24)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@58 A ~ A ~ A ~ A ~@48>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.16)

// drums · snare
const snare = s("sd").struct(`<
  ~@27 A B@6 ~@2 C@7 D C@9 E ~@3 F ~@8 C@7 A B@3 G B@2 ~ H C@7 I C@6 J K L K M N L O P C@5 D Q ~
>`.pickRestart({
  A: "~@2 x!2", B: "~ x ~ x", C: "~@3 x", D: "~@5 x!2 ~", E: "~@8 x ~ x ~ x!2 ~@2", F: "~@5 x ~@2",
  G: "~@4 x ~@4 x ~@2 x ~ x!2", H: "~@2 x!2 ~@3 x!2 ~ x ~ x!2 ~@2", I: "~@2 x ~@2 x ~@2 x ~ x ~ x ~ x ~",
  J: "x ~@2 x!2 ~@3 x ~@7", K: "~@3 x ~@10 x ~", L: "~@3 x ~@8 x ~@3", M: "~@3 x ~@8 x ~ x ~", N: "~@3 x ~@12",
  O: "~@3 x ~@6 x ~ x ~@3", P: "x ~ x!2 ~@10 x!2", Q: "x",
})).gain(0.56)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@97 A B A C ~ B D ~@9>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@12", C: "x", D: "~ x ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@35 A ~@7 B ~@37 C ~@22 D ~@5 B ~@2>".pickRestart({
  A: "x!2 ~@6 x ~@7", B: "~@6 x!2 ~@8", C: "~ x ~@14", D: "~@12 x!3 ~",
})).gain(0.56)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@12 A@16 B@6 C@2 ~ D ~ D ~ D ~ D@11 ~@20 B E B@3 E C@2 ~ D ~ D ~ D ~ D@7 ~@9 D@6 ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~ x ~@3 x ~@2", C: "~@3 x ~@12", D: "~ x ~ x ~@4", E: "~ x ~@6",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@2 x ~@4 x ~@8] ~@45 [~ x ~@6] ~@22 [~@7 x ~@2 x!2 ~@4] ~@8>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@37 A ~ A ~ A ~ B A B A B A B A B A C ~@13 D ~ D ~ D ~ E B F B@3 F ~ B ~ A ~ A ~ A ~ A@2 B A B A B ~@9 A B A B A B
  ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@14 x!2", D: "~@3 x ~@12", E: "~@3 x ~@10 x ~", F: "~@9 x ~@6",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@35 A ~@7 B ~@60 C ~@5 B ~@2>".pickRestart({
  A: "~@3 x ~@3 x ~@8", B: "~ x ~@14", C: "~@5 x!2 ~ x!2 ~@6",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@28 A ~@3 A ~ A ~ A ~@7 A ~@29 A ~@3 A ~ A ~ A ~@7 A ~@14 A ~@5 B ~>".pickRestart({
  A: "x", B: "x ~@2 x ~@12",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@8 A ~ A ~ A ~@7 A ~@37 A ~@3 A@3 B A ~@3 A ~@42>".pickRestart({
  A: "x", B: "~@5 x ~@2",
})).gain(0.16)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~ [~@3 x ~@4] x!2 ~@3 [~ x] ~@105>").gain(0.08)

// drums · tambourine
const tambourine = s("tb").struct("<[~@3 x]!96 ~ [~@3 x]!14 [x ~@2 x ~@12] ~>").gain(0.4)

// drums · bongos
const bongos = s("bongo:4").struct("<A@28 B@6 ~@2 C@18 A@20 B@6 ~@2 C@14 D ~@8 C@6 ~@2>".pickRestart({
// … 72 more lines

More by Commodores