Strudelify

You Send Me

Sam Cooke

KeyC majorTempo90 bpm
0:00/0:00
// You Send Me — Sam Cooke
// 90 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · "Bass    ("
const bass = note(`<
  A B C D E F G H E I J B K L M E I G I G N O P Q R S A D J F T U V B E H W D K D K L G B X L M E F K H K L Y Z B J Q A
  AA V I AB U G H V L A H W AC AD AE E F AF N AG K B K D K D O P F E H G AH V Q AI AJ AK AL
>`.pickRestart({
  A: "c2@8 c2 ~ c2 ~ a1@8 ~@2 a1@2", B: "d2@4 ~ d2 g2@4 ~ g2", C: "c2@8 c2 ~ c2 ~ a1@8 b1 ~ c2 ~",
  D: "d2@11 ~ g2@8 ~@2 g2@2", E: "c2@11 ~ a1@8 ~@2 a1@2", F: "d2@11 ~ g2@11 ~", G: "c2@8 ~@2 c2@2 a1@8 a1 ~ a1 ~",
  H: "d2@8 ~@2 d2@2 g2@8 g2 ~ g2 ~", I: "d2@8 ~@2 d2@2 g2@11 ~", J: "c2@8 ~@2 c2@2 a1@11 ~", K: "c2@4 ~ c2 a1@4 ~ a1",
  L: "d2@8 d2 ~ d2 ~ g2@11 ~", M: "c2@11 ~ f2@8 ~@2 f2@2", N: "d2@8 e2 ~ f2 ~ g2@11 ~", O: "c2@3 a#1@3 a1@4 ~ a1",
  P: "d2@3 d#2@3 d2@4 ~ d2", Q: "d2@8 d2 ~ d2 ~ g2@8 ~@2 g2@2", R: "c2@11 ~ a1@8 a1 ~ a1 ~",
  S: "d2@8 e2 ~ a2 ~ g2@8 ~@2 g2@2", T: "c2@8 c2 ~ c2 ~ f2@8 e2 ~ d2 ~", U: "c2@8 ~@2 c2@2 g2@8 g2 ~ g2 ~",
  V: "c2@8 c2 ~ b1 ~ a1@8 ~@2 a1@2", W: "c2@11 ~ a1@11 ~", X: "c2@8 c2 ~ c2 ~ a1@11 ~", Y: "c2@6 a#1@6 a1@11 ~",
  Z: "d2@6 d#2@6 d2@8 d2 ~ d2 ~", AA: "d2@8 d2 ~ d2 ~ g2@8 b1 ~ g1 ~", AB: "c2@8 c2 ~ c2 ~ f2@11 ~",
  AC: "d2@11 ~ g2@8 g2 ~ g2 ~", AD: "c2@8 c2 ~ b1 ~ a1@11 ~", AE: "d2@8 d2 ~ d2 ~ g2@8 e2 ~ b1 ~",
  AF: "c2@8 c2 ~ c2 ~ a1@8 e2 ~ c2 ~", AG: "c2@8 ~@2 c2@2 f2@8 f2 ~ f2 ~", AH: "d2@8 a2 ~ f2 ~ g2@8 b1 ~ g1 ~",
  AI: "c2@4 ~ c2 f2@4 ~ f2", AJ: "c2@4 ~ c2 g2@4 ~ g2", AK: "c2@8 ~@2 c2 ~ g2@8 ~@2 g2 ~",
  AL: "c2@2 ~@4 g1@3 ~@3 c2@10 ~@2",
})).s("gm_fretless_bass").gain(0.56)

// chords · piano · "Piano   ("
const piano = note(`<
  A B C D E F G H I J K L M N O P Q K R S T U V W X J Y N Z AA AB AC AD D AE AF AG J AH B A F S R AI Q O AJ F AK N AL AM
  AN AO N AD F AP W S W AQ AR AI W AS AA AT H AH F AD W Y W AU D AV AW AX AS N AY AM AN AZ BA X BB BC BA AP W BD BE BF
  BG
>`.pickRestart({
  A: "[g3,d4,e4]@8 d4 ~ e4 ~ [c4,e4,g4,a4]@8 g3 ~ c4 ~", B: "[c4,d4,f4,a4]@8 c4 ~ f4 ~@5 b3@2 f4@4 a4 ~",
  C: "[b3,d4,e4,g4]@12 ~@4 c4@2 g4@4 a4 ~", D: "~@4 c4@2 f4@4 a4 ~ [b3,d4,f4,a4]@12",
  E: "~@4 d4@2 e4@4 g4 ~ [c4,e4,g4,a4]@8 g3 ~ c4 ~", F: "[c4,d4,f4,a4] [b3,d4,f4,a4]",
  G: "[a3,c4,e4,g4]@8 a3 ~ e4 ~@5 c4@2 g4@4 a4 ~", H: "~@4 c4@2 f4@4 a4 ~ [b3,d4,f4,a4]@8 f3 ~ b3 ~",
  I: "~@4 d4@2 e4@4 g4 ~@5 c4@2 g4@4 a4 ~", J: "[c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@4 [b3,d4,f4,a4]@8 f3 ~ b3 ~",
  K: "[b3,d4,e4,g4]@3 ~ c3@2 [b3,d4,e4,g4]@2 ~@4 [c4,e4,g4,a4]@12", L: "~@4 c4@2 f4@4 a4 ~@5 b3@2 f4@4 a4 ~",
  M: "[g3,d4,e4]@8 d4 ~ e4 ~ [c4,e4,g4,a4]@12", N: "[c4,d4,f4,a4]@12 [b3,d4,f4,a4]@8 f3 ~ b3 ~",
  O: "[a3,c4,e4,g4]@8 a3 ~ e4 ~ [a3,c4,f4]@8 f4 ~ a4 ~", P: "~@4 a3@2 e4@4 g4 ~ [c4,e4,g4,a4]@12",
  Q: "[c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@4 [b3,d4,f4,a4]@3 ~ g2@2 [b3,d4,f4,a4]@2 ~@4", // Dm7 Bm7b5
  R: "~@4 c4@2 f4@4 a4 ~ [b3,d4,f4,a4]@3 ~ g2@2 [b3,d4,f4,a4]@2 ~@4", S: "[b3,d4,e4,g4]@8 b3 ~ e4 ~ [c4,e4,g4,a4]@12",
  T: "[c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@4 [b3,e4,f4,a4]@12", // Dm7 Esus4
  U: "[g3,c4,e4]@3 ~ c3@2 [g#3,a#3,d4,f4]@3 ~ a#2@2 [c#4,e4,g4,b4]@3 ~ a2@2 [c#4,e4,g4,b4]@2 ~@4", // C A#7 C#m7b5
  V: "[a3,c4,d4,f#4]@3 ~ d3@2 [a#3,c#4,d#4,g4]@3 ~ d#3@2 [c4,d4,f#4,a4]@8 c4 ~ f#4 ~", // D7 D#7 D7
  W: "[c4,d4,f4,a4]@12 ~@4 b3@2 f4@4 a4 ~", X: "[g3,d4,e4]@3 ~ c3@2 [g3,d4,e4]@2 ~@4 [c4,e4,g4,a4]@8 g3 ~ c4 ~",
  Y: "[b3,d4,e4,g4]@3 ~ c3@2 [b3,d4,e4,g4]@2 ~@4 [c4,e4,g4,a4]@3 ~ a2@2 [c4,e4,g4,a4]@2 ~@4", // Em7 Am7
  Z: "[b3,d4,e4,g4]@3 ~ c3@2 [b3,d4,e4,g4]@2 ~@8 c4@2 g4@4 a4 ~", // Em7
  AA: "[c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@8 b3@2 f4@4 a4 ~", // Dm7
  AB: "[a3,c4,e4,g4]@8 a3 ~ e4 ~ [c4,d4,f4,a4]@8 d4 ~ a4 ~", // Am7 Dm7
  AC: "[b3,d4,e4,g4]@3 ~ c3@2 [b3,d4,e4,g4]@2 ~@4 [b3,d4,f4,a4]@12", AD: "[g3,d4,e4]@12 [c4,e4,g4,a4]@8 g3 ~ c4 ~",
  AE: "[b3,d4,e4,g4]@12 [c4,e4,g4,a4]@3 ~ a2@2 [c4,e4,g4,a4]@2 ~@4", AF: "[c4,d4,f4,a4]@8 c4 ~ f4 ~ [b3,d4,f4,a4]@12",
  AG: "~@4 d4@2 e4@4 g4 ~ [c4,e4,g4,a4]@12", // Am7
  AH: "[a3,c4,e4,g4]@3 ~ c3@2 [a3,c4,e4,g4]@2 ~@4 [c4,e4,g4,a4]@3 ~ a2@2 [c4,e4,g4,a4]@2 ~@4", // Am7
  AI: "[g3,d4,e4]@3 ~ c3@2 [g3,d4,e4]@2 ~@8 c4@2 g4@4 a4 ~", // Em7
  AJ: "[a3,c4,e4,g4]@3 ~ c3@2 [a3,c4,e4,g4]@2 ~@4 [c4,e4,g4,a4]@12", AK: "~@4 b3@2 e4@4 g4 ~@5 c4@2 g4@4 a4 ~",
  AL: "[b3,d4,e4,g4]@3 ~ c3@2 [b3,d4,e4,g4]@2 ~@4 [c4,e4,g4,a4]@8 g3 ~ c4 ~", AM: "~@4 c4@2 f4@4 a4 ~ [b3,e4,f4,a4]@12",
  AN: "[g3,c4,e4]@3 ~ c3@2 [d4,f4,g#4,a#4]@3 ~ a#2@2 [c#4,e4,g4,b4]@12", // C A#7 C#m7b5
  AO: "[c4,d4,f#4,a4]@3 ~ d3@2 [a#3,c#4,d#4,g4]@3 ~ d#3@2 [c4,d4,f#4,a4]@3 ~ d3@2 [c4,d4,f#4,a4]@2 ~@4", // D7 D#7 D7
  AP: "[b3,d4,e4,g4]@8 b3 ~ e4 ~ [c4,e4,g4,a4]@8 g3 ~ c4 ~", // Em7 Am7
  AQ: "[a3,c4,e4,g4]@3 ~ c3@2 [a3,c4,e4,g4]@2 ~@4 [c4,d4,f4,a4]@8 d4 ~ a4 ~", AR: "~@4 b3@2 e4@4 g4 ~@5 b3@2 f4@4 a4 ~",
  AS: "[b3,d4,e4,g4]@8 b3 ~ e4 ~@5 c4@2 g4@4 a4 ~", AT: "~@4 d4@2 e4@4 g4 ~ [c4,e4,g4,a4]@3 ~ a2@2 [c4,e4,g4,a4]@2 ~@4",
  AU: "[g3,d4,e4]@3 ~ c3@2 [g3,d4,e4]@2 ~@4 [c4,e4,g4,a4]@3 ~ a2@2 [c4,e4,g4,a4]@2 ~@4", // Em7 Am7
  AV: "~@4 a3@2 e4@4 g4 ~ [a3,c4,f4]@8 f4 ~ a4 ~", // F
  AW: "[a3,c4,e4,g4]@8 a3 ~ e4 ~ [c4,e4,g4,a4]@3 ~ a2@2 [c4,e4,g4,a4]@2 ~@4", // Am7
  AX: "[c4,d4,f4,a4]@3 ~ d3@2 [c4,d4,f4,a4]@2 ~@4 [b3,d4,f4,a4]@12", AY: "[b3,d4,e4,g4] [c4,e4,g4,a4]",
  AZ: "[c4,d4,f#4,a4]@3 ~ d3@2 [a#3,c#4,d#4,g4]@3 ~ d#3@2 [c4,d4,f#4,a4]@8 c4 ~ f#4 ~", // D7 D#7 D7
  BA: "[c4,d4,f4,a4]@8 c4 ~ f4 ~ [b3,d4,f4,a4]@3 ~ g2@2 [b3,d4,f4,a4]@2 ~@4", // Dm7 Bm7b5
  BB: "[c4,d4,f4,a4]@8 c4 ~ f4 ~ [b3,d4,f4,a4]@8 f3 ~ b3 ~", BC: "~@4 b3@2 e4@4 g4 ~ [c4,e4,g4,a4]@12",
  BD: "[a3,c4,e4,g4]@12 [c4,d4,f4,a4]@8 d4 ~ a4 ~", BE: "~@4 b3@2 e4@4 g4 ~ [b3,d4,f4,a4]@3 ~ g2@2 [b3,d4,f4,a4]@2 ~@4",
  BF: "[g3,d4,e4]@23 ~", BG: "[g3,d4,e4]@2 ~@2 c2 ~ g2@2 ~@4 [c3,g3,d4,e4]@3 ~@9",
})).s("gm_piano").gain(0.28)

// chords · electric guitar muted · "Guitar  ("
const electric_guitar_muted = note(`<
  A B C D E B F G H I C D J K L M D N K O P Q R B S K T P N K U V W B N K X K Y B W I Z AA S B AB AC AA O B AD I AE R B
  H AF C G Z I AG V AH AF Z B E G F D H AI Z D AJ B AK AL G N I O K AM AN I S K N G AO D AP AQ AR AS
>`.pickRestart({
  A: "~@6 [e4,d5] ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5", B: "~@6 [f4,c5] ~@11 [f4,b4] ~@5",
  C: "~@6 [e4,b4] ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5", D: "f4@5 ~ f4 ~@11 [f4,b4] ~@5, [a4,c5]@3 ~@5",
  E: "[e4,g4,d5]@5 ~ [e4,g4,d5] ~@5 c4@5 ~ c4 ~@5, ~@4 [e4,g4]@3 ~", F: "e4@5 ~ e4 ~@11 [c4,g4] ~@5, [g4,a4]@3 ~@5",
  G: "~@6 [f4,c5] ~@5 [f4,a4,b4]@5 ~ [f4,a4,b4] ~@5", H: "~@6 [e4,d5] ~@11 [c4,g4] ~@5",
  I: "~@6 [f4,c5] ~@5 f4@5 ~ f4 ~@5, ~@4 [a4,b4]@3 ~", J: "[e4,g4,d5]@5 ~ [e4,g4,d5] ~@11 [c4,g4] ~@5",
  K: "[f4,a4,c5]@5 ~ [f4,a4,c5] ~@11 [f4,b4] ~@5", L: "~@6 [e4,a4] ~@11 [f4,c5] ~@5",
  M: "~@6 [e4,a4] ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5", N: "~@6 [e4,b4] ~@5 c4@5 ~ c4 ~@5, ~@4 [e4,g4]@3 ~",
  O: "~@6 [e4,b4] ~@11 [c4,g4] ~@5", P: "f4@5 ~ f4 ~@5 f4@5 ~ f4 ~@5, [a4,c5]@3 ~ [a4,b4]@3 ~",
  Q: "[g3,e4]@5 ~ [g#3,d4]@5 ~@7 [c#4,g4] ~@5", R: "[c4,f#4]@5 ~ [g3,c#4]@5 ~@7 [f#4,c5] ~@5",
  S: "e4@5 ~ e4 ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5, [g4,d5]@3 ~@5", // C G5
  T: "[e4,g4,b4]@5 ~ [e4,g4,b4] ~@5 c4@5 ~ c4 ~@5, ~@4 [e4,g4]@3 ~", U: "~@6 [e4,a4] ~@5 [d4,f4,a4]@5 ~ [d4,f4,a4] ~@5",
  V: "[e4,g4,b4]@5 ~ [e4,g4,b4] ~@11 [f4,b4] ~@5", W: "e4@5 ~ e4 ~@5 c4@5 ~ c4 ~@5, [g4,d5]@3 ~ [e4,g4]@3 ~",
  X: "[e4,g4,d5]@5 ~ [e4,g4,d5] ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5", Y: "~@6 [e4,a4] ~@11 [c4,g4] ~@5",
  Z: "[e4,g4,b4]@5 ~ [e4,g4,b4] ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5", // Em C
  AA: "[f4,a4,c5]@5 ~ [f4,a4,c5] ~@5 f4@5 ~ f4 ~@5, ~@4 [a4,b4]@3 ~", // F Asus2
  AB: "[e4,g4,a4]@5 ~ [e4,g4,a4] ~@5 [f4,a4,c5]@5 ~ [f4,a4,c5] ~@5", // A7 F
  AC: "[e4,g4,a4]@5 ~ [e4,g4,a4] ~@5 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@5", AD: "e4@5 ~ e4 ~@11 [c4,g4] ~@5, [g4,b4]@3 ~@5",
  AE: "[g3,e4]@5 ~ [g#3,d4]@5 ~ c#4@5 ~ c#4 ~@5, ~@4 [e4,g4]@3 ~", // C G#dim Em
  AF: "f4@5 ~ f4 ~@5 [f4,a4,b4]@5 ~ [f4,a4,b4] ~@5, [a4,c5]@3 ~@5", // Bm7b5 Am
  AG: "e4@5 ~ e4 ~@5 d4@5 ~ d4 ~@5, [g4,a4]@3 ~ [f4,a4]@3 ~", AH: "~@6 [e4,d5] ~@5 c4@5 ~ c4 ~@5, ~@4 [e4,g4]@3 ~",
  AI: "[f4,a4,c5]@5 ~ [f4,a4,c5] ~@5 [f4,a4,b4]@5 ~ [f4,a4,b4] ~@5", AJ: "e4@5 ~ e4 ~@11 [c4,g4] ~@5, [g4,d5]@3 ~@5",
  AK: "e4@5 ~ e4 ~@11 [f4,c5] ~@5, [g4,a4]@3 ~@5", AL: "~@6 [e4,a4] ~@5 c4@5 ~ c4 ~@5, ~@4 [e4,g4]@3 ~",
  AM: "[g3,e4]@5 ~ [g#3,d4]@5 ~ [c#4,e4,g4]@5 ~ [c#4,e4,g4] ~@5", // C G#dim C#dim
  AN: "[c4,f#4]@5 ~ [g3,c#4]@5 ~ [f#4,a4,c5]@5 ~ [f#4,a4,c5] ~@5", // Cdim Gdim F#dim
  AO: "e4@5 ~ e4 ~@5 c4@5 ~ c4 ~@5, [g4,b4]@3 ~ [e4,g4]@3 ~", AP: "e4@5 ~ e4 ~@11 [d4,a4] ~@5, [g4,a4]@3 ~@5",
  AQ: "[e4,g4,b4]@5 ~ [e4,g4,b4] ~@5 [f4,a4,b4]@5 ~ [f4,a4,b4] ~@5", AR: "~@6 [e4,g4] ~@11 [e4,g4] ~@5",
  AS: "~@3 [g3,e4] ~@2 [g3,e4]@5 ~", // C
})).s("gm_electric_guitar_muted").gain(0.15)

// chords · string ensemble 1 · "Strings ("
const string_ensemble_1 = note(`<
  ~@16 A B A C A D E F ~@8 G A H I J I K L M L N A M L O P A H L B A D E I Q I H L B F R S ~@16 I B A N F T U F ~@8 V@2
>`.pickRestart({
  A: "[c6,f6] [b5,f6]", B: "[b5,e6]@6 ~@5 c6, ~ [g5,e6]", C: "[b5,e6] [g5,c6]",
  D: "[g5,e6]@3 [g#5,d6]@3 ~@5 c#6, ~ [g5,e6]", E: "[c6,f#6]@3 [g5,c#6]@3 ~@5 f#6, ~ [c6,a6]",
  F: "[c6,f6]@6 ~@5 f6, ~ [b5,a6]", G: "[g5,e6] [g5,c6]", H: "~@5 e6 ~@5 c6, [b5,g6] [g5,e6]",
  I: "~@5 f6 ~@5 f6, [c6,a6] [b5,a6]", J: "~@5 e6 [g5,c6]@6, [g5,g6] ~", K: "~@5 e6 ~@5 c6, [a5,g6] [g5,e6]",
  L: "~@5 f6 [b5,f6]@6, [c6,a6] ~", M: "~@5 e6 ~@5 c6, [g5,g6] [g5,e6]", N: "~@5 e6 [g5,c6]@6, [b5,g6] ~",
  O: "~@5 e6 [a5,f6]@6, [a5,g6] ~", P: "[a5,e6] [g5,c6]", Q: "[g5,e6]@6 ~@5 c6, ~ [g5,e6]", R: "[a5,e6] [a5,d6]",
  S: "~@5 e6 ~@5 f6, [b5,g6] [b5,a6]", T: "[g5,e6] [g#5,d6] [g5,c#6]@2", U: "[c6,f#6] [g5,c#6] [c6,f#6]@2",
  V: "[[g5,e6]@28 ~@8 [g5,e6]@11 ~]/2", // C
})).s("gm_string_ensemble_1").gain(0.17)

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

// drums · rim
const rim = s("rim").struct("<A@7 ~ A@7 ~@9 A@7 ~@33 A@7 ~ A@7 ~@9 A@7 ~ B ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.22)

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

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@9 x ~ x] ~@23 [~@9 x ~ x] ~@32 [~@11 x] ~>").gain(0.25)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 [~@3 x ~ x!2 ~ x!3 ~] ~@23 [~@3 x ~ x!2 ~ x!3 ~] ~@32 [~@5 x] ~>").gain(0.22)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~@5 B A ~@2 B ~@7 C ~ D ~ A ~@3 B@2 D ~@3 C ~@3 D ~@7 E ~@2 C ~@6 C ~@5 D ~@4 A ~@4 A ~@2 A B@2 E ~@7 D ~ B@2
  A ~@3 D ~ F
>`.pickRestart({
  A: "~@11 x", B: "~@5 x", C: "~ x ~", D: "x", E: "~@3 x", F: "~ x ~@2",
})).gain(0.19)

// drums · high tom
const high_tom = s("ht").struct("<~@39 [~@3 x!2 ~ x!2 ~@4] ~@23 [~@3 x!2 ~ x!2 ~@4] ~@34>").gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  A ~@6 A@2 ~@6 A@2 ~@7 A ~@7 A ~@7 A ~@7 A ~@6 A@2 ~@7 A ~@6 A@2 ~@7 A ~@7 A ~@8 B
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.19)

// drums · ride
const ride = s("rd").struct("<~@16 A@7 ~@9 A@4 B A@2 ~ A C A@5 ~ A@7 ~ A@5 D A ~@17 A B A@3 B A ~@10 E>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x!7 ~ x!2 ~ x", C: "x!4 ~ x!2 ~ x!2 ~ x", D: "x ~ x!5 ~ x!2 ~ x", E: "~ x ~@2",
})).gain(0.16)

stack(
  bass, piano, electric_guitar_muted, string_ensemble_1, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, ride
)

More by Sam Cooke