Strudelify

Night Rhythms

Lee Ritenour

KeyE♭ majorTempo104 bpm
0:00/0:00
// Night Rhythms — Lee Ritenour
// 104 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(104/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.

// chords · epiano1
const epiano1 = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F G H@2 F I J K L M N O P Q F G H@2 R@3 Q F G H@2 F I J K L M N O P Q F S ~ T U@2 V@2 W X Y@2
  Z@2 AA AB AC AD AE AF W AG AH AI AJ AK N AL AM@2 AH AN AO AP AQ@2 V@2 W X Y@2 Z@2 AA AB AC AD AE AF W AG AH AI AJ AK N
  AL AM@2 AH AN AO AP AR@3 Q F G H@2 F I J K L M N O P Q F S ~
>`.pickRestart({
  A: "[[c4,bb4,eb5,g5]@27 ~ [g4,c5,f5,bb5]@4]/2", B: "[~ [eb6,g6], [c4,bb4,eb5,g5], ~@15 bb5@17]/2",
  C: "[[c4,f5,g5,c6]@27 ~ [g4,g5,bb5,eb6]@4]/2", // Csus4 Eb
  D: "[[g5,c6]@21 ~@4 [d4,e4]@6 ~, [g4,f5]@23 f5@8 ~, ~@21 [c6,d6,e6,f6]@10 ~, ~@22 [g5,a5,b5]@9 ~, ~@24 [f4,g4,a4]@7 ~]/2", // C5 Dsus2 G7 Dm7 G F
  E: "[[bb4,d5,eb5,g5]@16 [bb4,d5,eb5,g5]@3 [bb4,d5,eb5,g5] ~@2 [c4,bb4,d5,eb5,g5]@10, c4@19 ~@13]/2", // Ebmaj7 Cm7
  F: "[ab3,gb4,ab4,b4,eb5]", G: "[f3,eb4,g4,ab4,c5]@5 [g3,bb4,eb5,f5]@3",
  H: "[bb4@8 ~@5 d4@3, [c4,d5,eb5,g5], ~ bb4, ~@11 [bb3,eb4,g4]@5]/2", I: "[f3,eb4,g4,ab4,c5]@5 [g2,g3,bb4,eb5,f5]@3",
  J: "[g4,ab4,c5,eb5]@3 ~, ab3", K: "[g3,f4,g4,c5]@3 [g3,f4,g4,b4]@4 ~ [g3,f4,g4,c5] ~ [g3,f4,g4,c5] ~ [g3,f4,g4,b4]@4",
  L: "ab4 ab4@15, [gb3,f4,bb4,db5]", // Gbmaj7
  M: "[f3,eb4,f4,bb4]@3 [f3,eb4,f4,a4]@4 ~ [f3,eb4,f4,bb4] ~ [f3,eb4,f4,bb4] ~ [f3,eb4,f4,a4]@4", // Ebsus2 F7 Ebsus2 F7
  N: "[e3,eb4,ab4,b4]@15 ~", O: "[g4,b4,eb5,g5] ~@2 [f4,b4,eb5,f5] ~@2 [g3,b4,eb5,f5]@10", P: "[c4,bb4,d5,eb5,g5]",
  Q: "[c4,bb4,d5,eb5,g5]@3 [c4,bb4,d5,eb5,g5] ~@2 [c4,bb4,d5,eb5,g5]@10", // Cm7
  R: "[bb4 ~ [c4,bb4,d5,eb5,g5], [c4,d5,eb5,g5]@2 ~, ~ bb4 ~, ~@11 [bb3,eb4,g4]@13, ~@13 d4@11]/3", // Cm7 Cm Eb
  S: "[f4,ab4,c5,eb5]@8 bb4@4 ~@2 eb5 c5, ~@8 [g4,eb5,f5]@7 ~, ~@12 bb4@3 ~, ~@13 c5@2 ~", // Fm7 Cm
  T: "[bb3,eb4,g4]@13 [bb3,bb4] ~ [c4,c5]", U: "[~@15 [bb4,eb5,g5]@4 [c5,f5,bb5]@9 [c5,f5,bb5,c6]@4]/2",
  V: "[bb3@6 ~@3 bb4!2 bb4@5, [c3,eb4,g4], ~@3 [bb3,d4]@5, ~@9 g5@7]/2", W: "[ab2,ab3,g4,ab4,c5,eb5]",
  X: "[f2,ab3,c4,eb4]@5 [g2,bb3,eb4,f4]@3", // Fm7 Eb
  Y: "[~@8 bb4!2 bb4@2 ~@2 d5@2, [c3,bb3,eb4,g4], ~ g5, ~@5 eb5@3, ~@3 [bb4,f5]]/2", // Cm7 Bb5
  Z: "[[g4,eb5]@6 ~@6 ab4@6 [f2,ab3,c4,eb4] ~@2 [f2,ab3,c4,eb4] f2 ~ [g2,g3,bb3,eb4,f4] ~ g2 ~ g2@4, [ab2,ab3]@18 ~@9 [g3,bb3,eb4,f4]@3 ~@2, db5 ~@5 [g4,c5,eb5]@12 ~@14]/2", // Cm Fm7 Eb Ab Eb Cm
  AA: "[bb3,eb4,g4]@2 ~ [bb3,d4,eb4,g4] ~@6 [c2,c3,bb4,d5,g5] ~@2 [c2,c3,bb4,d5,eb5,g5] ~@2, c3@3 ~@13", // Eb Ebmaj7 Gm Cm7
  AB: "~@4 [c2,bb3,eb4,g4] ~ [bb3,d4] ~ [c3,bb3]@4 [c3,bb3,g4]@4, ~@2 c3 ~ [c2,eb4]@4", // Cm7 Bb C7 Cm
  AC: "[g3,c4,eb4] ab3 g4 [g4,bb4], ab2, ~ [g3,c4,eb4]@3, ~ ab3", AD: "[f2,ab4,c5,eb5] [g2,g3,g4,bb4,eb5,f5]",
  AE: "[c3,g3,c4,bb4,eb5,g5]@2 ~ [c3,g3,c4,bb4,d5,eb5,g5] ~@6 [c3,bb4,eb5,g5] ~@2 [c3,g3,bb4,d5] ~@2", // Cm7 Gm
  AF: "[c3,bb4,eb5]@3 [c3,bb4,eb5,g5] ~@6 [c3,bb4,eb5,g5]@6, g5 ~@15", AG: "[f2,f3,ab4,c5,eb5] [g2,g3,g4,bb4,eb5,f5]",
  AH: "[ab3,g4,ab4,c5,eb5]", AI: "[f4,g4,c5]@3 [f4,g4,b4]@13, g3", AJ: "[gb3,f4,ab4,bb4,db5]",
  AK: "[eb4,f4,bb4]@2 ~ [eb4,f4,a4]@13, f3", AL: "[g4,b4,eb5,g5] ~@2 [f4,b4,eb5,f5] ~@2 [g3,b4,eb5,g5]@9 ~",
  AM: "[c3@3 bb4@3 ~@9 g4, [bb3,eb4]@7 bb4, g4@6 bb4@5 eb5@5, ~@3 [c3,g5]@13, ~@3 eb5@3 f5@10]/2", // Eb5 C5
  AN: "[f3,ab4,c5,eb5] [g3,g4,bb4,eb5,f5]", // Fm7 Eb
  AO: "[c3,c4,bb4,eb5,g5]@2 ~ [c4,bb4,eb5,g5] ~@6 [c4,bb5,eb6,g6] ~@2 [c4,bb5,eb6,g6] ~@2, db5 ~@15", // Cm7
  AP: "~@4 [c4,bb4,eb5,g5]@2 ~ [c4,bb4,eb5,g5] ~@8", // Cm7
  AQ: "[[c4,c5,f5,bb5]@2 ~ [c4,c5,f5,ab5,bb5] ~@6 [c4,c6]@3 c4@5 [c4,c5,f5,bb5]@3 [c4,c5,f5]@3 [c4,c5]@3 [c4,c5]@5, ab5 ~@9 [f6,bb6]@22, ~@13 c6@8 [bb5,c6]@11, ~@3 f5]/2", // Fsus4 Fm C Fsus4 F5 C Bb5 Bbsus2
  AR: "[[c4,c5,f5,bb5]@2 ~ [c4,c5,f5,ab5,bb5] ~@6 [c4,c6]@3 c4@5 [c4,c5,f5,bb5]@3 [c4,c5,f5]@3 [c4,c5]@3 ~@5 [c3,bb3,d4,eb4,g4]@16, ab5 ~@9 [f6,bb6]@32 ~@6, ~@13 c6@8 [bb5,c6]@27, ~ f5, ~@9 [c4,c5]@7]/3", // Fsus4 Fm C Fsus4 F5 C Cm7 Bb5 …
})).s("gm_epiano1").gain(0.22)

// bass · slap bass 2
const bass = note(`<
  ~ A B A B A B A B A B C D A B C D E F G H I J A B C D A B A B A B C D A B C D E F G H I J A B C K@2 L@2 M A B C D A B
  C D A B C D A B C D E F G H I J A B C D A B A B A B C D A B C D A B C D A B C D E F G H I J A B C D A B A B A B C D A
  B C D E F G H I J A B C N@2
>`.pickRestart({
  A: "c2 g2 c2 c3 ~@3 c3 g2 ~ bb2 ~ eb2@4", B: "c2 g2 c2 c3 ~ c3 f2 g2 ~@2 eb2 f2 eb2@4",
  C: "ab1 ~ ab1 ab2 ~@3 ab2 eb2 ~ ab1 ~ ab1@4", D: "f1 ~ f1 f2 ~ f2 gb1 g1 ~@2 g1@2 g2 g1@3",
  E: "ab1@3 ab2 ~@3 ab1 ~@2 ab1@2 ab2@2 ab1@2", F: "g1@3 g2 ~@3 g1 ~@2 g1@2 g2@2 g1 ~",
  G: "gb1@3 gb2 ~@3 gb1 ~@2 gb1@2 gb2@2 gb1 gb2", H: "f1@3 f2 ~@3 f2 ~@2 f1@2 f2@2 f1 f2",
  I: "e1@3 e2 ~@3 e1 ~@2 e1@2 e2 ~ e1@2", J: "g1 ~@2 f1 ~@2 g1@6 g1@2 ~@2",
  K: "[f1 ~ f1 f2 ~ f2 gb1 g1 ~@2 g1@2 g2 g1@2 c2@2 ~@9 c2 ~@2 c3 ~ c3]/2",
  L: "[~@2 [b1,c2] ~@10 bb1 ~ c2@2 ~@6 c3 ~@2 c2 ~@2 c3 ~ c3]/2", // Cmaj7
  M: "~ c3 b1 ~ bb1 [b2,c3] ~ bb2 a1 a2 ab1 ab2 ~ g2 g1@2, ~@6 ab1 ~", // Cmaj7
  N: "[f1 ~ f1 f2 ~ f2 gb1 g1 ~@2 g1@2 g2 g1@2 c2@2 ~@15]/2",
})).s("gm_slap_bass_2").gain(0.3)

// bass · slap bass 2 · soft notes
const bass_soft = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~@6 C A ~ B ~ A ~ A ~ A ~ B ~ A ~ B ~@6 C A ~ B ~ D E D ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~
  B ~@6 C A ~ B ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@6 C A ~ B ~ A ~ A ~ A ~ B ~ A ~ B ~@6 C A ~ B ~@2
>`.pickRestart({
  A: "~@5 c3 ~@10", B: "~ eb2 ~@14", C: "~@7 bb1", D: "~@9 c3 ~@6", E: "~@13 ab1 ~@2",
})).s("gm_slap_bass_2").gain(0.11)

// chords · piano
const piano = note("<~@83 A@4 B C@2 D E F G@2 H I J K L@3 M N O P@4 Q R S@2 ~@19>".pickRestart({
  A: "[~@2 c5 eb5 ~ eb5 ~ eb5@2 [eb5,f5] ~@6 [c4,g4]@4 c4 gb5 ~ g5 bb5 ~@2 c6 ~ g4 ~@15 c5@7 eb5@8 [g4,bb4,eb5,f5]@3 ~, [c4,g4]@2 ~@3 [c4,g4]@3 ~@5 [c4,g4] ~ bb5@16 ~, ~@11 c5@11 ~@7 g5@2 ~@5 g5@27 ~, ~@39 [ab3,eb4]@24 ~, ~@39 [c5,f5]@3 eb5@10 [ab4,c5]@11 ~]/4", // Ebsus2 C5 Eb C5 Ab5 F5 Ab
  B: "[c4,g4] c5 ~ eb5 ~ c5 [c5,eb5] ~ f5 [c4,g4] eb5 ~ c5 [c4,g4] ~@2, ~@3 eb5", // C5 Cm C5
  C: "[g4 c4 ~@4 c4 eb6 d6 ~ c6 ~ [c4,g4,bb5] [c4,g4,c6] g5 bb5@7 [ab3,eb4,c5,f5]@2 ~ [ab3,eb4,c5,eb5]@3 [eb4,c5]@3 ~, ~@3 g4 ~@12]/2", // C7 C5 Fm7 Ab Cm
  D: "~@2 g4 ab4 bb4 ~ bb4!2 ~ b4 ~ c5 g3 db5 c5 db5, ~ [f3,c4]@2 ~@2 a4@2 ~@5 d4@2 ~@2, ~@6 [gb3,db4]@3 ~@7", // F5 Gb5
  E: "~ eb5 c5 g4 [c5,eb5] g4 [c5,f5] [c4,g4] [c5,eb5] [c4,g4] [c5,f5]@2 bb4 [c4,g4] eb5 c5, [c4,g4] ~@5 eb5 ~", // Cm F5 C5 Cm C5 F5 C5
  F: "[c4,g4] eb5 c5 [c4,g4] [bb4,eb5] g4 [bb4,eb5] g4 [bb4,eb5] [c4,g4] [c5,eb5] [c4,g4] [c5,eb5] [c4,g4] [c5,f5] [c5,eb5]", // C5 Eb5 C5 Cm C5 Cm C5 F5 …
  G: "[~ [c5,eb5] ~@2 [ab3,eb4]@2 [ab3,eb4,ab4]@3 [ab3,eb4,f4,ab4,c5,eb5]@3 [ab3,eb4,f4,eb5]@3 [f3,c4,ab4,c5,eb5]@3 [f3,c4,ab4,c5,f5]@3 [f3,c4,ab4,c5,eb5]@2 g3 [g3,d4,g4,bb4,eb5,f5]@2 ~ [g3,d4,g4,bb4,eb5,f5]@2 ~@3, ~@6 [g4,c5,eb5] ~@5 ab4 ~@19]/2", // Cm Ab5 Fm7 Fm Fm7 Gm7 Cm
  H: "c5 db5 eb5 [g5,bb5] g5 [g5,bb5] ab5 [bb5,c6] eb6 [c6,db6] eb6 [f6,g6] bb6@2 [c4,g4,c7] [c4,g4,bb6], [c4,g4]@3 ~@8 a6@3 ~@2", // Gm Bbsus2 Dbmaj7 Fsus2 C5 C7 C5
  I: "~ f6 ~ [c4,d4,g4,eb6,f6] ~ [eb6,f6] c6 ~ [bb5,c6] [c4,g4] bb5 [c4,g4] g5 eb4 bb5 g5", // Cm Ebsus2 Bbsus2 C5
  J: "~ eb5 ~ [ab3,eb4] ~ [ab5,eb6]!2 [ab3,eb4] [ab5,bb5] [ab3,eb4] [f5,bb5] [ab3,eb4] ~@2 [f5,bb5]!2, [ab3,eb4] ~@5 [f5,bb5] ~, ~@13 [ab3,eb4]@2 ~", // Ab5 Absus2 Ab5 Bb5 Ab5 Bb5 Ab5 Bb5 …
  K: "[f3,c4] [f5,g5,c6] ~@2 [f5,bb5] [f3,c4] [f5,bb5] ~ [g3,d4,f5,bb5] ~ [g3,d4,f5,bb5] ~ [g3,d4,f5,bb5] [g3,d4,f5,bb5]@2 [g3,d4,f5,c6], ~@3 [f3,c4]@2 ~@11", // F5 Fsus2 Bb5 F5 Bb5 Gm7 Gsus4 F5
  L: "[~@2 c5 eb5 f5 ~ [eb5,f5] [c4,g4] [c5,eb5,f5] ~@8 [b3,f4,g5,c6]@2 [b3,f4,f5,bb5]@4 ~ [b3,eb4,f4,g5,bb5]@3 [b3,f4,g5,c6]@8 [gb3,db4,f5,db6] [gb3,db4,f5,bb5] [gb3,db4,ab5] ~ [gb3,db4,f5,db6] ~ [gb3,db4,f5,bb5] ~ [gb3,db4,ab5]@3 [gb3,db4,f5,ab5,db6]@2, ~ [c4,g4]@2 ~@5 [c4,g4]@5 [c4,g4]@7 ~@7 eb4 ~@20, ~@5 eb5@5 ~@14, ~@11 c5@9 ~@28, ~@13 g5@2 bb5@4 ~@29]/3", // Ebsus2 C5 F7 Csus4 Bb Eb Csus4 Gbmaj7 …
  M: "[f3,f5,g5,db6] ~ [f3,f5,g5,db6] [f3,f5,g5,db6]@2 [f3,f5,g5,db6]@2 [f5,g5,c6]@3 f5 g5@3 [f3,g5]@2, ~@7 f3@7 ~@2, ~@11 [f5,c6]@5", // Gm7b5 Fsus2 F5
  N: "[eb5,ab5,b5]@2 ~ eb5@3 ~@3 eb4@3 [e3,eb4,ab4]@4, [e3,b3]@3 [b3,eb5]@5, ~@3 [ab5,b5]@13, ~@3 e3@3 ~@2", // Abm Emaj7 E5 B Abm
  O: "[eb3,eb4,b4] ~@2 [c5,eb5] ~@8 eb5@3 [eb5,f5], ~@6 [c5,g5]@9 ~", // Abm Cm Ebsus2 C5
  P: "[~ eb5 ~ c5 ~@4 [g4,c5,eb5] ~@2 [c4,g4,c5,eb5] ~@3 [c5,f5]@2 [c4,c5,eb5] ~ [c4,g4,c5] ~@4 [c4,g4,c5,f5] ~@2 [c5,eb5]@3 c5 eb4@2 [eb4,eb5]@2 [ab3,eb4,c5] ~@2 c5 ~ [ab3,eb4,c5,f5] ~@2 [ab3,eb4,c5,eb5]@3 c5 [c4,c5,f5] ~ [f3,c4,c5,eb5]@2 [f3,c4,c5]@3 [g3,d4,c5]@3 [g3,d4,c5]@3 [g3,d4,c5,eb5]@3 ~, [c4,g4]@3 ~@14 g4@2 ~@8 [c4,g4]@2 ~@2 [ab3,c5,f5]@4 ~@12 f3@2 ~@5 eb5@6 ~@4, ~@57 f5@6 ~]/4", // Cm F5 Cm C5 Csus4 Cm Eb Ab …
  Q: "[c4,g4] [c5,f5] ~ [c5,eb5] ~@4 [c4,g4,bb4,eb5,g5]@2 ~ [c4,g4,bb4,eb5,g5] ~@4", // C5 F5 Cm Cm7
  R: "~ [c4,g4,c5,f5,ab5,bb5] ~@2 [c4,g4,c5,f5,bb5]@3 ~ [c4,g4,f5,bb5,d6]@3 [g4,f5,bb5,c6] ~@4, ~@4 [e4,ab5] ~@6 c4@4 ~", // Fm Csus4 Gm7 E
  S: "[~@3 [c4,e4,g4,g5,c6,eb6] ~ [c4,g4,g5,c6,eb6] ~ [c4,g4,g5,c6,eb6]@3 ~ [c4,g4,c6]@7 [c4,g4,c6,eb6,g6]@3 [c4,g4,c6,eb6,g6]@3 ~@8, ~@7 e4 ~@3 [g5,f6]@13 ~@8]/2", // C Cm C5 Cm G7
})).s("gm_piano").gain(0.43)

// other · alto sax
const alto_sax = note(`<
  ~@30 A B@2 C@2 D@2 E@2 F@2 G@2 H I J@2 K@2 ~ L ~@61 A B@2 C@2 D@2 E@2 F@2 G@2 H I J@2 K@2 ~
>`.pickRestart({
  A: "~@10 g4 ~@2 bb4 ~@2", B: "[c5 d5@6 ~ d5@2 eb5 ~ g4 ~ c5@5 ~@7 c4 ~@2 eb4 ~@2, ~@14 bb4 ~@17]/2",
  C: "[bb4@7 ~ ab4@2 gb4 ~ f4 ~ eb4@5 ~@7 g4 ~@2 bb4 ~@2, ab4 ~@31]/2",
  D: "[c5 d5@6 ~ d5@2 eb5 ~ g4 ~ c5@6 ~@6 c4 ~@2 eb4 ~@2, ~@14 bb4 ~@17]/2",
  E: "[ab4 bb4@6 ~ ab4@2 gb4 ~ f4 ~ eb4@6 ~@8 bb3 c4 eb4 ~]/2", F: "[f4@6 eb4 ~ f4@2 eb4 ~ g4@2 f4@10 ~@8]/2",
  G: "[f4@7 ~ f4@2 gb4@2 db4@2 eb4@12 ~@6]/2", H: "eb4@7 ~ eb4@2 e4 ~ b3@2 ~@2", I: "db4@2 ~ eb4@6 ~ g4@2 ~ bb4@2 ~",
  J: "[d5@7 ~ d5 ~ eb5 ~ g4 ~ c5@8 ~@4 c4 ~@2 eb4 ~@2, c5 ~@13 bb4 ~@17]/2",
  K: "[bb4@7 ~ ab4@2 gb4 ~ f4 ~ eb4@9 ~@5 bb4 c5 eb5 c5, ab4 ~@31]/2", L: "~@13 [bb3,bb4] ~ [c4,c5]",
})).s("gm_alto_sax").gain(0.33)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A@2 B@2 C@4 ~@8 D E F G H I ~@16 D E F G H I ~@24 D E F G H I ~@24 D E F G H I ~@16 D E F G H I ~@5
>`.pickRestart({
  A: "[[bb3,eb4,g4]@7 [bb3,eb4,bb4]]/2", B: "[bb3,eb4,g4]/2",
  C: "[[bb3,eb4,g4,c5]@14 [bb3,eb4,g4]@2 eb4@11 eb4@4 ~, ~@7 eb5@2 ~@7, ~@32 [bb3,g4]@31 ~, ~@32 c5@29 ~@3]/4", // Cm7 Eb
  D: "[g4,ab4,c5,eb5]", E: "[f4,g4,c5] [f4,g4,b4]", F: "[f4,ab4,bb4,db5]", G: "[eb4,f4,bb4] [eb4,f4,a4]",
  H: "[eb4,ab4,b4]@15 ~", I: "[g4,g5]@3 [f4,f5]@3 [g3,g4]@9 ~",
})).s("gm_string_ensemble_2").gain(0.19).pan(0.6)

// chords · marimba
const marimba = note("<~@18 A B C D@2 ~@17 A B C D@2 ~@25 A B C D@2 ~@47 A B C D@2 ~@5>".pickRestart({
  A: "[f5,g5,c6]!2 ~ [f5,g5,b5] ~@4 [f5,g5,c6] ~ [f5,g5,c6] ~ [f5,g5,b5]@2 ~@2", B: "[f5,ab5,bb5,db6]@7 ~@9",
  C: "[eb5,f5,bb5] [eb5,f5,bb5]@2 [eb5,f5,a5] ~@4 [eb5,f5,bb5] ~ [eb5,f5,bb5] ~ [eb5,f5,a5] ~@3", // Ebsus2 F7 Ebsus2 F7
  D: "[~@22 eb5@9 ~, eb5@19 db6@12 ~, ~@4 ab5@27 ~, ~@8 bb5@23 ~, ~@12 db6@4 eb6@15 ~]/2",
})).s("gm_marimba").gain(0.26).pan(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<A ~@7 B ~@12 C D ~@20 C D ~@28 C D ~@28 C D ~@20 C D ~@5>".pickRestart({
  A: "~@7 x", B: "~@11 x!2 ~@3", C: "~@13 x!2 ~", D: "x ~@2 x ~@2 x ~@9",
})).gain(0.21)

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

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

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@8 A ~@7 B ~@4 C ~@8 B ~@7 B ~@4 C ~@8 D ~@7 B ~@7 B ~@4 C ~@8 B ~@7 B ~@7 B ~@4 C ~@8 B ~@7 B ~@4 C ~@6
>`.pickRestart({
  A: "~ x ~@6", B: "~@15 x", C: "~@9 x ~@6", D: "~@11 x ~@4",
})).gain(0.21)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  ~@16 A ~@13 A ~@7 A ~@21 A ~@7 A ~@13 A ~@7 A ~@7 A ~@13 A ~@7 A ~@11
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.12)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@6 A@2 ~@4 B A ~@3 A ~@2 A@2 ~@6 A@2 ~@4 B A ~@2 C ~ D ~ E A ~@6 A@2 ~@6 A@2 ~@4 B A ~@3 A ~@2 A@2 ~@6 A@2
  ~@6 A@2 ~@4 B A ~@3 A ~@2 A@2 ~@6 A@2 ~@4 B A ~@2 C ~
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~@9", C: "~@15 x", D: "~@4 x ~@8 x ~ x", E: "x ~ x!2",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct("<~@17 A B@4 ~@17 A B@4 ~@25 A B@4 ~@25 A B@4 ~@17 A B@4 ~@6>".pickRestart({
// … 12 more lines