Strudelify

Stay With Me 'Till the Morning

Vicki Brown

KeyB♭ majorTempo90 bpm
0:00/0:00
// Stay With Me 'Till the Morning — Vicki Brown
// 90 bpm, 4/4, key A# 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 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B C D E F G H I@2 J K L M N@2 I@2 J K L M O P A B C D E F G Q R S T U V W X Y Z@2 AA AB AC AD AE AF AG AH AI AJ AK
  AL AM AN AO AP AQ AR AS AT AU AV AW AX AY ~
>`.pickRestart({
  A: "[eb3,eb4,g4]@2 [f3,d4,f4,ab4] [g3,db4,g4,bb4]", B: "bb4 ~ [g3,f4] [c3,e4,g4], c5, [ab3,eb4] ~, ~ ab4@2 ~",
  C: "[f3,ab4]@5 [g3,bb4] [ab3,c5] [a3,db5], f4", D: "bb3 ab3, [f4,bb4,d5]",
  E: "[g3,d4,g4,bb4]@2 [ab3,eb4,ab4,c5] [bb3,d4,f4,bb4]", F: "[c4,g4,c5] [d4,f4,bb4,d5]@2 [eb3,eb4,g4,bb4]",
  G: "[ab3,f4,ab4]@2 bb4 ab4, c4@3 ~ [bb3,d4,f4]@4", H: "[bb2,bb3,d4,ab4] [eb3,bb3,eb4,g4]",
  I: "[[eb3,g3,eb4]@2 [bb2,d4] [g3,eb4], bb3, ~@12 eb3@3 ~]/2", J: "eb3@2 d3 c3, [g3,eb4]", K: "[bb2,d4] [eb3,g3,eb4]",
  L: "bb2@2 d3 [eb3,g3,eb4], d4@3 ~", M: "bb2@2 d3 [eb3,g3,eb4], [f3,d4]@3 ~",
  N: "[[f3,d4]@2 [a3,eb4]@2 ~ ab4 g4 f4, ~ f3@3, ~ d4]/2", O: "[f3,d4] [f3,a3,eb4]",
  P: "[bb3,d4]@3 ~ [bb3,d4]@4 [c4,eb4]@4 [d4,f4]@4, [bb2,f3] [bb2,ab3]", // Bb Cm Dm Bb5 Bb7
  Q: "[bb2,bb3,d4,ab4]@2 ~ bb4, ~ [eb3,bb3,eb4,g4]", // Bb7 Eb
  R: "[eb3,eb4,g4]@4 ~ f5 eb5 d5, g5@10 g5 ~@5, ~@2 [f3,d4,f4,ab4] [g3,db4,g4,bb4]", // Eb Ddim Gdim
  S: "bb4 ~ [g3,f4] [c3,e4,g4,c5], c5@11 ~@5, [ab3,eb4] ~, ~ ab4@2 ~", // G7 C Ab5
  T: "[f3,ab4,ab5]@5 [g3,bb4,g5] [ab3,c5,f5] [a3,db5,eb5], f4", U: "bb3@2 ~ f5, [f4,bb4], d5@3 ~, ~ ab3",
  V: "[g3,d4,g4,bb4]@4 ~ ab5 g5 f5, bb5@5 ~@3, ~@2 [ab3,eb4,ab4,c5] [bb3,d4,f4,bb4]", // Gm Ab Bb
  W: "eb5 ab5 [d4,f4,bb4,d5,ab5]@4 [eb3,eb4,g4,bb4,g5]@2, [c4,g4,c5] ~@3", // Bb7 Eb C5
  X: "[c4,f5]@6 g5 ab5 [bb4,eb5]@4 [ab4,d5]@4, [ab3,f4,ab4] [bb3,d4,f4]", Y: "[c3,bb3,d4,f4,f5] [c3,bb3,c4,e4,e5]",
  Z: "[[f3,a3,f4]@2 [c3,e4] [a3,f4], c4, ~@12 f3@3 ~]/2", AA: "f3@2 e3 d3, [a3,f4]", AB: "[c3,e4] [f3,a3,f4]",
  AC: "c3@2 e3 [f3,a3,f4], e4@3 ~", AD: "c3@2 e3 [f3,a3,f4], [g3,e4]@3 ~", AE: "[g3,e4] [g3,b3,f4]",
  AF: "[c4,e4]@3 ~ [c4,e4]@4 [d4,f4]@4 [e4,g4]@4, [c3,g3] [c3,bb3]", AG: "[f3,f4,a4]@2 [g3,e4,g4,bb4] [a3,eb4,a4,c5]",
  AH: "c5 ~ [a3,g4] [d3,gb4,a4], d5, [bb3,f4] ~, ~ bb4@2 ~", AI: "[g3,bb4]@5 [a3,c5] [bb3,d5] [b3,eb5], g4",
  AJ: "c4 bb3, [g4,c5,e5]", AK: "[a3,e4,a4,c5]@2 [bb3,f4,bb4,d5] [c4,e4,g4,c5]",
  AL: "[d4,a4,d5] [e4,g4,c5,e5]@2 [f3,f4,a4,c5]", AM: "[bb3,g4,bb4]@2 c5 bb4, d4@3 ~ [c4,e4,g4]@4",
  AN: "[c3,c4,e4,bb4]@2 ~ c5, ~ [f3,c4,f4,a4]", // C7 F
  AO: "[f3,f4,a4]@4 ~ g5 f5 e5, a5@5 ~@3, ~@2 [g3,e4,g4,bb4] [a3,eb4,a4,c5]", // F Edim Adim
  AP: "c5 ~ [a3,g4] [d3,gb4,a4,d5], d5@11 ~@5, [bb3,f4] ~, ~ bb4@2 ~", // A7 D Bb5
  AQ: "[g3,bb4,bb5]@5 [a3,c5,a5] [bb3,d5,g5] [b3,eb5,f5], g4", AR: "c4@2 ~ g5, [g4,c5], e5@3 ~, ~ bb3",
  AS: "[a3,e4,a4,c5]@4 ~ bb5 a5 g5, c6@5 ~@3, ~@2 [bb3,f4,bb4,d5] [c4,e4,g4,c5]", // Am Bb C
  AT: "f5 bb5 [e4,g4,c5,e5,bb5]@4 [f3,f4,a4,c5,a5]@2, [d4,a4,d5] ~@3", // C7 F D5
  AU: "[d4,g5]@6 a5 bb5 [c5,f5]@4 [bb4,e5]@4, [bb3,g4,bb4] [c4,e4,g4]", AV: "[c3,c4,e4,bb4,g5]@8 [d3,d4,f4,a4,f5]@7 ~",
  AW: "[bb2,g4]@8 f4@3 ~ [c4,e4]@3 ~, d4@11 ~@5, ~@8 c3@7 ~", AX: "[c3,c4,g4]", AY: "[f2,a3,f4]",
})).s("gm_string_ensemble_1").gain(0.4)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~@2 A ~@3 B ~@3 C D@2 E@3 F ~ C D@2 E@3 ~@2 A ~@3 B ~@3 A ~@3 B ~@3 G H@2 I@3 ~@2 J ~@3 K ~@2 L J ~@3 M ~@2 N O P ~
>`.pickRestart({
  A: "~@3 bb4", B: "eb4 ~@3", C: "f3 ~", D: "[~@2 f3 ~, bb3]/2", E: "[bb3@5 c4, f3@5 ~@19]/3", F: "bb3", G: "g3 ~",
  H: "[~@2 g3 ~, c4]/2", I: "[c4@5 d4, g3@5 ~@19]/3", J: "~@3 c5", K: "f4 ~@3", L: "~@10 a5 ~@5",
  M: "~@2 ab5 ~@13, f4 ~@3", N: "bb3@8 bb3@7 ~", O: "bb3@15 ~", P: "c4",
})).s("gm_string_ensemble_1").gain(0.24)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P I J Q L M N O R A B C D E F G H A B C D E F G S T U V W X Y Z AA AB AC AD AE AF AG
  AH AI AB AC AD AE AF AG AH AJ AK AL AM ~
>`.pickRestart({
  A: "eb2@5 ~ eb2@2 f2@4 g2@3 ~", B: "ab2@5 ~ f2 gb2 g2@4 c2@3 ~", C: "f2@5 ~ f2 ~ f2@2 g2@2 ab2@2 a2@2",
  D: "bb2@5 ~ bb2@2 ab2@5 ~ f2 gb2", E: "g2@5 ~ g2@2 ab2@4 bb2@4", F: "c3@2 c2 db2 d2@5 ~ d2@2 eb2@3 ~",
  G: "ab1@6 ab1@2 bb1@3 ~ bb1@3 ~", H: "bb1@8 eb2@5 ~ bb1 ~", I: "eb2@5 ~ bb1@2 eb2@5 ~ eb2 ~",
  J: "bb1@5 ~ bb1 ~ eb2@5 ~ bb1@2", K: "eb2@5 ~ eb2@2 d2@3 ~ c2@4", L: "bb1@5 ~ bb1@2 eb2@7 ~",
  M: "bb1@5 ~ bb1@2 d2@3 ~ eb2@3 ~", N: "bb1@5 ~ bb1@2 d2@4 eb2@4", O: "f2@5 ~ f2 ~ f1@5 ~ f1@2",
  P: "bb1@5 ~ bb1 ~ bb1@4 c2@2 d2@2", Q: "eb2@5 ~ eb2@2 d2@3 ~ c2@3 ~", R: "bb1@3 ~ bb1@4 bb2@4 bb1@4",
  S: "c2@6 ~ g2 c3@3 ~ c3 bb2 a2 g2", T: "f2@5 ~ c2@2 f2@5 ~ f2 ~", U: "c2@5 ~ c2 ~ f2@5 ~ c2@2",
  V: "f2@5 ~ f2@2 e2@3 ~ d2@3 ~", W: "c2@5 ~ c2@2 f2@7 ~", X: "c2@5 ~ c2@2 e2@3 ~ f2@3 ~", Y: "c2@5 ~ c2@2 e2@4 f2@4",
  Z: "g2@5 ~ g2@2 g1@5 ~ g1@2", AA: "c2@3 ~ c2@4 c3@4 c2@4", AB: "f2@5 ~ f2@2 g2@4 a2@3 ~",
  AC: "bb2@5 ~ g2 ab2 a2@4 d2@3 ~", AD: "g2@5 ~ g2 ~ g2@2 a2@2 bb2@2 b2@2", AE: "c3@5 ~ c3@2 bb2@5 ~ g2 ab2",
  AF: "a2@5 ~ a2@2 bb2@4 c3@4", AG: "d3@2 d2 eb2 e2@5 ~ e2@2 f2@3 ~", AH: "bb1@6 bb1@2 c2@3 ~ c2@3 ~",
  AI: "c2@8 f2@5 ~ c2 ~", AJ: "c2@7 ~ d2@7 ~", AK: "bb1@8 c2@7 ~", AL: "c2", AM: "f1",
})).s("gm_fretless_bass").gain(0.56)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note("<A B C D E F G H I ~@23 J K L M N O P Q R ~@28>".pickRestart({
  A: "~@3 bb3", B: "g4@5 f4 eb4 d4", C: "c4@3 c4", D: "ab4@5 g4 f4 eb4", E: "d4@3 f4", F: "bb4@5 ab4 g4 f4",
  G: "eb4 ab4 ab4@4 g4@2", H: "f4@6 g4 ab4 eb4@4 d4@4", I: "f4@4 eb4@3 ~", J: "~@12 bb3@2 ~ bb3",
  K: "bb4@7 ~ bb4 ab4 g4 ab4 g4 f4 eb4 d4", L: "c4@5 ~ c5@2", M: "ab5@9 ~ g5@2 f5@2 eb5@2",
  N: "d5 [d5,eb5,e5] f5@10 f5@4", O: "bb5@5 ab5 g5 f5", P: "eb5 ab5 ab5@4 g5@2", Q: "f5@6 g5 ab5 eb5@4 d5@4",
  R: "f5@8 e5@7 ~",
})).s("gm_distortion_guitar").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H I J K L M N O P I J K L M N O P A Q C D E F G H A Q C D E F G R S T U V W X Y Z AA AB AC AD AE AF AG
  AH AA AB AC AD AE AF AG AI AJ AK AL AM
>`.pickRestart({
  A: "g3@2 g3@2 g3@2 g3@2 f3 ~ f3@2 g3 ~ g3@2, eb2@2 [f2,ab3,d4] [g2,bb3,db4,eb4], [bb3,eb4]!2 ~@2", // Ddim Eb7 Eb5
  B: "ab3 ~@5 [ab3,eb4]@2 ab3 ~ ab3@2 g3 ~ g3@2, ab2@2 [g2,c4,f4] [c3,bb3,e4], eb4@3 ~@5, c4!2 ~@2, ~ ab3@2 ~@5", // Ab5 Csus4 C7
  C: "ab3 ~ ab3@2 ab3@2 ab3@2 ~@2 g2@2 [ab3,c4,f4]@2 a2@2, f2@8 [f2,ab3,c4,f4]@4 ab2 ~@3, [c4,f4] f3@2 ~, ~ [c4,f4] ~@2", // Fm F5
  D: "[bb3,d4]@2 f3 ~ f3@2 [bb2,f3]@2 f3 ~ f3@2 f3@2 [ab2,f3]@2, bb2@3 ~ ab2@3 ~, ~ [bb3,d4]!3", // Bb Bb5 Db Bb
  E: "bb3 ~ bb3@2 bb3@2 [g2,bb3]@2 ab3 ~ ab3@2 bb3 ~ bb3@2, g2@3 ~ [ab2,c4,eb4]@2 [bb2,d4,f4]@2, [d4,g4] [g3,d4,g4] ~@2", // Gm Ab Bb G5
  F: "c4 ~ c4@2 d3@4 ~@2 d4@2 eb4 ~ eb4@2, [c3,eb4,g4] [f4,bb4]@2 ~, ~@2 d4@3 ~@3, ~@2 d3 [eb3,g4,bb4]", // Cm Bb5 Eb
  G: "c4 ~ c4@2 c4@2 [ab2,c4]@2 d4 ~ d4@2 d4 ~ d4@2, ab2@3 ~ bb2@4, [f4,ab4] [ab3,f4,ab4] [f4,bb4] [f4,ab4]", // Ab Fm Db Bb5 Fm
  H: "d4 ~@5 [bb2,ab4]@2 g4@2 bb3@2 eb4@2 g4 ~, [bb2,ab4]@6 ~@2 eb3@7 ~, f4 [bb3,f4] ~@2, ~ d4@3 ~@4", // Bb7 Bb5
  I: "[g3,bb3,eb4]@2 [bb3,eb4]@2 [bb3,eb4]@2 g3!2, eb3@7 ~, ~@2 g3 ~ g3 ~ [bb3,eb4]@2", // Eb Eb5
  J: "f3 ~@3 ab3@2 ab3@2 g3@2 g3@2 g3@2 g3@2, bb2@7 ~@9, [bb3,d4]!2 [bb3,eb4]!2, ~ f3@3 eb3@4", // Bb Eb5
  K: "g3 ~ g3@2 g3@2 g3@2 ~@2 g3@2 [c3,bb3,eb4]@4, eb3@2 d3 ~, [bb3,eb4]@4 [bb3,eb4]@8 g3 ~@3", // Cm7 Eb5
  L: "f3 ~ f3@2 ~@2 f3@2 [bb3,eb4]@4 [bb3,eb4]@4, bb2@4 eb3@3 ~, [bb3,d4]@4 [ab3,bb3,d4]@4 g3 ~@3 g3@2 ~@2", // Eb5 Bb Bb7
  M: "[bb3,d4]@4 f3@2 f3@2 f3 ~ f3@2 g3 ~ g3@2, bb2@2 [d3,bb3,d4] [eb3,bb3,eb4], f3 ~@3 [bb3,d4]@4 ~@8", // Bb Gm Eb5 Bb
  N: "[bb3,d4]!2 [d3,bb3,d4] [eb3,bb3,eb4], bb2 ~, f3 ~@7 f3 ~@3 g3 ~@3", // Bb Gm Eb5
  O: "bb3 ~ bb3@2 [d4,f4]@4 [c4,eb4]@4 a3@2 a3@2, f3@4 f3@3 ~, [d4,f4]@4 bb3@2 ~@2 a3 ~@3 [c4,eb4]@4", // Dm Cm Dm Cm
  P: "[bb3,d4]@4 f3@2 f3@2 [bb2,ab3,d4]@4 [bb2,ab3,d4]@2 f3 ~, bb2 ~, f3 ~@3 [bb3,d4]@4 f3 ~@3 f3 ~@3", // Bb Bb7 Bb
  Q: "ab3@2 ~@4 [ab3,eb4]@2 ab3 ~ ab3@2 g3 ~ g3@2, ab2@2 [g2,c4,f4] [c3,bb3,e4], eb4@3 ~@5, c4!2 ~@2, ~ ab3@2 ~@5", // Ab5 Csus4 C7
  R: "[d4,f4]@2 bb3 ~ bb3 ~ bb3@2 [c4,e4]@2 bb3 ~ [c4,e4]@2 [c3,bb3] ~, c3@7 ~ c3@5 ~@3, bb3 ~@3 [d4,f4]@4 bb3 ~@3 bb3 ~@3", // Dm C C7 Dm
  S: "[a3,c4,f4]@2 [c4,f4]@2 [c4,f4]@2 a3!2, f3@7 ~, ~@2 a3 ~ a3 ~ [c4,f4]@2", // F F5
  T: "g3 ~@3 bb3@2 bb3@2 a3@2 a3@2 a3@2 a3@2, c3@7 ~@9, [c4,e4]!2 [c4,f4]!2, ~ g3@3 f3@4", // C F5
  U: "a3 ~ a3@2 a3@2 a3@2 ~@2 a3@2 [d3,c4,f4]@4, f3@2 e3 ~, [c4,f4]@4 [c4,f4]@8 a3 ~@3", // Dm7 F5
  V: "g3 ~ g3@2 ~@2 g3@2 [c4,f4]@4 [c4,f4]@4, c3@4 f3@3 ~, [c4,e4]@4 [bb3,c4,e4]@4 a3 ~@3 a3@2 ~@2", // F5 C C7
  W: "[c4,e4]@4 g3@2 g3@2 g3 ~ g3@2 a3 ~ a3@2, c3@2 [e3,c4,e4] [f3,c4,f4], g3 ~@3 [c4,e4]@4 ~@8", // C F5 C
  X: "[c4,e4]!2 [e3,c4,e4] [f3,c4,f4], c3 ~, g3 ~@7 g3 ~@3 a3 ~@3", // C F5
  Y: "c4 ~ c4@2 [e4,g4]@4 [d4,f4]@4 b3@2 b3@2, g3@4 g3@3 ~, [e4,g4]@4 c4@2 ~@2 b3 ~@3 [d4,f4]@4", // Em Dm Em Dm
  Z: "[c4,e4]@4 g3@2 g3@2 [c3,bb3,e4]@4 [c3,bb3,e4]@2 g3 ~, c3 ~, g3 ~@3 [c4,e4]@4 g3 ~@3 g3 ~@3", // C C7 C
  AA: "a3@2 a3@2 a3@2 a3@2 g3 ~ g3@2 a3 ~ a3@2, f2@2 [g2,bb3,e4] [a2,c4,eb4,f4], [c4,f4]!2 ~@2", // Edim F7 F5
  AB: "bb3 ~@5 [bb3,f4]@2 bb3 ~ bb3@2 a3 ~ a3@2, bb2@2 [a2,d4,g4] [d3,c4,gb4], f4@3 ~@5, d4!2 ~@2, ~ bb3@2 ~@5", // Bb5 Dsus4 D7
  AC: "bb3 ~ bb3@2 bb3@2 bb3@2 ~@2 a2@2 [bb3,d4,g4]@2 b2@2, g2@8 [g2,bb3,d4,g4]@4 bb2 ~@3, [d4,g4] g3@2 ~, ~ [d4,g4] ~@2", // Gm G5
  AD: "[c4,e4]@2 g3 ~ g3@2 [c3,g3]@2 g3 ~ g3@2 g3@2 [bb2,g3]@2, c3@3 ~ bb2@3 ~, ~ [c4,e4]!3", // C C5 Eb C
  AE: "c4 ~ c4@2 c4@2 [a2,c4]@2 bb3 ~ bb3@2 c4 ~ c4@2, a2@3 ~ [bb2,d4,f4]@2 [c3,e4,g4]@2, [e4,a4] [a3,e4,a4] ~@2", // Am Bb C A5
  AF: "d4 ~ d4@2 e3@4 ~@2 e4@2 f4 ~ f4@2, [d3,f4,a4] [g4,c5]@2 ~, ~@2 e4@3 ~@3, ~@2 e3 [f3,a4,c5]", // Dm C5 F
  AG: "d4 ~ d4@2 d4@2 [bb2,d4]@2 e4 ~ e4@2 e4 ~ e4@2, bb2@3 ~ c3@4, [g4,bb4] [bb3,g4,bb4] [g4,c5] [g4,bb4]", // Bb Gm Eb C5 Gm
  AH: "e4 ~@5 [c3,bb4]@2 a4@2 c4@2 f4@2 a4 ~, [c3,bb4]@6 ~@2 f3@7 ~, g4 [c4,g4] ~@2, ~ e4@3 ~@4", // C7 C5
  AI: "[e4,bb4]@2 c4@2 c4 ~ c4@2 [f4,a4]@2 d4 ~ [f4,a4]@2 d4 ~, c3@8 d3@7 ~, c4 ~@3 [e4,bb4]@4 d4 ~@3 d4 ~@3", // Edim F Edim
  AJ: "bb3@2 ~@5 bb4 bb3@2 bb3@2 bb3 ~ bb3@2, [bb2,g4] c3, d4!2 [d4,f4] [c4,e4], ~ bb3@3 ~@4, ~@3 a4 ~@4", // Eb Dm C
  AK: "bb3 ~@13 bb3@2, g4, c3!2, c4 c4@2 c4, ~ bb3@2 ~@2 bb3@2 ~",
  AL: "~@7 c5, f2@3 a4, f4@3 a3 c4@4, c4@2 f3@3 f4@3, a3 c3@7", AM: "~ f5@5 ~@10, c5@3 ~@5",
})).s("gm_piano").gain(0.48)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<~@9 A ~ B C D E F G A ~ B C D E F G ~@16 H ~ I J K L M N ~@17 O P@2>".pickRestart({
  A: "~@3 g3 ~ g3 ~ eb3", B: "~@7 g3", C: "~@2 f3 ~@2 g3 ~ [eb3,g3]", D: "~ f3 ~@6", E: "~ f3!3 ~ f3 ~ g3",
  F: "~@3 bb3 ~ a3 ~ f3", G: "~ f3 ~@3 f3 ~@2", H: "~@3 a3 ~ a3 ~ f3", I: "~@7 a3", J: "~@2 g3 ~@2 a3 ~ [f3,a3]",
  K: "~ g3 ~@6", L: "~ g3!3 ~ g3 ~ a3", M: "~@3 c4 ~ b3 ~ g3", N: "~ g3 ~@3 g3 ~@2", O: "~@3 bb3@2 ~@3",
  P: "[~@16 [c4,f4,a4]@7 ~@9, ~@15 [f3,a3]@7 ~@10]/2", // F
})).s("gm_piano").gain(0.24)

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

// drums · rim
const rim = s("rim").struct("<~@9 [~ x ~ x]!16 ~@16 [~ x ~ x]!8 ~@20>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~ A B A@5 ~@17 A B A@5 C A B A@5 ~@9 A B A@5 C A B A@5 C ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@4 x ~@5 x!2 ~@4",
})).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 A ~@23 A ~@7 A ~@15 A ~@7 A ~@10>".pickRestart({
  A: "~ x ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@23 B ~@7 A ~@15 B ~@7 B ~@4>".pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@9 A B A B A B@2 C A B A B A B@2 C ~@16 A B A B A B@2 C ~@20>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!5 ~ x ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@23 B ~@7 A ~@15 B ~@7 B ~@4>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@7 x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@10 A ~ A ~ A@2 B ~ A ~ A ~ A@2 B ~@17 A ~ A ~ A@2 B ~@20>".pickRestart({
  A: "~@7 x", B: "~@5 x ~ x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@23 B ~@7 A ~@15 B ~@7 B ~@4>".pickRestart({
  A: "~@5 x ~@2", B: "~@12 x!2 ~@2",
})).gain(0.64)

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

// drums · ride
const ride = s("rd").struct("<~ [x!4]!8 ~@16 [x!4]!16 ~@8 [x!4]!16 [x!2]!2 x!2>").gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~ x ~ x]!16 ~@16 [~ x ~ x]!8 ~@20>").gain(0.32)

stack(
  string_ensemble_1, string_ensemble_1_soft, bass, distortion_guitar, piano, piano_soft, kick, rim, snare, snare_soft,
  low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine
)