Strudelify

Dear Lie

TLC

KeyC majorTempo87 bpm
0:00/0:00
// Dear Lie — TLC
// 87 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): "Fan Mail", guitar program 30, guitar program 29.
setcpm(87/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.

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B@3 ~ C@2 D E C@2 D C ~ F G H E I J K L M N O P ~@11 Q R@2 ~ Q@2 S T Q@2 S Q ~ U V W X Y Z AA AB AC AD AE AF ~@11 AG
  AH ~@2 AI AJ AK AL AM AN AO AP AQ AR AS AT ~@15
>`.pickRestart({
  A: "~@5 g3@12 d4@12 e4@12 ~@7", B: "[~@5 c4@12 d4@12 c4@12 ~@6 f4@6 e4@12 a3@24 g3@42 ~@13]/3",
  C: "~@5 c4@12 d4@12 c4@12 ~@7", D: "~@5 g3@12 a3@12 g3@12 ~@7", E: "~@5 c4@12 d4@12 ~@19",
  F: "~@5 d4@6 g3@12 d4@6 ~@19", G: "~@5 c4@12 d4@12 c4@6 ~@13", H: "~@11 g3@12 a3@12 ~@13", I: "~ d4 g3@2 d4@2 ~@2",
  J: "~ g3@2 ~@5", K: "~@3 g3@2 ~@3", L: "~ c4@2 ~@3 c4@2", M: "~@3 c4@2 ~ c4@2", N: "~ c4 ~ d4@2 ~ d4@2, ~ g3 ~@2",
  O: "~@2 a3 d3@2 ~@3", P: "~@2 g3 a3@2 ~ a3 ~", Q: "~@7 c4@12 d4@12 c4@12 ~@5", R: "[~ f4@6 e4@12 a3@24 g3@42 ~@11]/2",
  S: "~@7 g3@12 a3@12 g3@12 ~@5", T: "~@7 c4@12 d4@12 ~@17", U: "~@4 d4@3 g3@6 d4@3 ~@8", V: "~@4 c4@6 d4@6 c4@3 ~@5",
  W: "~@7 g3@6 a3@6 ~@5", X: "~@2 c4@3 d4@3 ~@4", Y: "~@4 d4@3 g3@6 d4@6 ~@5", Z: "~@2 g3@3 ~@7", AA: "~@5 g3@3 ~@4",
  AB: "~@4 c4@6 ~@9 c4@5", AC: "~@10 c4@6 ~@3 c4@5", AD: "~@4 c4@3 ~@3 d4@6 ~@3 d4@5, ~@7 g3@6 ~@11",
  AE: "~@7 a3@3 d3@6 ~@8", AF: "~@7 g3@3 a3@6 ~@3 a3@3 ~@2", AG: "~@3 g3@4 d4@4 e4@4 ~", AH: "~@3 c4@4 a3@4 g3@4 ~",
  AI: "~@3 d4@2 g3@4 d4@2 ~@5", AJ: "~@3 c4@4 d4@4 c4@2 ~@3", AK: "~@5 g3@4 a3@4 ~@3", AL: "~@3 c4@4 d4@4 ~@5",
  AM: "~@3 d4@2 g3@4 d4@4 ~@3", AN: "~@3 g3@4 ~@9", AO: "~@7 g3@4 ~@5", AP: "~@3 c4@4 ~@6 c4@3",
  AQ: "~@7 c4@4 ~@2 c4@3", AR: "~@3 c4@2 ~@2 d4@4 ~@2 d4@3, ~@5 g3@4 ~@7", AS: "~@5 a3@2 d3@4 ~@5",
  AT: "~@15 g3@6 ~ a3@12 ~@6 a3@6 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.47)

// other · acoustic guitar nylon · ""Fan Mail""
const acoustic_guitar_nylon = note(`<
  ~ A ~ B ~@2 A ~ C ~ A ~ C D ~@23 E ~ F ~@2 E ~ G ~ E ~ H I ~@24 J ~ K ~@27
>`.pickRestart({
  A: "~@11 e2@12 ~@25", B: "~@5 c3@6 f2@12 ~@25", C: "~@11 f2@12 ~@12 f2@12 ~", D: "~@11 f2@12 ~@6 f2@12 ~@7",
  E: "~@13 e2@12 ~@23", F: "~@7 c3@6 f2@12 ~@23", G: "~@13 f2@12 ~@12 f2@11", H: "~@13 f2@12 ~@13 f2@10",
  I: "~@7 f2@6 ~@3 f2@6 ~@2", J: "~@5 e2@4 ~@7", K: "~@5 f2@4 ~@2 f2@4 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.47)

// other · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  A@7 B@8 C@4 D E F G H I H J K L M N O P M Q O R S T U V W S X U W S X U Y Z AA AB AC AD AE AF AG AH AI AJ AI AK@2 AL
  AB AM AN AO AP AQ AR AS AT AU AV AW AX@3 AY AZ BA BB BC BD BE BF BG@3 BH@8 BI@2 ~@3
>`.pickRestart({
  A: "[c4@47 a3@48 ~@6 g3@6 c3@12 ~@6 g3@12 ~@6 g3@48 [f3,d4]@42 ~@6 c4@48 a3@48 f3, ~@95 f3@48 ~@193]/7", // Dm
  B: "[~@5 g3@6 c3@6 ~@30 g3@48 c4@48 a3@48 ~@6 g3@6 c3@6 ~@30 g3@48 a2@48 ~@6 d4@6 g3@6 d4@12 ~@12 d4@6 c3, ~@191 f3@48 ~@96 b2@48 ~]/8",
  C: "[~@47 f2@36 f2@12 ~@12 f3@12 ~@6 f3@12 ~@25 a3@12 ~@6 b3@12, ~@95 a3@48 b3@36 ~@13, ~@13 g3 ~@2]/4", D: "c4@3 c4",
  E: "a#3@3 a#3", F: "a3@3 a3", G: "g#3@3 g#3", H: "g3@3 g3", I: "f#3@3 f#3", J: "b3@14 b3 c4, g3", K: "b3 ~@7",
  L: "c3@3 c3", M: "~ f2@36 f2@11", N: "~ a2@36 a2@11", O: "~ f2@18 e2@18 d2@11", P: "~ c2@36 c2@11",
  Q: "~ a#2@36 a#2@11", R: "~ c2@47", S: "~ a3@47", T: "~@7 g3@6 c3@12 ~@6 g3@12 ~@5, ~ f3@47", U: "~ g3@47",
  V: "~ [f3,d4]@42 ~@5", W: "~ c4@47", X: "~@7 g3@6 c3@6 ~@29, ~ f3@47", Y: "~ a2@23",
  Z: "~@4 d4@3 g3@3 d4@6 ~@6 d4@2, ~ b2@23", AA: "~ c3@23", AB: "~ f2@18 f2@5", AC: "~@7 f3@6 ~@3 f3@6 ~@2, ~ a3@23",
  AD: "~@10 a3@6 ~@3 b3@5, ~ b3@18 ~@5, ~@7 g3@6 ~@11", AE: "~ c4@18 c4@5", AF: "~ a#3@18 a#3@5", AG: "~ a3@18 a3@5",
  AH: "~ g#3@18 g#3@5", AI: "~ g3@18 g3@5", AJ: "~ f#3@18 f#3@5", AK: "[~@2 b3@42 b3@3 c4@3 b3@6 ~@40, ~ g3@24 ~@23]/2",
  AL: "~ c3@18 c3@5", AM: "~ a2@18 a2@5", AN: "~ f2@9 e2@9 d2@5", AO: "~@2 c2@36 ~ c2@9", AP: "~ f2@12 f2@3",
  AQ: "~ a#2@12 a#2@3", AR: "~ f2@6 e2@6 d2@3", AS: "~ c2@15", AT: "~ c4@15", AU: "~ a3@15", AV: "~ [f3,c4]@15",
  AW: "~ a2@15", AX: "[~@3 d4@2 g3@2 d4@4 ~@4 d4@2 c3@16 f2@12 f2@3, ~ b2@16 ~@31]/3",
  AY: "~@5 f3@4 ~@2 f3@4 ~, ~ a3@15", AZ: "~@7 a3@4 ~@2 b3@3, ~ b3@12 ~@3, ~@5 g3@4 ~@7", BA: "~ c4@12 c4@3",
  BB: "~ a#3@12 a#3@3", BC: "~ a3@12 a3@3", BD: "~ g#3@12 g#3@3", BE: "~ g3@12 g3@3", BF: "~ f#3@12 f#3@3",
  BG: "[~@3 g3@36 ~ g3@12 b3@42 b3@3 c4@3 b3@6 ~@38, ~@13 g3@12 ~@11]/3",
  BH: "[~@2 c3@18 c3@6 f2@18 f2@6 a2@18 a2@6 f2@9 e2@9 d2@6 c2@18 c2@6 f2@18 f2@6 a#2@18 a#2@6 f2@9 e2@9 d2@4]/8",
  BI: "[~ c2@12 ~@11]/2",
})).s("gm_acoustic_guitar_steel").gain(0.47)

// other · pad sweep · "Eddie Wong"
const pad_sweep = note("<~@39 A ~@9 B@2 ~ C@3 D@4 ~@2 B@2 ~@12 E F@2 ~ G@3 H@4 ~@2 F@2 ~@14>".pickRestart({
  A: "~ g4@47", B: "[~ c5@6 ~@5]/2", C: "[~ c5@6 c5@6 ~@5]/3", D: "[~ c5@6 c5@6 c5@6 ~@5]/4", E: "~ d4@15",
  F: "[~@3 c5@16 ~@13]/2", G: "[~@3 c5@16 c5@16 ~@13]/3", H: "[~@3 c5@16 c5@16 c5@16 ~@13]/4",
})).s("gm_pad_sweep").gain(0.17)

// other · acoustic guitar steel
const acoustic_guitar_steel_3 = note(`<
  ~@17 A B C D E F ~@5 G H I ~ J K L ~@18 M N O P Q R ~@5 S T U ~ V W X ~@9 Y Z AA AB AC AD ~@5 AE AF AG@2 AH AI@3 ~@5
>`.pickRestart({
  A: "~@5 c4@12 d4@12 c4@12 ~@7", B: "~ d4 g3 d4@2 ~@3", C: "~@3 e4@2 ~@3, ~ g3@2 ~@5, ~ c4 ~@2",
  D: "~@3 e4@2 ~@3, ~ c4@2 ~@5, ~ g3 ~@2", E: "~@3 e4@2 ~@3, ~ c4@2 ~@5, ~ f3 ~@2",
  F: "~@3 d4@2 ~@3, ~ c4@2 ~@5, ~ f3 ~@2", G: "~@2 e4 d4@2 c4@2 ~", H: "~@13 f3@6 c4@12 ~@17",
  I: "~@13 f3@6 d4@12 ~@6 d4@11", J: "~@13 e4@6 d4@12 e4@12 ~@5", K: "~ a3@12 e3@6 c4@12 ~@6 c4@11",
  L: "~@19 e4@12 ~@6 e4@11", M: "~@2 c4@3 d4@3 c4@3 ~", N: "~@4 d4@3 g3@3 d4@6 ~@8",
  O: "~@5 e4@3 ~@4, ~@2 g3@3 ~@7, ~@7 c4@6 ~@11", P: "~@5 e4@3 ~@4, ~@2 c4@3 ~@7, ~@7 g3@6 ~@11",
  Q: "~@5 e4@3 ~@4, ~@2 c4@3 ~@7, ~@7 f3@6 ~@11", R: "~@5 d4@3 ~@4, ~@2 c4@3 ~@7, ~@7 f3@6 ~@11",
  S: "~@7 e4@3 d4@6 c4@6 ~@2", T: "~@7 f3@3 c4@6 ~@8", U: "~@7 f3@3 d4@6 ~@3 d4@5", V: "~@14 e4@6 d4@12 ~ e4@12 ~@3",
  W: "~ a3@4 e3@2 c4@4 ~@2 c4@3", X: "~@7 e4@4 ~@2 e4@3", Y: "~@3 c4@4 d4@4 c4@4 ~", Z: "~@3 d4@2 g3@2 d4@4 ~@5",
  AA: "~@7 e4@4 ~@5, ~@3 g3@4 ~@9, ~@5 c4@4 ~@7", AB: "~@7 e4@4 ~@5, ~@3 c4@4 ~@9, ~@5 g3@4 ~@7",
  AC: "~@7 e4@4 ~@5, ~@3 c4@4 ~@9, ~@5 f3@4 ~@7", AD: "~@7 d4@4 ~@5, ~@3 c4@4 ~@9, ~@5 f3@4 ~@7",
  AE: "~@8 e4@3 d4@6 c4@6 ~", AF: "~@8 f3@3 c4@6 ~@7", AG: "[~@8 f3@3 d4@6 ~@3 d4@6 ~@22]/2",
  AH: "~@8 e4@3 d4@6 e4@6 ~", AI: "[~@2 a3@6 e3@3 c4@6 ~@3 c4@6 ~@9 e4@6 ~@3 e4@6 ~@22]/3",
})).s("gm_acoustic_guitar_steel").gain(0.24)

// bass · electric bass pick
const bass = note(`<
  ~@28 A B C D E B F D E ~@4 G H I J G H I K L M N O L M N P L Q R S T U ~ N V L W X Y Z AA AB AC AD Y AD AE AC AF AD AE
  AC AG AD AH AI AJ AK@3 AL@8 AM@2 ~@3
>`.pickRestart({
  A: "c2", B: "~ f1@47", C: "~ a1@47", D: "~ f1@18 e1@18 d1@11", E: "~ c1@47", F: "~ a#1@47", G: "~ c2@18 c2@29",
  H: "~ a1@18 a1@29", I: "~ f1@18 f1@29", J: "~ g1@18 g1@18 g1@11", K: "~ g1@18 g1@18 ~ g1@10", L: "~ a1@9 a1@14",
  M: "~ b1@9 b1@14", N: "~ c2@9 c2@14", O: "~ f1@9 f1@9 f1@5", P: "~ a#1@9 a#1@9 a#1@5", Q: "~ g#1@9 g#1@14",
  R: "~ g1@9 g1@14", S: "~ f#1@9 f#1@9 f#1@5", T: "~ g1@23", U: "~ [g1,b1]@23", V: "~ f1@9 f1@14",
  W: "~ f1@9 e1@9 d1@5", X: "~ c1@9 c1@14", Y: "~ f1@6 f1@9", Z: "~ a#1@6 a#1@9", AA: "~ f1@6 e1@6 d1@3", AB: "~ c1@15",
  AC: "~ c2@6 c2@9", AD: "~ a1@6 a1@9", AE: "~ b1@6 b1@9", AF: "~ f1@6 f1@6 f1@3", AG: "~ a#1@6 a#1@6 a#1@3",
  AH: "~ g#1@6 g#1@9", AI: "~ g1@6 g1@9", AJ: "~ f#1@6 f#1@6 f#1@3", AK: "[~@3 g1@49 [g1,b1]@48 ~@44]/3",
  AL: "[~@2 c2@9 c2@15 f1@9 f1@15 a1@9 a1@15 f1@9 e1@9 d1@6 c1@9 c1@15 f1@9 f1@15 a#1@9 a#1@15 f1@9 e1@9 d1@4]/8",
  AM: "[~ c1@12 ~@11]/2",
})).s("gm_electric_bass_pick").gain(0.47)

// other · string ensemble 1
const string_ensemble_1 = note("<~@27 A B C@2 D E@2 C F G ~@12 H I@3 H J@7 ~@2 K ~@40>".pickRestart({
  A: "~@10 e4@2 d4!2 c4@2", B: "c4@4 ~@6 e4@2 d4!2 c4@2", C: "~ c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@5",
  D: "~@7 c4@6 d4@6 d4@6 ~@6 e4@6 d4@3 d4@3 c4@5",
  E: "[~ e4@6 d4@3 c4@3 ~@6 c4@6 e4@6 f4@6 g4@6 f4@12 e4@6 d4@6 e4@6 ~@6 e4@6 d4@3 d4@3 c4@5]/2",
  F: "~ d4@3 d4@3 c4@6 ~@6 d4@3 d4@3 c4@6 ~@6 d4@3 d4@3 c4@5", G: "~ c4@12 ~@35", H: "~@2 a3@3 a3@6 ~",
  I: "[~@2 b3@3 b3@3 b3@3 f4@3 e4@3 d4@3 c4@3 d4@3 e4@3 e4@3 ~@4]/3",
  J: "[~@4 b3@6 b3@9 ~@3 f4@6 e4@12 ~@6 f4@6 e4@12 ~@6 f4@6 f4@12 ~@6 f4@6 e4@12 ~@6 g4@6 g4@6 g4@9 ~@3 a4@6 d4@12 ~@8]/7",
  K: "~@32 e4@6 d4@3 d4@3 c4@4",
})).s("gm_string_ensemble_1").gain(0.24)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@63 A B@3 C D@5 ~@3 E F@3 E G@7 ~@2 H@8 I@2 ~@4>".pickRestart({
  A: "~@32 e4@6 d4@3 d4@3 c4@4", B: "~@2 c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@4",
  C: "~@8 c4@6 d4@6 d4@6 ~@6 e4@6 d4@3 d4@3 c4@4",
  D: "[~@2 e4@6 d4@3 c4@3 ~@6 c4@6 ~ e4@6 f4@6 g4@6 f4@12 e4@6 d4@6 e4@6 ~@6 e4@6 d4@3 d4@3 c4@6 c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@6 d4@3 d4@3 c4@6 ~@6 d4@3 d4@3 c4@6 ~@6 d4@3 d4@3 c4@6 c4@12 ~@33]/5",
  E: "~@3 a3@4 a3@8 ~", F: "[~@3 b3@4 b3@4 b3@4 f4@4 e4@4 d4@4 c4@4 d4@4 e4@4 e4@4 ~@5]/3",
  G: "[~@3 b3@4 b3@6 ~@2 f4@4 e4@8 ~@4 f4@4 e4@8 ~@4 f4@4 f4@8 ~@4 f4@4 e4@8 ~@4 g4@4 g4@4 g4@6 ~@2 a4@4 d4@8 ~@5]/7",
  H: "[~@34 e4@6 d4@3 d4@3 c4@6 c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@6 c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@6 c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@6 ~@6 c4@6 d4@6 d4@6 ~@6 e4@6 d4@3 d4@3 c4@6 e4@6 d4@3 c4@3 ~@6 c4@6 e4@6 f4@6 g4@6 f4@12 e4@6 d4@6 e4@6 ~@6 e4@6 d4@3 d4@3 c4@6 c4@12 d4@3 ~@15 e4@6 d4@3 d4@3 c4@2]/8",
  I: "[~@4 d4@3 d4@3 c4@6 ~@6 d4@3 d4@3 c4@6 ~@6 d4@3 d4@3 c4@6 c4@12 ~@32]/2",
})).s("gm_string_ensemble_1").gain(0.57)

// other · distortion guitar
const distortion_guitar = note("<~@89 A@2 ~@13>".pickRestart({
  A: "[~ [b2,g3]@12 g3@6 ~@5]/2", // Em
})).s("gm_distortion_guitar").gain(0.24)

// other · overdriven guitar
const overdriven_guitar = note("<~@64 A B C ~ D E F ~@19 G H@4 I@4 ~@5>".pickRestart({
  A: "~@5 c3@7", B: "~@5 f2@7", C: "~@5 a2@7", D: "~@5 c2@7", E: "~@7 f2@9", F: "~@7 a#2@9", G: "~@4 g4@24 g4@3 ~@17",
  H: "[~@11 c3@15 ~@9 f2@15 ~@9 a2@15 ~@22]/4", I: "[~@11 c2@15 ~@9 f2@15 ~@9 a#2@15 ~@22]/4",
})).s("gm_overdriven_guitar").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  A B@2 ~ B@14 ~ C@7 ~ C D E@2 F E@3 F G@4 ~ E@3 H E@3 I J@3 K J@3 K J@3 K J L@2 J@3 M J N@2 O P@4 N@3 Q N@3 Q N@3 Q R
  S@2 T@3 U T@3 U ~@5
>`.pickRestart({
  A: "x ~@46 x", B: "~@47 x", C: "x", D: "x ~@2 x ~@4", E: "~ x ~@17 x ~@28", F: "~ x ~@17 x ~@23 x ~@4", G: "~ x ~@46",
  H: "~ x ~@17 x ~@11 x ~@11 x ~@4", I: "~ x ~@17 x ~@11 x ~@12 x ~@3", J: "~ x ~@8 x ~@13",
  K: "~ x ~@8 x ~@5 x ~@5 x ~", L: "~ x ~@22", M: "~ x ~@8 x ~@11 x ~", N: "~ x ~@5 x ~@8", O: "~ x ~@5 x ~@7 x",
  P: "~ x ~@14", Q: "~ x ~@5 x ~@3 x ~@3 x", R: "~@3 x ~@18 x ~@25", S: "~ x ~@10", T: "~@2 x ~@8 x ~@12",
  U: "~@2 x ~@8 x ~@11 x",
})).gain(0.47)

// drums · rim
const rim = s("rim").struct("<A@18 B@8 ~@2 C D@7 E@4 ~ D@7 F G@13 ~@10 H@3 ~@13 I ~@15>".pickRestart({
  A: "~@35 x ~@12", B: "~@3 x", C: "~ x ~ x", D: "~@13 x ~@23 x ~@10", E: "~@37 x ~@10", F: "~@13 x ~@24 x ~@9",
  G: "~@7 x ~@11 x ~@4", H: "~@13 x ~@2", I: "~@15 x ~@24 x ~@7",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct("<~@27 A ~@35 B C@4 D E@3 ~@3 F@13 ~@2 G H@8 ~@5>".pickRestart({
  A: "~@3 x", B: "~@13 x ~@10", C: "~@7 x ~@11 x ~@4", D: "~@14 x ~@24 x ~@8", E: "~@5 x ~@7 x ~@2", F: "~@13 x ~@2",
  G: "~@7 x ~@4", H: "~@2 x ~@2 x",
})).gain(0.47)

// drums · hihat
const hihat = s("hh").struct("<A@18 B@9 ~ C D@7 E@4 ~ D@7 F G@12 H I J G@4 K L@3 M@4 L@12 N O P Q@8 ~@5>".pickRestart({
  A: "~@11 x ~@36", B: "~ x ~@2", C: "x!8", D: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", E: "~@13 x ~@34",
  F: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@3", G: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  H: "~@2 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~@3",
  I: "~@8 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@3", J: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@10",
  K: "~@2 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@2", L: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", M: "~@5 x ~@10",
  N: "~@3 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~",
  O: "~@10 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~", P: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@9",
  Q: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
})).gain(0.47)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@13 A@5 B@8 ~@10 C D@2 E ~@32 F G@2 H ~@28>".pickRestart({
  A: "~@29 x ~@18", B: "~@5 x ~@2", C: "~@25 x ~@5 x ~@5 x ~@5 x ~@4", D: "~ x ~@5 x ~@11 x ~@5 x ~@5 x ~@2 x ~@13",
  E: "~ x ~@5 x ~@11 x ~@5 x ~@5 x ~@16", F: "~@9 x ~ x ~ x ~ x", G: "~ x ~ x ~@3 x ~ x ~ x!2 ~@3",
  H: "~ x ~ x ~@3 x ~ x ~ x ~@4",
})).gain(0.18)

// drums · open hat
const open_hat = s("oh").struct("<~@28 A B@7 ~ B@3 C ~@22 D E@4 F@4 ~ F@3 ~@14 G H@8 ~@5>".pickRestart({
  A: "~@7 x", B: "~@43 x ~@4", C: "~@37 x ~@10", D: "~@5 x ~@6", E: "~@11 x", F: "~@15 x", G: "~@11 x ~@12",
  H: "~@23 x",
})).gain(0.47)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@44 A ~@3 B ~@3 B ~ B ~ B@6 ~@14 C@12 D ~@15>".pickRestart({
  A: "~@43 x ~@4", B: "~@11 x", C: "~@15 x", D: "~@23 x",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct(`<
  ~@62
  [~@8 x ~@2 x ~@11 x ~@11 x ~@11 x]
  ~@26
  [~@4 x ~@5 x ~@2 x ~@11 x ~@11 x ~@10]
  [~ x ~@46]
  ~@13
// … 26 more lines

More by TLC