Strudelify

Lilith in Starlight

Malcolm Brown

KeyE majorTempo120 bpm
0:00/0:00
// Lilith in Starlight — Malcolm Brown
// 120 bpm, 3/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (3/4 at bar 1, 6/8 at bar 23, 3/4 at bar 36, 4/4 at bar 62, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: ch 2 "Vibraphone" named as a mallet, played on vibraphone (its choir aahs patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5903808; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 152 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/3)

// 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 · tremolo strings · "Square Synthesizer"
const tremolo_strings = note("<~@36 A B C D E F G H I J K L ~@104>".pickRestart({
  A: "c#6 ~ a5 ~ e5 ~ c#5 ~@6 c#6 ~ g#5", B: "~ e5 ~ c#5 ~@6 b5 ~ f#5 ~ d#5 ~", C: "b4 ~@5 c#6 ~@2 a5 ~ f#5 ~ c#5 ~@2",
  D: "~@3 c#6 ~ a5 ~ e5 ~@2 c#5 ~@5", E: "c#6 ~ g#5 ~ e5 ~ c#5 ~@6 e6 ~ b5", F: "~ g#5 ~ e5 ~@6 d#6 ~ b5 ~ f#5 ~",
  G: "d#5 ~@5 c#6 ~@2 a5 ~ e5 ~ c#5 ~@2", H: "~@3 c#6 ~ g#5 ~ e5 ~@2 c#5 ~@5", I: "b5 ~ f#5 ~ d#5 ~ b4 ~@6 c#6 ~ a5",
  J: "~ f#5 ~ c#5 ~@6 c#6 ~ a5 ~ e5 ~", K: "c#5 ~@5 c#6 ~@2 g#5 ~ e5 ~ c#5 ~@2",
  L: "~@3 c#6 ~ g#5 ~ e5 ~@2 c#5 ~ c#5 ~@3",
})).s("gm_tremolo_strings").gain(0.2)

// other · tremolo strings · "Square Synthesizer" · soft notes
const tremolo_strings_soft = note("<~@47 [~@14 c#5 ~] [c#5 ~ c#5 ~ c#5 ~ c#5 ~@9] ~@103>")
  .s("gm_tremolo_strings").gain(0.1)

// chords · vibraphone
const vibraphone = note("<A B C D E F@7 G@6 H@5 ~@25 I@5 J@8 ~@11 K L@6 M@4 ~@47 N O@4 P Q@8 R@8>".pickRestart({
  A: "~@13 g#5@3, ~@9 c#5@7", B: "~@7 e5, ~ e5@13 ~@2, ~@5 c#5@11, ~@5 g#5@3",
  C: "~@11 e5@4 c#5, ~@2 c#5@13 ~, ~@3 g#5@5", D: "~@7 d#6, ~@3 g#5@13, ~@7 e5@9, ~@3 [c#5,c#6]",
  E: "~@13 [g#5,c#6]@2 e6, g#5@9 c#5@7, c#6 e5@3, ~@2 e6@7 c#6@2 d#6@5, ~@2 c#6 c6@5", // C#5
  F: "[~@39 c#6@3 ~@44 c#6@3 ~@14 c#6@3 ~@4 e6@2, ~ e5@6 e6@3 [g#5,f#6]@4 e6@2 c#6@6 f#6@22 c#5@4 g#5@6 c6@15 g#6@2 a6@20 c#6@2 c6@2 c#6@2 d#6@11 [c#5,c#6]@4, ~ c#6@4 c#5@9 e5@4 c#5@4 g#5@3 a6@23 c#6@2 e6@2 e5@5 [c#5,g#6]@8 d#6@11 g#6@23 c#6@2 e6@5 c6@6, ~@3 c6@24 g#6@25 c#6@11 e6@4 c#6@7 f#6@25 g#5@13, ~@5 c#6@7 d#6@6 g#6@2 e6@7 e5@2 d#6@2 [c#5,c#6]@2 d#6@2 [g#5,c#6]@2 e6@2 e5@3 c6@2 c#6@2 d#6@13 e6@2 [g#5,f#6]@4 e5@4 c#5@5 g#5@4 [e5,e6]@2 c6@2 [c#5,c#6]@2 d#6@2 g#5@3 e6@2 e5@4 c#5@8 e5@9]/7", // G#7 C# C#5 C# C#5 G#7 E C#
  G: "[~@38 c#6@3 ~@53 [e5,c#6]@2, [g#5,f#6]@9 c#5@4 g#5@4 g#6@21 g#5@7 c6@15 g#6@2 a6@19 c#6@2 c6@2 c#6@2 d#6@3 [g#5,c#6]@2 e6@4, ~@2 d#6@11 f#6@21 c#5@7 e6@2 e5@4 [c#5,g#6]@8 d#6@11 g#6@30, ~@4 e5@5 g#6@2 e6@6 e5@2 d#6@2 [c#5,c#6]@2 d#6@3 [g#5,c#6]@2 e6@2 [e5,c#6]@2 c6@2 c#6@2 d#6@13 e6@2 [g#5,f#6]@4 e5@3 c#6@6 f#6@32, ~@4 e6@2 c#6@9 a6@28 c#6@10 e6@7 c#5@4 g#5@4 [e5,e6]@2 c6@3 [c#5,c#6]@2 d#6@2 [g#5,c#6]@2 e6@2 e5@4 c#5@11]/6", // C#m G#7 C#5 C# C#5 C#m G#7 E …
  H: "[~@55 e6@3 ~@19 c6@2 ~, c6@21 a6@24 g#5@6 c6@15 g#6@2 a6@2 [g#5,f#6]@3 g#6@2 [e5,e6]@4 ~, ~@2 c#5@9 e5@4 c#5@4 f#6@22 c#5@4 c#6@2 e6@2 e5@4 [c#5,g#6]@9 d#6@17 ~, ~@2 c#6@7 d#6@6 g#6@2 e6@6 e5@3 d#6@2 [c#5,c#6]@2 d#6@2 [g#5,c#6]@2 e6@2 [e5,c#6]@2 c6@3 c#6@2 d#6@15 [g#5,f#6]@4 e5@2 c#6@15 ~, ~@4 e6@2 [g#5,f#6]@5 e6@2 c#6@6 g#5@4 g#6@26 c#6@11 e6@6 c#5@13 ~]/5", // G#7 E C#5 C# C#5 C#m G#7
  I: "[~@30 f#5@4 ~@43 d#5@3, ~@9 c#5@25 f#5@26 c#5@20, ~@17 e5@30 g#5@32 ~, ~@19 g#5@24 a5@25 d#5@5 b4@7, ~@21 f#5@5 d#5@29 e5@25]/5",
  J: "[~@10 c#5@21 ~@21 f#5@4 ~@52 c#6@20, ~ b4@32 ~@11 f#5@4 d#5@21 g#5@5 c#5@21 f#5@32 ~, ~@5 e5@32 ~@2 e5@26 a5@26 e5@32 ~@5, ~@7 d#5@32 ~@3 g#5@19 c#6@21 e5@4 g#5@15 c#6@2 b5@25, ~@31 c#5@26 f#5@21 d#5@21 d#6@29]/8",
  K: "~@11 c#6@5, c#6@11 ~@5, ~@5 e6@11",
  L: "[~@91 c#6@5, d#6@32 ~@11 d#6@32 ~@10 d#6@11, ~@5 c#6@11 c#6@11 c#6@10 c#6@11 c#6@11 c#6@10 c#6@11 c#6@11 ~@5, ~@11 e6@21 e6@21 e6@21 ~ e6@21, ~@21 c6@32 ~@11 f#6@32]/6",
  M: "[~@53 d#6@5 ~@6, e6@21 e6@27 e6@11 ~@5, ~@5 c#6@27 d#6@11 d#6@10 ~@11, ~@11 c6@26 c6@21 ~@6, ~@16 b5@11 b5@32 ~@5]/4",
  N: "~@11 e5@5", O: "[~@59 e5@5, c#5 c#5 c#5 c#5, ~@5 g#5@16 g#5@16 g#5@16 g#5@11, ~@11 e5@16 e5@16 e5@16 ~@5]/4",
  P: "~@11 e5@5, c#5, ~@5 g#5@11",
  Q: "[~@27 f#5@5 ~@69 c#5@27, c#5 f#5 c#5 ~, ~@11 e5@32 a5@32 d#5@10 d#5@13 ~ d#5@29, ~@13 g#5@32 ~@3 g#5@32 b4@11 b4@32 ~@5, ~@16 f#5@5 d#5@32 ~@6 e5@32 ~@5 e5@32]/8",
  R: "[~@27 f#5@5 ~@64 c#6@32, c#5@32 f#5@21 c#5@27 f#5@32 ~@16, ~@11 e5@26 c#6@22 d#5@26 d#6@32 ~@11, ~@13 g#5@30 a5@26 g#5@19 c#6@3 b5@32 ~@5, ~@16 f#5@5 d#5@27 g#5@16 e5@11 e5@32 ~@21]/8",
})).s("gm_vibraphone").gain(0.3)

// chords · accordion
const accordion = note("<~@61 A B@7 C D E B@8 F G H I J K L M N O P Q B R ~@58>".pickRestart({
  A: "~@8 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,g#3,c#4,e4] ~@2", // C#m
  B: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,g#3,c#4,e4] ~@2", // C#m
  C: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [e3,g#3,b3,e4,g#4] ~@4 [e3,g#3,b3,e4,g#4] ~@2", // C#m E
  D: "~@3 [e3,g#3,b3,e4,g#4] ~@4 [e3,g#3,b3,e4,g#4] ~@4 [d#3,g#3,b3,d#4,g#4] ~@2", // E G#m
  E: "~@3 [d#3,g#3,b3,d#4,g#4] ~@4 [d#3,g#3,b3,d#4,g#4] ~@4 [d#3,g#3,b3,d#4,g#4] ~@2", // G#m
  F: "~@3 [e3,g#3,b3,e4,g#4] ~@4 [e3,g#3,b3,e4,g#4] ~@4 [e3,g#3,b3,e4,g#4] ~@2", // E
  G: "~@3 [e3,g#3,b3,e4,g#4] ~@4 [d#3,g#3,b3,d#4,g#4] ~@4 [d#3,g#3,b3,d#4,g#4] ~@2", // E G#m
  H: "~@3 [d#3,g#3,b3,d#4,g#4] ~@4 [d#3,g#3,b3,d#4,g#4] ~@4 [c#3,e3,g#3,c#4,e4] ~@2", // G#m C#m
  I: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [d#3,f#3,b3,d#4,f#4] ~@4 [d#3,f#3,b3,d#4,f#4] ~@2", // C#m B
  J: "~@3 [c#3,f#3,a3,c#4,f#4] ~@4 [c#3,f#3,a3,c#4,f#4] ~@4 [c#3,e3,g#3,c#4,e4] ~@2", // F#m C#m
  K: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,a3,c#4,e4] ~@4 [c#3,e3,a3,c#4,e4] ~@2", // C#m A
  L: "~@3 [b2,d#3,f#3,b3,d#4] ~@4 [b2,d#3,f#3,b3,d#4] ~@4 [c#3,e3,g#3,c#4,e4] ~@2", // B C#m
  M: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,g#3,c#4,e4] ~@4 [c3,d#3,g#3,c4,d#4] ~@2", // C#m G#
  N: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,g#3,c#4,e4] ~@4 [d#3,f#3,b3,d#4,f#4] ~@2", // C#m B
  O: "~@3 [d#3,f#3,b3,d#4,f#4] ~@4 [c#3,f#3,a3,c#4,f#4] ~@4 [c#3,f#3,a3,c#4,f#4] ~@2", // B F#m
  P: "~@3 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,g#3,c#4,e4] ~@4 [c#3,e3,a3,c#4,e4] ~@2", // C#m A
  Q: "~@3 [c#3,e3,a3,c#4,e4] ~@4 [b2,d#3,f#3,b3,d#4] ~@4 [b2,d#3,f#3,b3,d#4] ~@2", R: "~@3 [c3,d#3,g#3,c4,d#4] ~@12",
})).s("gm_accordion").gain(0.3)

// other · violin
const violin = note("<~@35 A B C@3 D E F@2 G H@3 ~@50 I J K L M N O P Q R S T ~@42>".pickRestart({
  A: "~@3 e4", B: "~@4 d#4@4 ~ e4@4 ~@3",
  C: "[~ f#4@4 d#4@4 ~@5 b4@4 a4@2 g#4@2 f#4@4 ~ e4@4 c#4@4 ~@4 d#4@4 ~ e4@2 f#4@2]/3", D: "g#4@4 c#5@4 ~ b4@6 ~",
  E: "~@5 f#4@6 ~@5", F: "[~@2 e4@4 ~@5 d#4@4 e4@2 f#4@2 g#4@4 c#5@4 ~ d#4@4]/2", G: "~@4 e4@4 ~ c#4@6 ~",
  H: "[~@5 c#4@4 ~ d#4@4 e4@4 d#4@4 c#4@4 ~ b3@4 c#4@13 ~@4]/3", I: "~@11 g#5@2 c#5 ~@2",
  J: "c#5 ~@2 c#5 ~ b4 ~ c#5 d#5 b4 ~ c#5@2 g#4@3", K: "g#5@3 c#5 ~ c#5 ~@2 c#5 ~@2 e5 f#5 g#5 ~ e5",
  L: "f#5@3 c#5@2 g#5@3 c#5 ~@2 c#5 ~ c#5 ~@2", M: "b4 c#5 ~ d#5 b4 c#5@3 g#4@3 e5 f#5 g#5 ~ e5",
  N: "f#5@3 e5 d#5 e5 ~@2 d#5 ~@2 c#5@4 ~", O: "g#5@3 c#6 ~ c#6 ~@2 g#5 ~@2 e5 d#5 e5 ~ f#5",
  P: "g#5 f#5 ~ e5 d#5 g#5@3 c#6 ~@2 c#6 ~ g#5 ~@2", Q: "f#5@3 b5@2 g#5@4 ~@2 g#5@2 c#6 ~@2",
  R: "e6 ~@2 c#6 ~ f#6 ~ e6 d#6 f#6 ~ g#6 ~ c#6 ~@2", S: "e6 d#6 ~ c#6 b5 g#5 ~ f#5 e5 d#5 ~ b4@2 d#5@3",
  T: "c#5@3 ~@13",
})).s("gm_violin").gain(0.2)

// other · viola
const viola = note(`<
  ~@10 A@8 B@7 ~@10 C D E@3 F G H@2 I J@3 ~@34 K L M N O P Q R S T U ~@5 V W X Y Z AA AB AC AD AE AF AG AH AI AJ@2 AK@2
  AL@2 AM AN AO AP AQ@2 AR AS AT@2 AU AV AW ~ AX AY ~ AZ BA BB BC BD BE BF BG AX BH BI BJ BK BL BM U ~
>`.pickRestart({
  A: "[~@2 g#3@26 g#3@25 g#3@26 e3@26 g#3@23]/8", B: "[~@2 a3@21 g#3@4 ~ b3@25 c#4@13 d#4@13 e4@19 ~@14]/7",
  C: "~@3 c#4", D: "~@4 b3@4 ~ g#3@4 ~@3",
  E: "[~ c#4@4 b3@4 ~@5 d#4@4 c#4@2 b3@2 a3@4 ~ b3@4 a3@4 ~@4 a3@2 ~ b3@2 c#4@2 d#4@2]/3", F: "e4@4 c#4@4 ~ b3@6 ~",
  G: "~@5 d#4@6 ~@5", H: "[~@2 c#4@4 ~@5 a3@2 b3@2 g#3@4 c#4@2 g#3@2 c#4@4 ~ b3@4]/2", I: "~@4 a3@2 g#3@2 ~ f#3@6 ~",
  J: "[~@5 a3@4 ~ g#3@4 f#3@4 a3@4 g#3@4 ~ e3@4 c#3@13 ~@4]/3", K: "~@11 c#4@5", L: "g#4@5 f#4@5 ~ d#4@5",
  M: "f#4@3 c#4@2 f#4@3 a4@3 g#4@2 e4@3", N: "d#4@3 e4@2 c#4@5 ~ a3@5", O: "d#4@5 c#4@3 b3@3 e4@2 d#4@3",
  P: "c#4@3 b3@2 c#4@9 ~@2", Q: "c#4@5 g#4@5 ~ f#4@5", R: "d#4@3 f#4@2 f#4@3 c#4@3 c#5@2 a4@3",
  S: "g#4@3 c#4@2 c#4@3 d#4@3 e4@2 c#4@3", T: "e4@3 g#4@2 f#4@5 ~ e4@2 d#4@3", U: "c#4@11 ~@5", V: "~@11 g#4@2 c#4 ~@2",
  W: "c#4 ~@2 c#4 ~ b3 ~ c#4 d#4 b3 ~ c#4@2 g#3@3", X: "g#4@3 c#4 ~ c#4 ~@2 c#4 ~@2 e4 f#4 g#4 ~ e4",
  Y: "f#4@3 c#4@2 g#4@3 c#4 ~@2 c#4 ~ c#4 ~@2", Z: "b3 c#4 ~ d#4 b3 c#4@3 g#3@3 e4 f#4 g#4 ~ e4",
  AA: "f#4@3 e4 d#4 e4 ~@2 d#4 ~@2 c#4@4 ~", AB: "g#4@3 c#5 ~ c#5 ~@2 g#4 ~@2 e4 d#4 e4 ~ f#4",
  AC: "g#4 f#4 ~ e4 d#4 g#4@3 c#5 ~@2 c#5 ~ g#4 ~@2", AD: "f#4@3 b4@2 g#4@4 ~@2 g#4@2 c#5 ~@2",
  AE: "e5 ~@2 c#5 ~ f#5 ~ e5 d#5 f#5 ~ g#5 ~ c#5 ~@2", AF: "e5 d#5 ~ c#5 b4 g#4 ~ f#4 e4 d#4 ~ b3@2 d#4@3",
  AG: "c#4@3 g#4 a4 g#4@5 ~@3 c#4@3", AH: "e4@11 ~@2 a4@3", AI: "g#4@5 g#4@3 a4 g#4 ~ a4@2 b4@3",
  AJ: "[f#4@8 c#4@3 d#4@8 b3 c#4 d#4@5 ~@6]/2", AK: "[~@5 c#4@3 d#4@3 e4@8 a3@2 c#4@8 c#4 ~ d#4]/2",
  AL: "[e4@11 e4@4 d#4@4 d4 c#4 c4@5 ~@3 g#4@3]/2", AM: "c4@5 ~@3 g#4@3 b3@5", AN: "~@3 g4@2 b3@4 d#4@4 f#4@3",
  AO: "g#4@8 c#4@3 e4@5", AP: "f#4@5 g#4@3 a4@3 g#4@4 ~", AQ: "[g#4@3 a4 g#4 a4@3 b4@3 f#4@8 c#4@2 d#4@8 b3 ~ c#4]/2",
  AR: "d#4@5 e4@5 ~ d#4@5", AS: "c#4@3 d#4@2 e4@8 a3@3", AT: "[c#4@9 d#4 ~ e4@10 e4@4 d#4@4 d4 ~ c#4]/2",
  AU: "c4@5 ~@3 g#4@3 c4@5", AV: "~@3 g#4@2 b3@5 ~@3 g4@3", AW: "b3@4 g#4@4 b4@3 [c#4,c#5]@5", AX: "~@11 d#4@5",
  AY: "~@5 e4@8 ~@3", AZ: "~@5 f#4@11", BA: "e4@5 ~@11", BB: "d#4@5 ~@11", BC: "c#4@5 ~@11", BD: "g#4@5 ~@11",
  BE: "a4@5 ~@11", BF: "b4@5 ~@6 f#4@5", BG: "g#4@3 f#4@2 e4@11", BH: "e4@5 ~@6 c#4@2 e4@3", BI: "d#4@5 c#4@5 ~ b3@5",
  BJ: "c#4@5 b3@5 ~ a3@5", BK: "g#3@5 ~@11", BL: "c#4@5 e4@5 ~ c#4@5", BM: "d#4@5 f#4@3 e4@3 d#4@5",
})).s("gm_viola").gain(0.3)

// other · cello · "Violoncello"
const cello = note("<~@10 A@8 B@5 ~@38 C@8 D@3 E@8 F@3 ~@69>".pickRestart({
  A: "[~@2 [c#2,c#3]@26 b2@21 a2@4 [g#2,c#3]@26 c#3@26 [c#2,c#3]@23, ~@28 c#3@25 ~@75]/8", // C# C#5 C#
  B: "[~@2 f#3@21 a2@4 ~ g#2@25 e2@26 ~]/5", C: "[~@5 c#2@85 ~ c#2@37]/8", D: "[~@5 [e1,e2]@21 ~ [b1,g#2]@21]/3",
  E: "[c#2@85 c#2@43]/8", F: "[[e1,e2]@7 [b1,g#2]@7 ~@2]/3",
})).s("gm_cello").gain(0.3)

// bass · contrabass
const bass = note("<~@14 A@3 ~ B@4 ~@130>".pickRestart({
  A: "[~@15 a1@26 ~@7]/3", B: "[~@2 b1@21 a1@4 ~ g#1@26 ~@10]/4",
})).s("gm_contrabass").gain(0.4)

// bass · acoustic bass
const bass_2 = note("<~@61 A B C B C B C B D E F B C B C B C B C G F H I J K L C M N B O B P ~@58>".pickRestart({
  A: "~@5 c#2@5 ~ g#1@5", B: "c#2@5 g#1@5 ~ c#2@5", C: "g#1@5 c#2@5 ~ g#1@5", D: "g#1@5 e2@5 ~ b1@5",
  E: "e2@5 b1@5 ~ d#2@5", F: "b1@5 d#2@5 ~ b1@5", G: "e2@5 b1@5 ~ e2@5", H: "d#2@5 b1@5 ~ c#2@5",
  I: "g#1@5 b1@5 ~ f#1@5", J: "c#2@5 a1@5 ~ c#2@5", K: "g#1@5 c#2@5 ~ a1@5", L: "b1@5 f#1@5 ~ c#2@5",
  M: "c#2@5 g#1@5 ~ b1@5", N: "f#1@5 c#2@5 ~ a1@5", O: "a1@5 b1@5 ~ f#1@5", P: "g#1@5 ~@11",
})).s("gm_acoustic_bass").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~@24 A ~ B C ~ D E ~ F ~ G H ~@14 G H ~ I J ~ A ~ B C ~ K L M N O L M N O L M N O L M N O L M N O L M N O L M N O L M
  N O L M N O P ~@37 Q ~ Q R Q ~ Q R Q ~ Q R Q ~ Q ~
>`.pickRestart({
  A: "~@9 x ~@6", B: "x!3 ~@13", C: "~@3 x", D: "~@3 x!3 ~@10", E: "~@15 x", F: "~@6 x!2 ~ x ~@6", G: "~ x ~@6",
  H: "~@10 x!3 ~@3", I: "~@5 x ~@10", J: "~@13 x!3", K: "~@3 x!3 ~@5 x ~@4", L: "x ~@2 x ~ x ~@5 x ~@4",
  M: "x ~@4 x ~@2 x ~@2 x ~@4", N: "x ~@4 x ~@5 x ~ x ~@2", O: "x ~@4 x ~@5 x ~@4", P: "x ~@2 x ~ x ~@10", Q: "x",
  R: "~@13 x ~ x",
})).gain(0.3)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@24 A B C D E F E D G D E H ~@14 C H E D I D E B C D E J ~@74 K@3 L K@3 L K@3 L K@3 ~
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@3 x ~@6 x ~@3 x ~", C: "~@6 x ~@6 x ~@2", D: "~@3 x ~@6 x ~@5", E: "x ~@5 x ~@6 x ~@2",
  F: "~ x ~@8 x ~@5", G: "x ~@3 x ~@8 x ~@2", H: "~@3 x ~@3 x ~@8", I: "x ~@5 x ~@4 x ~@4", J: "~ x ~@14",
  K: "~@5 x ~@7 x ~@2", L: "~@5 x ~@5 x ~@4",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@93 [~@8 x ~@4 x ~@2] [~@3 x ~@4 x ~@4 x ~@2]!4 [~@3 x ~@4 x ~@7] ~@53>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@61 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E F ~@53
>`.pickRestart({
  A: "~@9 x ~@3 x ~@2", B: "~@4 x ~@3 x!2 ~@5 x", C: "~@3 x ~@5 x ~@3 x ~ x", D: "~@4 x ~@3 x ~@6 x",
  E: "~@3 x!2 ~@4 x ~@3 x ~@2", F: "~@4 x ~@3 x!2 ~@6",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@23 A ~ B C ~ D ~ E A ~ B C A D B F A D B F A D B F A ~ B C ~ D ~ E A ~ B C ~ D G H@31 I J ~ K B ~@39 K ~ K ~ K ~ K ~
  K ~ K ~ K ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@10", C: "~@15 x", D: "~@9 x ~@6", E: "~ x ~@6", F: "~@2 x ~@12 x", G: "~@5 x ~@5 x ~@4",
  H: "x ~@4 x ~@5 x ~@4", I: "x ~@4 x ~@10", J: "~@11 x ~@4", K: "x",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@22 A ~@25 B ~@12 C ~@10 D ~@9 E ~@10 C ~@42 D ~@14 D>".pickRestart({
  A: "~@15 x", B: "~@9 x ~@6", C: "~@5 x ~@10", D: "x", E: "~@11 x ~@4",
})).gain(0.3)

stack(
  tremolo_strings, tremolo_strings_soft, vibraphone, accordion, violin, viola, cello, bass, bass_2, kick, kick_soft,
  hihat, low_tom, tambourine, crash
)