Strudelify
Young Hearts Run Free cover art

1976 · Young Hearts Run Free

Young Hearts Run Free

Candi Staton

KeyE♭ majorTempo118 bpm
0:00/0:00
// Young Hearts Run Free — Candi Staton
// 118 bpm, 4/4, key Eb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 acoustic bass (copy of ch 2 slap bass 1)
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 42 ms ahead of the beat; the grid follows it, so its parts stay together.
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, A@4 for four bars: edit a riff to change every repeat.

// chords · epiano2
const epiano2 = note(`<
  ~@4 A B C B D@6 E@2 F@8 G B H I B J K@2 L@3 M@2 N K O P@3 Q@2 R@8 S@8 G T U V W X@2 Y@4 M@2 N K O Z AA@2 M@2 AB AC
  AD@2 AE@2 O Z AF@2 AG@2 AH O AI Z AJ@2 AK@2 AL AM O Z AN@2 AO AP AQ O AR AS AN@2 AT@2 AU AC B AV AW
>`.pickRestart({
  A: "~@7 [b3,db4,e4,gb4]", B: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@9 ~ [b3,db4,e4,gb4]@2",
  C: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@9 ~ [b3,db4,e4,gb4] ~", // Bsus4
  D: "[~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@6 ~@4 [e3,ab3,b3]@8 [e3,ab3,db4]@7 ~ [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@9 ~ [e3,ab3,b3]@7 ~ [e3,ab3,db4]@7 ~ [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@6 ~@4 [a3,db4,e4]@7 ~ [a3,db4,gb4]@7 ~ [a3,ab4]@2, ~@94 [db4,d4] ~]/6", // Bsus4 E Dbm Emaj7 Dbm E Dbm Emaj7 …
  E: "[~ [a3,db4,ab4] ~@2 [a3,db4,gb4]@6 ~@4 [e3,ab3,b3]@8 [e3,ab3,db4]@7 ~ [e3,ab3,b3] ~]/2", // Amaj7 Gbm E Dbm E
  F: "[[ab3,b3] [ab3,db4]@12 ~ [e3,ab3,b3]@7 ~ [e3,ab3,db4]@7 ~ [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@9 ~ [e3,ab3,b3]@7 ~ [e3,ab3,db4]@7 ~ [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@6 ~@4 [a3,db4,e4]@7 ~ [a3,db4,gb4]@7 ~ [a3,db4,ab4]@6 [a3,db4,gb4]@6 ~@4 [e3,ab3,b3]@7 ~ [e3,ab3,db4]@7 ~ [e3,ab3,b3] ~, e3@13 ~@115]/8", // Abm Db5 E Dbm Emaj7 Dbm E Dbm …
  G: "[e3,ab3,b3] [e3,ab3,db4]@9 ~@4 [b3,db4,e4,gb4]@2", // E Dbm Bsus4
  H: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@7 ~ [db4,gb4] b2 [b3,db4,e4,gb4]@2", // Bsus4 Gb5 Bsus4
  I: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@8 ~ b2 [b3,db4,e4,gb4]@2", // Bsus4
  J: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@6 ~@4 [a3,db4,e4,ab4]@2", K: "~ [a3,db4,e4,gb4]@12 ~ [a3,db4,e4,ab4]@2",
  L: "[~ [a3,db4,e4,gb4]@2 ~ [a3,db4,e4,ab4] ~ [a3,e4,gb4]@4 [a3,db4,e4]@3 ~ [db4,e4]@2 ~ [db4,eb4]@2 ~ [a3,db4,e4] ~ [a3,db4,eb4]@4 [a3,db4]@3 ~ db4@5 ~@3 b3@7 ~ [e3,ab3,b3] ~, ~@6 db4 ~@7 a3@5 ~@11 [e3,ab3]@15 ~@3, ~@30 b3 ~@17]/3", // Gbm7 Amaj7 Gbm7 A Dbm Dbsus2 A Ebm7b5 …
  M: "[[ab3,b3] [e3,ab3,db4]@12 ~ [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~]/2", // Abm Dbm E
  N: "[e3,ab3,b3] [e3,ab3,db4]@8 ~@5 [a3,db4,e4,ab4]@2", O: "~ [a3,db4,e4,gb4]@10 ~@3 [a3,db4,e4,ab4]@2",
  P: "[~ [a3,db4,e4,gb4]@12 ~ [db4,gb4]@3 e4@2 ~ eb4 ~ [a3,db4,e4]@3 ~ [a3,db4,eb4]@2 ~@2 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~, ~@7 a3@4 ~@13, ~@14 e4 ~@2 db4@5 ~@26]/3", // Gbm7 Gb5 A Ebm7b5 Dbm E
  Q: "[[ab3,b3] [e3,ab3,db4]@13 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~]/2", // Abm Dbm E
  R: "[[e3,ab3,b3] [e3,ab3,db4]@10 ~@3 [e3,ab3,b3]@7 ~ [e3,ab3,db4]@5 ~@3 [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@9 ~ [e3,ab3,b3]@7 ~ [e3,ab3,db4]@6 ~@2 [e3,ab3,eb4]@4 ~@2 [e3,ab3,db4]@6 ~@4 [a3,db4,e4]@7 ~ [a3,db4,gb4]@7 ~ [a3,db4,ab4]@6 [a3,db4,gb4]@6 ~@4 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~]/8", // E Dbm E Dbm Emaj7 Dbm E Dbm …
  S: "[[e3,ab3,b3] [e3,ab3,db4]@12 ~ [e3,ab3,b3]@7 ~ [e3,ab3,db4]@7 ~ [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@9 ~ [e3,ab3,b3]@7 ~ [e3,ab3,db4]@5 ~@3 [e3,ab3,eb4]@5 ~ [e3,ab3,db4]@6 ~@4 [a3,db4,e4]@7 ~ [a3,db4,gb4]@7 ~ [a3,db4,ab4]@6 [a3,db4,gb4]@6 ~@4 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~]/8", // E Dbm E Dbm Emaj7 Dbm E Dbm …
  T: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@7 ~ [b3,db4,gb4] b2 [b3,db4,e4,gb4]@2", // Bsus4 Bsus2 Bsus4
  U: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@7 ~ gb4 b2 [b3,db4,e4,gb4]@2", // Bsus4
  V: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@7 ~ [b3,db4,e4,gb4] b2 [b3,db4,e4,gb4]@2", // Bsus4
  W: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@7 ~ [b3,db4] b2 [b3,db4,e4,gb4]@2", // Bsus4 Bsus2 Bsus4
  X: "[~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@6 ~@4 [a3,db4,ab4]@3 [a3,db4,gb4]@12 ~ [a3,db4,e4,ab4]@2, ~@14 e4@15 ~@3]/2", // Bsus4 Amaj7 Gbm Amaj7
  Y: "[~ [a3,db4,e4,gb4]@12 ~ [db4,e4,ab4]@3 [db4,e4,gb4]@2 ~ [db4,e4,ab4] ~ [a3,db4,e4,gb4]@3 ~ [a3,db4,e4]@3 ~ [db4,e4]@2 ~ [db4,eb4]@2 ~ [a3,db4,e4] ~ [a3,db4,eb4]@4 db4@2 ~@2 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~, ~@14 a3@5 ~ a3@2 ~@8 a3@5 ~@29]/4", // Gbm7 Dbm Gb7 Dbm Gbm7 A Dbm Dbsus2 …
  Z: "~ [a3,db4,e4,gb4]@2 ~ [a3,db4,e4,ab4] ~ [a3,db4,e4,gb4]@3 ~ [a3,db4,e4]@3 ~ [a3,db4,e4]@2", // Gbm7 Amaj7 Gbm7 A
  AA: "[~ [a3,db4,eb4]@2 ~ [a3,db4,e4] ~ [a3,db4,eb4]@3 ~ [a3,db4]@2 ~@2 [e3,ab3,db4]@6 b3 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~]/2", // Ebm7b5 A Ebm7b5 A Dbm E
  AB: "[ab3,b3] [e3,ab3,db4]@9 ~@4 [b3,db4,e4,gb4]@2, ~ b3 ~@14", // Abm Dbm Bsus4
  AC: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@9 b2 [b3,db4,e4,gb4]@2", // Bsus4
  AD: "~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@7 ~@2 b2 [b3,db4,e4,gb4]@2", // Bsus4
  AE: "[~ [b3,db4,e4,gb4] ~@2 [b3,db4,e4,gb4]@8 ~@2 [db4,e4,ab4]@3 [db4,e4,gb4]@11 ~@2 [a3,db4,e4,ab4]@2, ~@7 a3@7 ~@2]/2", // Bsus4 Dbm Gb7 Amaj7
  AF: "[~ [a3,db4,eb4]@2 ~ [a3,db4,e4] ~ [a3,db4,eb4]@4 [a3,db4]@2 ~@2 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~]/2", // Ebm7b5 A Ebm7b5 A Dbm E
  AG: "[[e3,ab3,b3] [e3,ab3,db4]@12 ~ [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 e3 [e3,ab3,b3] ~]/2", // E Dbm E
  AH: "[e3,ab3] [e3,ab3,db4]@8 ~@5 [a3,db4,e4,ab4]@2", // E Dbm Amaj7
  AI: "~ [a3,e4,gb4] ~@2 [a3,db4]@2 [a3,db4,e4,gb4]@6 ~@2 [a3,db4,e4,ab4]@2, ~ db4@2 ~ [e4,ab4] ~@11", // Gbm7 A Gbm7 Amaj7 E
  AJ: "[~ [a3,db4,eb4]@2 ~ [a3,db4,e4] ~ [a3,db4,eb4]@3 ~ [a3,db4]@2 ~@2 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@4 ~@4 [e3,ab3,b3] ~]/2", // Ebm7b5 A Ebm7b5 A Dbm E
  AK: "[[e3,ab3,b3] [e3,ab3,db4]@9 ~ [e3,ab3,db4] ~@2 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@7 e3 [e3,ab3,b3] ~]/2", // E Dbm E
  AL: "~ [e3,ab3,db4]@8 ~@5 [a3,db4,e4,ab4]@2", AM: "~ [a3,db4,gb4]@9 ~@4 [a3,db4,e4]@2, ~@14 ab4 ~",
  AN: "[~ [a3,db4,eb4]@2 ~ [a3,db4,e4] ~ [a3,db4,eb4]@3 ~ [a3,db4]@2 ~@2 [e3,ab3,db4]@7 ~ [e3,ab3,b3]@6 ~@2 [e3,ab3,b3] ~]/2", // Ebm7b5 A Ebm7b5 A Dbm E
  AO: "ab3 [e3,ab3,db4]@12 ~@3", AP: "[e3,ab3,db4]@5 ~ [e3,ab3,b3]@7 ~ [e3,ab3,b3] ~",
  AQ: "[ab3,b3] [e3,ab3,db4]@8 ~@5 [a3,db4,e4,ab4]@2", // Abm Dbm Amaj7
  AR: "~ [a3,db4,e4,gb4] ~@2 [a3,db4,e4,ab4] ~ [a3,db4,e4,gb4]@4 ~@4 [a3,db4,e4,ab4] ~", // Gbm7 Amaj7 Gbm7 Amaj7
  AS: "~ [a3,db4,e4,gb4] ~@2 [a3,db4,e4,ab4] ~ [a3,db4,e4,gb4]@3 ~ [a3,db4,e4]@3 ~ [a3,db4,e4]@2", // Gbm7 Amaj7 Gbm7 A
  AT: "[[e3,ab3] [e3,ab3,db4]@11 ~@2 [e3,ab3,db4]@7 ~ [ab3,b3]@6 e3 ~ [e3,ab3,b3] ~, ~ b3 ~@20 e3@5 ~@5]/2", // E Dbm Abm E
  AU: "ab3 [e3,ab3,db4]@9 ~@4 [b3,db4,e4,gb4]@2", AV: "b2 [b3,db4,e4,gb4] ~ b2 [b3,db4,e4,gb4]@9 ~ [b3,db4,e4,gb4]!2",
  AW: "~@4 [b3,db4,e4,gb4]!2 ~@4 [b3,db4,e4,gb4]@3 ~@3", // Bsus4
})).s("gm_epiano2").gain(0.42)

// bass · slap bass 1
const bass = note(`<
  ~@4 A B C@2 D@2 E F G H I F E F J F G H I F K C L@2 C M H@3 I F E F G H@3 I F E F N@2 E F G H I F E F J F G H I F K C
  L@2 C M H@3 I F E F G H@3 I F E F O C L C M H@3 I F E F G H@3 I F E F P@2 H@2 I F E F G H@3 I F E F O Q B R S
>`.pickRestart({
  A: "~@7 b1", B: "~ b1 ~ ab1 b1@2 ~ b1 ab1@2 a1@2 bb1 ab1 b1@2", C: "~ b1 ~ ab1 b1!2 ~ b1 ab1@2 a1@2 bb1 ab1 b1@2",
  D: "[~ b1 ~ ab1 b1 ~ b1 db2@3 e2 gb2@3 e1@5 e1 b1@2 db2@4 b1@2 db2 b1 e1@2]/2",
  E: "~ e1 ~ e1 b1@2 db2 ~ db2@2 b1@2 db2 b1 e1@2", F: "~ e1 ~ e1 b1@2 db2@4 b1@2 db2 b1 e1@2",
  G: "~ e1 ~ e1 b1@2 db2 ~ db2@2 b1@2 bb1@2 a1@2", H: "~ a1 ~ e1 a1@2 gb1 ~ gb1@2 e1@2 gb1 e1 a1@2",
  I: "~ a1 ~ e1 a1@2 gb1 ~ gb1@2 e1@2 gb1@2 e1@2", J: "~ e1 ~ e1 b1@2 db2 ~ db2@2 b1@2 db2@2 e1@2",
  K: "~ e1 ~ e1 b1@2 db2@2 ab1@2 a1@2 bb1 ab1 b1@2", L: "~ b1 ~ ab1 b1!2 ~ b1 ab1@2 a1 ~ bb1 ab1 b1@2",
  M: "~ b1 ~ ab1 b1@2 ab1 b1@3 ~ bb1@3 a1@2",
  N: "[~ e1 ~ e1 b1@2 db2 ~ db2@2 b1@2 db2 ~ e1@5 e1 b1@2 db2@4 b1@2 db2 b1 e1@2]/2",
  O: "~ e1 ~ e1 b1@2 db2 ~ db2@2 b1@2 db2 ~ b1@2",
  P: "[~ e1 ~ e1 b1@2 db2 ~ db2@2 b1@2 db2 ~ a1@4 ~ e1 a1@2 gb1 ~ gb1@2 e1@2 gb1 e1 a1@2]/2",
  Q: "~ b1 ~@2 b1@2 ~ b1 ab1@2 a1@2 bb1 ab1 b1@2", R: "~ b1 ~ ab1 b1@2 ~ b1 ab1@2 a1@2 bb1@2 b1!2",
  S: "~@4 b1!2 ~@4 b1@3 ~@3",
})).s("gm_slap_bass_1").gain(0.5)

// chords · brass section
const brass_section = note(`<
  ~@4 A B@2 C@2 ~@5 D E F ~@5 D E G ~ H ~ H ~@5 I J K L ~@4 K L K L ~@5 M@2 L ~@6 K J ~ H ~ H ~@5 K J K J ~@4 K J K N
  ~@8 K J K J ~@4 K J O P ~@4 K J K J ~@4 K J O Q B@2 R S
>`.pickRestart({
  A: "~@8 b4 ~ b4 a4 ab4 ~ ab4 ~", B: "[a4 gb4@22 ~ b4 ~ b4 a4 ab4 ~ ab4 ~]/2", C: "[a4 gb4@28 ~@3]/2",
  D: "~@7 [e3,b3]", E: "~ [e3,b3] ~@2 [e3,db4]@9 ~ [e3,b3]@2", F: "~ [e3,b3] ~@2 [e3,db4]@10 ~@2",
  G: "~ [e3,b3] ~@2 [e3,db4]@6 ~@6", H: "~@8 ab4 ~ gb4 e4 db4 ~@3", I: "~@14 [e3,ab3,b3] ~", J: "b3 db4@13 ~@2, e3@7 ~",
  K: "~@14 [e3,b3] ~", L: "[e3,b3] [e3,db4]@13 ~@2", M: "[~@14 [e3,db4]@7 ~ [e3,b3]@7 ~ [e3,b3] ~]/2",
  N: "b3 db4@8 ~ [b3,db4] [e4,gb4] [ab4,b4] [db5,e5,gb5] [ab5,b5,db6,e6] gb6, e3@9 ~@7", O: "~@14 [e4,b4] ~",
  P: "b4 db5@13 ~@2, e4@7 ~", Q: "b4 db5@6 ~ b4 ~ b4 a4 ab4 ~ ab4 ~, e4@7 ~@9", R: "a4 gb4@12 ~ [gb4,b4,e5]!2",
  S: "~@4 [gb4,b4,e5]!2 ~@4 [gb4,b4,e5]@2 db5 [ab4,b4] [b3,db4,e4,gb4] ab3", // Esus2 Abm Bsus4
})).s("gm_brass_section").gain(0.71)

// other · alto sax
const alto_sax = note("<~@82 A B C D E@2 ~@35>".pickRestart({
  A: "~@12 b4 ~ b4@2, ~@13 db5@2 ~", B: "~ b4@8 ~ ab4@2 b4 ~ ab4@2, ~@10 gb4 ~@3 gb4 ~", C: "gb4@13 ~@3", D: "~ gb5@3",
  E: "[db5 b4 db5@2 b4 ab4 b4 ~ ab4 gb4 ab4@2 gb4@2 e4@10 ~@8]/2",
})).s("gm_alto_sax").gain(0.78)

// chords · brass section
const brass_section_2 = note(`<
  ~@4 A B@2 C@2 ~@5 D E F ~@5 D E G ~ H ~ H ~@5 I J K L ~@4 K L K L ~@5 M@2 L ~@6 K J ~ H ~ H ~@5 K J K J ~@4 K J K N
  ~@8 K J K J ~@4 K J O P ~@4 K J K J ~@4 K J O Q B@2 R S
>`.pickRestart({
  A: "~@8 b5 ~ b5 a5 ab5 ~ ab5 ~", B: "[a5 gb5@22 ~ b5 ~ b5 a5 ab5 ~ ab5 ~]/2", C: "[a5 gb5@28 ~@3]/2",
  D: "~@7 [e4,b4]", E: "~ [e4,b4] ~@2 [e4,db5]@9 ~ [e4,b4]@2", F: "~ [e4,b4] ~@2 [e4,db5]@10 ~@2",
  G: "~ [e4,b4] ~@2 [e4,db5]@6 ~@6", H: "~@8 ab5 ~ gb5 e5 db5 ~@3", I: "~@14 [e4,ab4,b4] ~", J: "b4 db5@13 ~@2, e4@7 ~",
  K: "~@14 [e4,b4] ~", L: "[e4,b4] [e4,db5]@13 ~@2", M: "[~@14 [e4,db5]@7 ~ [e4,b4]@7 ~ [e4,b4] ~]/2",
  N: "b4 db5@8 ~ [b4,db5] [e5,gb5] [ab5,b5] [db6,e6,gb6] [ab6,b6,db7,e7] gb7, e4@9 ~@7", O: "~@14 [e5,b5] ~",
  P: "b5 db6@13 ~@2, e5@7 ~", Q: "b5 db6@6 ~ b5 ~ b5 a5 ab5 ~ ab5 ~, e5@7 ~@9", R: "a5 gb5@12 ~ [gb5,b5,e6]!2",
  S: "~@4 [gb5,b5,e6]!2 ~@4 [gb5,b5,e6]@2 db6 [ab5,b5] [b4,db5,e5,gb5] ab4", // Esus2 Abm Bsus4
})).s("gm_brass_section").gain(0.71)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@9 A B A@5 C A@2 B A@4 D ~@5 A B A@5 C A@2 B A@4 D A B A@5 C A@2 B A@4 D ~@5 A B A@5 C A@2 B A@4 D ~@4 A B A@5 C A@2
  B A@4 D A B A@5 C A@2 B A@4 D ~@4
>`.pickRestart({
  A: "e3 ~@2 e3 ~@2 e3 ~@2 e3 ~@2 db3 b2 ~@2", B: "e3 ~@2 e3 ~@2 e3 ~@2 e3 ~@2 b2 db3 ~@2",
  C: "e3 ~@2 e3 ~@2 b2 db3 e3 ~ gb3@2 e3 db3 ~@2", D: "e3 ~@2 e3 ~@2 b2 db3 [e3,gb3] ~ gb3@2 e3 ~@3",
})).s("gm_electric_guitar_muted").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A B@9 C B@3 C B@3 C B@3 C B@4 C B D B@17 C B@3 C B@3 C B@3 C B@4 C B D B@54 E F
>`.pickRestart({
  A: "~@7 x", B: "~ x ~ x ~ x ~ x", C: "~@2 x ~@3 x ~@2 x!2 ~@3 x ~", D: "~@4 x ~@2 x ~@2 x ~@3 x ~",
  E: "~ x ~ x ~ x ~@2", F: "~ x ~@2 x!2 ~@2",
})).gain(0.71)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@3 A@2 ~@2 A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@3 B ~ B ~ B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~
  A@3 B ~ B ~ B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 ~@2 A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2
  ~@2 A C
>`.pickRestart({
  A: "~@5 x ~@10", B: "~@13 x ~@2", C: "~ x ~@5 x ~@8",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@4 B ~@31 A ~@4 B ~@56>".pickRestart({
  A: "~@3 x", B: "~@13 x ~@2",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B@3 C B D E F E F E F E G E F E F E F E H I J I K L B C B M B C B D B C B M B C B D E F E F E F E G E F E F E F
  E H I J I K L B C B M B C B D B C B M B C B D B C B D B C B M B C B D B C B M B C B D B C B M B C B D B C B M B C B D
  B C N ~
>`.pickRestart({
  A: "~@7 x", B: "~ x!2 ~ x ~ x!2 ~@2 x ~@2 x!2 ~", C: "~ x!2 ~ x ~ x!2 ~@2 x ~@3 x ~", D: "~ x!2 ~ x ~ x ~@7 x ~",
  E: "~ x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~", F: "~ x!2 ~ x!2 ~ x ~@2 x!3 ~ x ~", G: "~ x!2 ~ x!3 ~ x ~@2 x ~@2 x ~",
  H: "~ x!2 ~ x!3 ~@7 x ~", I: "x ~ x!4 ~ x!2 ~@2 x!2 ~ x!2", J: "x ~ x!4 ~ x!2 ~@2 x!2 ~ x ~",
  K: "x ~ x!4 ~ x!2 ~@2 x!5", L: "x ~@6 x", M: "~ x!2 ~ x ~ x!2 ~@2 x!2 ~@2 x ~", N: "~ x!2 ~ x ~ x ~@9",
})).gain(0.5)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C B@3 C B D E F E F E F E D E F E F E F E G ~@4 A B C B D B C B D B C B D B C B D E F E F E F E D E F E F E F E G
  ~@4 A B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C G ~
>`.pickRestart({
  A: "~@15 x", B: "x ~@2 x ~@7 x!2 ~@2 x", C: "x ~@2 x ~@7 x ~@3 x", D: "x ~@2 x ~@11 x",
  E: "x ~@2 x ~@2 x ~@4 x!2 ~@2 x", F: "x ~@2 x ~@2 x ~@8 x", G: "x ~@2 x ~@12",
})).gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@3 A ~@3 A ~@15 B ~@4 A ~@7 A ~@7 A ~@15 B ~@4 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@2 A ~
>`.pickRestart({
  A: "~@3 x", B: "~@11 x ~@4",
})).gain(0.71)

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

// drums · high tom
const high_tom = s("ht").struct("<~@24 A ~@4 B ~@31 A ~@4 B ~@56>".pickRestart({
  A: "~@5 x ~@2", B: "~@11 x ~@4",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@8 ~@16 B@5 A@16 ~@16 B@5 A@55 C>".pickRestart({
  A: "x!4", B: "~ x ~@3 x ~@2", C: "x!3 ~",
// … 18 more lines