Strudelify

Give Me The Reason

Luther Vandross

KeyB♭ majorTempo120 bpm
0:00/0:00
// Give Me The Reason — Luther Vandross
// 120 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 157 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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M J N O P Q R S T F U V W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM AN AO AP AQ AR AS
  AP AT@2 AU AE AV AW AX AY AZ BA BB Q R S T F U V W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM AN AO AP AQ AR AS
  AP AT@2 BC BD BE@2 BF BG BH BI BJ BK BL AW BM BN BO@2 BP BK BL AW BM BN BO@2 BP BK BQ BR BS BN BO@2 BP BK BQ BR BS BN
  BO@2 BP AE BT AG BU AE BT AG BV BK BT BI BW BK BX BI BY@5
>`.pickRestart({
  A: "~@7 c3", B: "~@2 c3 ~ c3@2 ~@2 c3@3 ~ c3 ~ c3@2", C: "~@2 c3 ~ c3 ~ c3 ~ c3 ~ bb2@3 ~ ab2@2",
  D: "~@2 ab2 ~ ab2@3 ~ ab2@3 ~ ab2 ~ ab2@2", E: "~@2 ab2@3 ~ ab2@3 ~ ab2 ~ ab2 ~ f2@2",
  F: "~@2 f2 ~ f2@3 ~ f2@3 ~ f2 ~ g2@2", G: "~@2 g2@2 ~@2 g2@3 ~ g2 ~ g2 ~ bb2@2",
  H: "~@2 bb2 ~ bb2@2 ~@2 bb2@3 ~ bb2 ~ bb2@2", I: "~@2 bb2@2 ~@2 bb2 ~ bb2 ~ bb2 ~ bb2 ~ c3@2",
  J: "~@2 c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3@2", K: "~@2 c3 ~ c3 ~ c3 ~ c3 ~ bb2@3 ~ g2@2",
  L: "~@2 g2 ~ g2@3 ~ g2@3 ~ g2 ~ g2@2", M: "~@2 g2 ~ g2 ~ ab2@3 ~ ab2 ~ ab2 ~ c3@2",
  N: "~@2 c3 ~ c3 ~ c3@3 ~ c3 ~ bb2 ~ g2@2", O: "g2@3 ~ g2@3 ~ g2@3 ~ g2 ~ g2@2", P: "~@2 g2 ~ g2 ~ c3@2 ~@6 c3@2",
  Q: "f2 ~ f2 ~ f2 ~@3 f2@3 ~ f2 ~ g2@2", R: "~@2 g2@2 ~@2 g2@2 g2@2 g2 ~ g2 ~ g2@2",
  S: "~@2 g2 ~ g2@3 ~ g2@3 ~ g2 ~ ab2@2", T: "~@2 ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ g2@2 f2@2",
  U: "~@2 g2@2 g2@2 g2 ~ g2 ~ g2 ~ g2 ~ bb2@2", V: "~@2 bb2 ~ bb2@3 ~ bb2@3 ~ bb2 ~ bb2@2",
  W: "[~@2 bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ f2@4 f2@2 f2@3 ~ f2@3 ~ f2 ~ f2@2]/2",
  X: "~@2 f2 ~ f2@2 f2 ~ f2 ~ f2@2 f2@2 ab2@2", Y: "~@2 ab2@2 ab2@4 ab2@4 ab2 ~ ab2 ~",
  Z: "b2@3 ~ b2@4 b2 ~ b2@2 b2 ~ c3@2", AA: "~@2 c3@2 c3@3 ~ c3@3 ~ c3@2 c3@2", AB: "~ c3!2 c3@2 c3!3",
  AC: "c3 ~ c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3 ~", AD: "ab2@2 ab2@2 ~@2 g2@3 ~ g2@2 ~@2 c3@2",
  AE: "~@2 c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3 ~", AF: "c3 ~ c3@2 ~@2 c3@3 ~ c3@2 c3@2 g2@2",
  AG: "~@2 g2 ~ g2@3 ~ g2@3 ~ g2 ~ g2 ~", AH: "g2 ~ g2@2 ~@2 ab2@3 ~ ab2 ~ ab2 ~ f2@2",
  AI: "~@2 f2 ~ f2@3 ~ f2@3 ~ f2@2 g2@2", AJ: "~@2 g2@2 g2 ~ g2 ~ g2@2 g2 ~ g2@2 bb2@2",
  AK: "~@2 bb2 ~ bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~",
  AL: "[bb2 ~ bb2@2 ~@2 bb2@3 ~ bb2@2 ~@2 c3@4 c3@2 c3@2 ~@2 c3@3 ~ c3 ~ c3 ~]/2", AM: "c3!2 ~ c3@2 c3!2 g2",
  AN: "~@2 g2@2 g2@3 ~ g2@3 ~ g2@2 g2 ~", AO: "g2 ~ g2@2 ~@2 ab2@3 ~ ab2@2 ~@2 f2@2",
  AP: "~@2 f2@2 f2@3 ~ f2@3 ~ f2@2 f2@2", AQ: "g2 ~ g2@3 ~ g2@3 ~ g2 ~ g2@2 bb2@2",
  AR: "~@2 bb2@2 bb2@3 ~ bb2@3 ~ bb2 ~ bb2@2", AS: "bb2@2 bb2@2 ~@2 bb2@3 ~ bb2 ~ bb2 ~ f2@2",
  AT: "[g2 ~ g2@3 ~ g2@4 g2 ~ g2 ~ bb2@4 bb2 ~ bb2@3 ~ bb2@4 bb2@2 bb2 ~]/2",
  AU: "bb2 ~ bb2@2 ~@2 bb2@4 bb2 ~ bb2 ~ c3@2", AV: "c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3 ~ ab2@2",
  AW: "~@2 ab2@2 ab2@3 ~ ab2@3 ~ ab2@3 ~", AX: "ab2 ~ ab2@2 ~@2 ab2@3 ~ ab2 ~ ab2 ~ c3@2",
  AY: "~@2 c3 ~ c3@3 ~ c3@4 c3@3 ~", AZ: "c3 ~ c3@2 ~@2 c3@3 ~ c3 ~ c3 ~ ab2@2",
  BA: "~@2 ab2 ~ ab2@3 ~ ab2@3 ~ ab2@3 ~", BB: "ab2 ~ ab2 ~ g2@2 e2@2 ~@8",
  BC: "bb2 ~ bb2@2 ~@2 bb2@4 bb2 ~ bb2 ~ [f2,c3]@2", BD: "~@2 f2@2 f2@3 ~ f2@3 ~ f2 ~ f2@2",
  BE: "[f2 ~ f2@2 ~@2 f2@3 ~ f2@2 f2 ~ g2@4 g2@2 g2@3 ~ g2@3 ~ g2@3 ~]/2", BF: "g2 ~ g2@3 ~ g2@3 ~ g2 ~ g2 ~ f2@2",
  BG: "~@2 f2 ~ f2@3 ~ f2@3 ~ f2@3 ~", BH: "f2 ~ f2@3 ~ f2@3 ~ f2 ~ f2 ~ g2@2", BI: "~@2 g2 ~ g2@3 ~ g2@3 ~ g2@3 ~",
  BJ: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~ bb2 ~ c3@2", BK: "~@2 c3 ~ c3@3 ~ c3@3 ~ c3@3 ~",
  BL: "c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3@2 ab2@2", BM: "ab2 ~ ab2@3 ~ ab2@2 ~@2 ab2@2 g2@2 f2@2",
  BN: "~@2 f2@2 f2@3 ~ f2@3 ~ f2@3 ~", BO: "[g2 ~ g2@3 ~ g2@4 g2 ~ g2 ~ bb2@4 bb2@2 bb2@3 ~ bb2@3 ~ bb2@3 ~]/2",
  BP: "bb2 ~ bb2@2 bb2@2 bb2@3 ~ bb2@2 bb2 ~ c3@2", BQ: "c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3@2 g2@2",
  BR: "~@2 g2@2 g2@3 ~ g2@3 ~ g2@3 ~", BS: "g2 ~ g2@3 ~ ab2@2 ~@2 ab2@2 g2@2 f2@2",
  BT: "c3 ~ c3 ~ c3 ~ c3@3 ~ c3 ~ c3 ~ g2@2", BU: "g2 ~ g2 ~ g2 ~ g2@3 ~ g2 ~ g2 ~ c3@2",
  BV: "g2 ~ g2@3 ~ g2@3 ~ g2 ~ g2 ~ c3@2", BW: "g2 ~ g2@2 ~@2 g2@3 ~ g2 ~ g2 ~ c3@2",
  BX: "c3 ~ c3@3 ~ c3@3 ~ c3 ~ c3 ~ g2@2", BY: "[g2 ~ g2@3 ~ g2@3 ~ g2 ~ g2 ~ c3@52 ~@14]/5",
})).s("gm_acoustic_bass").gain(0.41)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@8 A@8 B C D@2 ~ C E@3 F@2 G H@2 ~@2 I@5 ~ J@7 ~ K@4 L@5 ~ M@2 ~@3 C D@2 ~ C E@3 F@2 G H@2 ~@2 I@5 ~ J@7 ~ K@4 N@6
  O@5 ~@5 P@3 ~@5 Q@7 ~ Q@7 ~ R@4 S@8 T@7 U@4
>`.pickRestart({
  A: "[~@14 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [d4,f4,bb4] ~@7 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [c4,eb4,g4,c5]@2 ~@6 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [d4,f4,bb4] ~@7 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5, ~@14 [c3,f3,g3,bb3]@31 ~ [c3,f3,g3,bb3]@22 ~@10 [c3,f3,g3,bb3]@30 ~@2 [c3,f3,g3,bb3]@18, ~@10 d4@3 ~@13 d4@3 ~@6 ab3@3 ~@4 d4@3 ~@13 d4@3 ~@3]/8", // Bb5 Bb Bb5 Bb Cm Bb5 Bb Bb5 …
  B: "[d4,f4,bb4] ~@5 eb4 e4@2 ~@7, ~@6 [g4,c5]@3 ~@7", C: "~@4 [eb3,g3,ab3,c4]@3 ~", D: "[f3,g3,bb3,d4]/2",
  E: "[[f3,g3,bb3,d4]@13 ~ [g3,bb3,d4,f4,bb4]@30 ~@4]/3", // Gm7
  F: "[~@7 [c5,c6]@8 ~, ~@3 [bb5,bb6]@12 ~, ~@5 [g5,g6]@10 ~, ~@6 [eb5,eb6]@9 ~]/2", G: "[ab2,ab3,c4,eb4,g4]@7 ~",
  H: "[[g2,g3,b3,d4,g4]@7 ~]/2", // G
  I: "[[eb3,ab3,bb3,c4,eb4]@5 ~ [f3,g3,bb3,d4]@7 ~ d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [d4,f4,bb4] ~@7 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [c4,eb4,g4,c5]@2 ~@8, ~@14 [c3,f3,g3,bb3]@31 ~ [c3,f3,g3,bb3]@22 ~@12, ~@10 d4@3 ~@13 d4@3 ~@6 ab3@3 ~@2]/5", // Ab Gm7 Bb5 Bb Bb5 Bb Cm Csus4
  J: "[~@14 [f3,bb3,d4,f4]@31 ~ d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [d4,f4,bb4] ~@7 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [c4,eb4,g4,c5]@2 ~@8, ~@46 [c3,f3,g3,bb3]@31 ~ [c3,f3,g3,bb3]@22 ~@12, ~@26 d4@3 ~@13 d4@3 ~@6 ab3@3 ~@2]/7", // Bb Bb5 Bb Bb5 Bb Cm Csus4
  K: "[~@14 f4@26 ~@2 c5@2 eb5@2 c5@15 ~@3, ~@14 [f3,bb3,d4]@31 ~@19, ~@5 f4@3]/4", // Bb
  L: "[~@14 [f3,bb3,d4,f4]@31 ~ [g3,c4,eb4]@31 ~@3]/5", M: "[c6@7 [g5,bb5] ~@4 bb5@2 g5@18, ~@4 f5@3 ~@9]/2",
  N: "[~@14 [f3,bb3,d4,f4]@31 ~ [f3,ab3,c4,eb4]@30 ~@2 [g3,c4,eb4]@18]/6", // Bb Fm7 Cm
  O: "[~@14 [f3,ab3,c4,eb4]@31 ~ [g3,c4,eb4]@15 ~ [f3,bb3,d4,f4]@14 ~@4]/5", P: "[~@7 [bb2,f3,bb3,d4,f4,bb4]@16 ~]/3",
  Q: "[~@14 [bb2,f3,bb3,d4,f4,bb4]@32 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [d4,f4,bb4] ~@7 d4@6 [f4,bb4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@3 g4 ~ [c4,eb4,g4,c5]@2 ~@8, ~@46 [c3,f3,g3,bb3]@31 ~ [c3,f3,g3,bb3]@22 ~@12, ~@26 d4@3 ~@13 d4@3 ~@6 ab3@3 ~@2]/7", // Bb Bb5 Bb Bb5 Bb Cm Csus4
  R: "[~@7 [bb2,f3,bb3,d4,f4,bb4]@16 [f3,bb3,d4]@9]/4", // Bb
  S: "[~@10 [f3,g3,bb3,d4] ~@3 [f3,g3,bb3,d4]@27 ~ [f3,g3,bb3,d4] ~@3 [f3,bb3,d4]@27 ~ [f3,bb3,d4] ~@3 [f3,g3,bb3,d4]@26 ~@2 [f3,bb3]@2 ~@2 [f3,bb3,d4]@18, ~@106 [g3,d4] ~@21]/8", // Gm7 Bb Gm7 Bb5 Bb G5
  T: "[~@10 [f3,bb3,d4] ~@3 [f3,g3,bb3,d4]@26 ~@2 [f3,g3,bb3,d4]@2 ~@2 [f3,bb3,d4]@27 ~ [bb3,d4] ~@3 [f3,g3,bb3,d4]@27 ~ [f3,g3,bb3,d4] ~@3 [f3,bb3,d4] ~, ~@37 f3 ~@18]/7", // Bb Gm7 Bb Gm7 Bb
  U: "[[f3,bb3,d4]@13 ~@3]/4", // Bb
})).s("gm_epiano2").gain(0.45)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@5 A@3 ~ B C@2 D@2 C@2 E@4 ~ F@3 ~ G@3 H@2 ~@7 I@3 ~@5 F@3 ~ F@3 ~@2 J@3 ~@4 F@3 ~ F@3 ~ G@3 K@2 ~@7 F@3 ~@5 F@3 ~
  F@3 ~@2 L@8 M@2 ~ F@3 ~@5 F@3 ~@5 F@3 ~@5 F@3 ~@2 N@3 ~ N@3 ~ N@3 ~ O@5 ~@2
>`.pickRestart({
  A: "[~@3 eb4@6 ~@2 f4@13, ~@2 g3@13 ~@5 bb3@28, ~@4 ab3@11 ~@3 a3@30]/3", B: "~@2 [d4,f4,bb4]@3 [d4,f4,bb4]@3",
  C: "[[d4,f4,bb4]@2 g4 [d4,f4,bb4]@7 [d4,f4,bb4]@3 [d4,f4,bb4]@3]/2", // Bb
  D: "[[d4,f4,bb4]@2 g4 [c4,eb4,g4,c5]@7 [d4,f4,bb4]@3 [d4,f4,bb4]@3]/2", // Bb Cm Bb
  E: "[[d4,f4,bb4]@18 ~@4 eb4@12 ~@4 f4@25 ~, ~@18 g3@13 ~@5 bb3@25 ~@3, ~@20 ab3@11 ~@3 a3@27 ~@3]/4", // Bb
  F: "[~@3 eb4@6 ~@2 f4@13, ~@2 g3@13 ~@5 bb3@25 ~@3, ~@4 ab3@11 ~@3 a3@27 ~@3]/3",
  G: "[~@5 c4@12 ~@5 c3@2, ~ g3@13 ~@5 bb3@2 eb3@3, ~ ab3@6 ~@2 c4@3, ~@3 eb4@11 ~@3 eb4@7, ~@5 g3]/3",
  H: "[[g3,b3,d4]@21 ~@11]/2", I: "[~@6 eb4@12 ~@4 f4@25 ~, ~@2 g3@13 ~@5 bb3@25 ~@3, ~@4 ab3@11 ~@3 a3@27 ~@3]/3",
  J: "[~@5 f3 eb3 f3@3 eb3@10 ~@4]/3", K: "[[g3,b3,d4]@5 ~@3]/2",
  L: "[~@7 [g3,c4,eb4]@16 [f3,ab3,c4,eb4]@16 [g3,c4,eb4]@8 [f3,bb3,d4,f4]@11 f3@6]/8", M: "[g3@21 ~@11]/2",
  N: "[~@5 [g3,bb3,d4]@2 [g3,bb3,d4]@11 ~@6]/3", O: "[~@10 [g3,bb3,d4]@4 [g3,bb3,d4]@22 ~@10 [g3,bb3,d4,f4]@31 ~@3]/5",
})).s("gm_acoustic_guitar_steel").gain(0.59)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@96 A@8 B@4 ~@10 C@5 ~@3 C@5 ~@3 D@5 ~@18>".pickRestart({
  A: "[~@7 [eb4,c5,eb5]@57]/8", B: "[bb5@49 ~@15]/4", C: "[~@7 [bb5,bb6]@16 [g5,g6]@16 ~]/5",
  D: "[~@7 bb4@16 bb6@15 ~@2, ~@14 bb5@63 ~@3]/5",
})).s("gm_string_ensemble_2").gain(0.33)

// chords · marimba
const marimba = note("<~@29 A B A ~@24 C@2 ~@2 D ~@12 A B A ~@61 E ~ E ~ F ~ E ~ E ~ F ~ E ~ E G ~@4>".pickRestart({
  A: "~@4 [b4,d5,g5] ~@5 [b4,d5,g5] ~@5", B: "[b4,d5,g5] ~@5 [b4,d5,g5] ~@9",
  C: "[c6@5 ~@2 [g5,bb5] f5@4 bb5@2 g5@12 ~@6]/2", D: "~@3 g5@2 e6 g6 c7@2 ~@7, ~@2 e5@3 c6@2 ~@9",
  E: "~@2 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~", F: "~@2 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@7",
  G: "~@10 [f4,bb4,d5] ~ [f4,bb4,d5] ~@3", // Bb
})).s("gm_marimba").gain(0.47)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@7 B ~@2 A@2 ~@2 A@2 ~@5 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ B ~@2 A@2 ~@2 A@2 ~@5 C ~
  C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@17 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~
  C ~ D ~@4
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@4", C: "~@7 x", D: "~@6 x!2",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A@5 C A@3 C A@3 B A@31 D A@3 C A@3 C A@3 B A@80 ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~@2 x ~ x!2 ~@2", D: "~ x ~@2",
})).gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~ B ~ B ~ B ~ C ~@3 D ~@3 D ~@3 E F D F D F D F D F D F D F D F D F D F D F D F D F D F D F D F C ~@3 D ~@3 D
  ~@3 E F D F D F D F D F D F D F D F D F D F D F D F D F D F D F D F D ~@8 F ~ F ~ F ~ F ~ F D F D F D F D F D F D F D
  F D F D F D F D F D F D F D F D F D ~@4
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~@5 x ~ x", C: "~ x ~@2", D: "~@5 x ~@2", E: "~@6 x!2", F: "~@3 x",
})).gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<~@20 A ~@3 A ~@39 A ~@3 A ~@83 B C ~@3>".pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "x",
})).gain(0.52)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@7 A ~@11 B ~@43 B ~@79 C ~@4>".pickRestart({
  A: "~ x ~@6", B: "~@10 x!2 ~@4", C: "~ x",
})).gain(0.52)

// drums · crash
const crash = s("cr").struct("<~@8 [~@7 x] ~@148>").gain(0.52)

// drums · ride
const ride = s("rd").struct("<~@153 x ~@3>").gain(0.52)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!4]!15 [x!2 ~@2] [x!4]!43 [x!2 ~@2] [x!4]!92 ~@4>").gain(2.62)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~
  [~ x ~ x ~ x ~ x]!15
  [~ x ~ x ~@4]
  [~ x ~ x ~ x ~ x]!43
  [~ x ~ x ~@4]
  [~ x ~ x ~ x ~ x]!92
  ~@4
>`).gain(0.78)

stack(
  bass, epiano2, acoustic_guitar_steel, string_ensemble_2, marimba, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash, ride, cabasa, cabasa_soft
)

More by Luther Vandross