Strudelify

When You Say Nothing At All

Ronan Keating

KeyE♭ majorTempo75 bpm
0:00/0:00
// When You Say Nothing At All — Ronan Keating
// 75 bpm, 4/4, key D# 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 (4/4 at bar 1, 2/4 at bar 17, 4/4 at bar 17, 2/4 at bar 43, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(75/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 · piano
const piano = note(`<
  A@2 B@2 C D E F C D G H I J C K L M N O P Q@2 R S T@3 U@2 V W X Y Z W AA AB AC@2 AD W AE AF AG AH AG AI AJ AK AL AM
  AN@3 AO@2 AF AG AH AG AI AJ AK AL AM AP A@2 AQ@2 AR@3
>`.pickRestart({
  A: "[[g3,bb3,eb4]@4 [eb4,g4]@2 [d4,f4]@6 [eb4,g4]@2 eb4@8 f4 g4 ab4 g4 f4 eb4 bb3@4, ~@7 c4@5 ~@4]/2", // Eb Dm Eb
  B: "[[g3,bb3,eb4]@4 [bb3,eb4,g4]@2 [bb3,d4,f4]@6 [bb3,eb4,g4]@2 eb4@8 f4 g4 ab4 g4 eb4@6, ~@7 [ab3,c4]@5 ~@4]/2", // Eb Bb Eb Ab
  C: "[g3,bb3] bb3", D: "[ab3,c4] bb3", E: "[g3,bb3]@6 ab4 bb4 bb3@2 d4@2 f4@2 d4@2, ~ bb4",
  F: "c4 eb4 ab4 c5 [d4,bb4]@2 [c4,ab4]@2", G: "[g3,bb3]@6 f4 g4 f4@2 d4@2 f4@2 d4@2, ~@3 bb4 bb4@4",
  H: "[ab3,c4] [bb3,d4] [c4,eb4]@2 d4 f4 bb4 f4, ~ bb3", I: "[ab3,c4]", J: "[d4,f4]@4 bb3 d4 f4 d4",
  K: "[ab3,c4] [bb3,d4,f4]", L: "f4 c4 bb3 c4 [eb4,g4]@4", M: "[d4,f4] [c4,eb4]", N: "[bb3,d4] [bb3,eb4]",
  O: "[bb3,d4] [c4,eb4]", P: "[bb3,d4] [g3,bb3]",
  Q: "[[bb3,d4]@8 [ab3,c4]@6 c4@4 d4@2 eb4@2 eb4@2 [bb3,d4,f4]@6 d5 eb5]/2", R: "d5 bb4 f4 d4 [ab3,eb4]@4",
  S: "[bb3,f4] [bb3,eb4] [ab3,c4]@2", // Bb5 Eb5 Ab
  T: "[c4@4 d4@2 eb4@2 [bb3,d4]@16 [g3,bb3,eb4]@4 [eb4,g4]@2 [d4,f4]@6 [eb4,g4]@2 eb4@8 f4 g4, ab3@4 ~@15 c4@5]/3", // Bb Eb Dm Eb
  U: "[ab4 g4 f4 eb4 bb3@4 [g3,bb3,eb4]@4 [bb3,eb4,g4]@2 [bb3,d4,f4]@6 [bb3,eb4,g4]@2 eb4@8 f4 g4, ~@11 [ab3,c4]@5]/2", // Eb Bb Eb Ab
  V: "ab4 g4 eb4@6 [g3,bb3]@8, bb3 ~", W: "bb3 [ab3,c4]", X: "bb3@8 [g3,bb3]@6 ab4 bb4",
  Y: "bb3 d4 f4 d4 c4 eb4 ab4 c5, bb4 ~", Z: "[d4,bb4] [c4,ab4] [g3,bb3]@2", AA: "bb3@8 [g3,bb3]@6 f4 g4, ~@7 bb4",
  AB: "f4 d4 f4 d4 [ab3,c4] [bb3,d4] [c4,eb4]@2, bb4 ~", AC: "[d4 f4 bb4 f4 [ab3,c4]@8 [d4,f4]@4, bb3 ~@3]/2",
  AD: "bb3 d4 f4 d4 [g3,bb3]@4", AE: "[bb3,d4,f4]@4 f4 c4 bb3 c4", AF: "[eb4,g4] [d4,f4]", AG: "[c4,eb4] [bb3,d4]",
  AH: "[bb3,eb4] [bb3,d4]", AI: "[g3,bb3] [bb3,d4]", AJ: "[ab3,c4]@3 c4@2 d4 eb4!2",
  AK: "[bb3,d4,f4]@6 d5 eb5 d5@2 bb4@2 f4@2 d4@2", AL: "[ab3,eb4]@2 [bb3,f4] [bb3,eb4]",
  AM: "[ab3,c4]@4 c4@2 d4 eb4, ~ ab3", // Ab
  AN: "[[bb3,d4]@8 bb3@2 ab3@2 g3@2 [eb4,g4,bb4]@6 [eb4,g4]@2 [d4,f4]@6 [eb4,g4]@2 eb4@8 f4 g4 ab4 g4 f4 eb4 bb3@4, ~@15 c4@5 ~@4]/3", // Bb Eb Dm Eb
  AO: "[[g3,bb3,eb4]@4 [bb3,eb4,g4]@2 [bb3,d4,f4]@6 [bb3,eb4,g4]@2 [ab3,c4,eb4]@6 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 bb3 c4 eb4 g4]/2", // Eb Bb Eb Ab
  AP: "[bb3,d4]", // Bb
  AQ: "[[g3,bb3,eb4]@4 [bb3,eb4,g4]@2 [bb3,d4,f4]@6 [bb3,eb4,g4]@2 [ab3,c4,eb4]@8 f4 g4 ab4 g4 ~ eb4 bb4 eb5 bb4 ~]/2", // Eb Bb Eb Ab
  AR: "[eb5 f5 ~@2 g5@34 ~@10, ~ g4@18 ~@5, ~@3 [bb4,eb5]@35 ~@10]/3", // Eb5
})).s("gm_piano").gain(0.31)

// bass · fretless bass · "Bass"
const bass = note(`<
  A B C D A B A B A B E B F G H I J K L K L K I M N O@2 P Q R S T S T S T S T@2 U V T G W X W X W Y Z AA AB Z A B A AC W
  X W X W Y Z AA AB AD A B C AE@3 ~
>`.pickRestart({
  A: "eb2 bb2", B: "ab2 bb2", C: "eb3 d3", D: "c3 bb2", E: "eb2@3 ~ bb2@4", F: "ab2@5 ~ ab2@2 ab2@6 ~@2",
  G: "bb2@5 ~ bb2@2 bb2@6 ~@2", H: "eb3 bb2", I: "ab2@8 bb2@5 ~ bb2@2", J: "bb2@6 ~@2 eb2@5 ~ eb2@2",
  K: "bb2@5 ~ bb2@2 ab2@5 ~ ab2@2", L: "bb2@5 ~ bb2@2 eb2@5 ~ eb2@2", M: "bb2@8 c3@3 ~ c3@2 c3@2",
  N: "d3@3 ~ g2@3 ~ ab2@5 ~ ab2@2", O: "[ab2@5 ~ ab2@2 bb2@16 eb2@8]/2", P: "bb2 ab2", Q: "bb2 eb3", R: "d3 c3",
  S: "bb2@8 eb2@5 ~ eb2@2", T: "bb2@8 ab2@5 ~ ab2@2", U: "ab2@6 ~@2 bb2@5 ~ bb2@2", V: "bb2@6 ~@2 eb3@5 ~ eb3@2",
  W: "eb2@5 ~ eb2@2 bb2@5 ~ bb2@2", X: "ab2@5 ~ ab2@2 bb2@5 ~ bb2@2", Y: "ab2@5 ~ ab2@2 ab2@8",
  Z: "bb2@5 ~ bb2@2 bb2@8", AA: "c3@3 ~ c3@2 c3@2 d3@3 ~ g2@3 ~", AB: "ab2@5 ~ ab2@2 ab2@5 ~ ab2@2",
  AC: "ab2@4 c3@2 bb2@2 g2@2 f2@2 eb2 c2 bb1@2", AD: "bb2", AE: "[c3@4 bb2@5 eb2@12 ~@3]/3",
})).s("gm_fretless_bass").gain(0.31)

// chords · epiano1 · "Rhodes Piano"
const epiano1 = note(`<
  A B C D E ~@11 F G H I J K@6 L M N O@3 ~@10 P Q R S T U V W X V Y S Y Z P Q R S T U V W X V A B A AA@4
>`.pickRestart({
  A: "[g3,bb3,eb4,g4]@4 ~@3 f4, ~ [bb2,d4], ~@2 bb3!2, ~@5 f3@3", // Eb Bb
  B: "~@3 eb4 ~@3 bb3, [ab4,c5]@2 ~ f3, eb4@3 ~ [d4,f4]@4, ~@2 c4@2 bb3@3 ~", // Ab Dm
  C: "~@3 g4 [f3,bb3,d4,f4]@4, eb4 ~, bb3!2 ~@2, ~ g3@3 ~@4", D: "[c4,eb4,ab4,c5] [f3,bb3,d4,f4]",
  E: "[eb2,eb4,g4] ~, bb3@3 ~@5", F: "~@7 g4, ~ [eb2,eb4], ~@2 bb3!2, ~@5 g3@3",
  G: "~@3 bb3 [c4,eb4,g4]@4, [bb2,d4,f4] ~, bb3@3 ~@5, ~ f3 ~@2", // Cm Bb
  H: "[bb3,d4,f4]@2 ~@3 f4@2 ~ [eb2,g3,bb3,eb4,g4]@8, ~ f3@3 ~@4, ~@3 bb3@5 ~@8, ~@4 d4@3 ~@9", // Bb Eb
  I: "~@3 f4 ~@3 c5, [bb2,d4] [ab2,ab4], bb3!2 eb4!2, ~ f3@3 ~ c4@3", // Bb Ab
  J: "~@3 bb3 ~@3 g4, [bb2,d4,f4] [eb2,eb4], bb3@3 ~ bb3@2 bb3@2, ~@2 f3@2 ~ g3@3", // Bb Eb
  K: "[~@3 f4 ab4@5 ~@2 c5 f4@4 d5@2 f4@2 [eb4,c5]@3 ~ [eb4,c5]@4 eb4 ~@5 [eb4,c5]@2 f4@4 d5@2 f4@2 [eb2,g3,bb3,eb4,g4]@4, [bb2,d4] [ab2,eb4]@2 [bb2,f3,bb3,d4]@2 ab2@2 ab2@2 [bb2,f3,bb3,d4]@2 ~, bb3@4 bb3@4 c5 ~@11 ab4@4 ~@32 c5@6 ab4@10 ~@24, ~ f3@3 ~@5 c4@3 ~@11 c4@5 ab4@2 eb4@3 c4@3 ~@12, ~@29 c4@3 c5@2 ~@14]/6", // Cm Eb Bb Ab5 Bb
  L: "~@3 bb3 ~@3 c5, [bb2,d4,f4] [ab2,ab4], bb3@3 ~ eb4@2 eb4@2, ~@2 f3@2 ~ c4@3", // Bb Ab
  M: "~@3 f4 [eb2,g3,bb3,eb4,g4]@4, [bb2,d4] ~, bb3!2 ~@2, ~ f3@3 ~@4", // Eb Bb
  N: "~@3 bb3 ~@3 eb4, [bb2,d4,f4] [ab2,ab4,c5], bb3@3 ~ eb4@3 ~, ~ f3 ~ c4", // Bb Ab
  O: "[~ [eb2,bb3,eb4,g4]@4 ~, [bb2,d4]@2 ~, bb3!2 ~@10, ~ f3@16 ~@7, ~@3 f4@16 ~@5]/3", // Eb Bb
  P: "~@3 g4 ~@3 bb3, [eb2,eb4] [bb2,d4,f4], bb3@2 bb3@2 bb3@3 ~, ~ g3@3 ~@2 f3@2", // Eb Bb
  Q: "[c4,eb4,g4]@8 [bb3,d4,f4]@2 ~@3 f4@2 ~, ~@5 f3@3, ~@11 bb3@5, ~@12 d4@3 ~", // Cm Bb
  R: "[eb2,g3,bb3,eb4,g4]@4 ~@3 f4, ~ [bb2,d4], ~@2 bb3!2, ~@5 f3@3", // Eb Bb
  S: "~@3 c5 ~@3 bb3, [ab2,ab4] [bb2,d4,f4], eb4!2 ~ f3, ~ c4@3 bb3@3 ~", // Ab Bb
  T: "~@3 g4 ~@3 f4, [eb2,eb4] [bb2,d4], bb3!4, ~ g3@3 ~ f3@3", U: "ab4@5 ~@2 c5, [ab2,eb4], c5 ~@9 c4@6, ~@3 ab4",
  V: "f4@2 d5 f4, [bb2,f3,bb3,d4]", W: "[eb4,c5]@3 ~ [eb4,c5]@4, ab2, ~@3 c4@5",
  X: "eb4 ~@5 [eb4,c5]@2, ab2, c5@3 ab4@5, ab4@2 eb4@3 c4@3, ~ c4@3 c5@2 ~@2", // Cm
  Y: "[eb2,g3,bb3,eb4,g4]@4 ~@3 bb3, ~ [bb2,d4,f4], ~@4 bb3@3 ~, ~@3 f3", // Eb Bb
  Z: "~ eb3 ~ eb3 [ab3,c4] ~@2 ab3, ab2@7 ~ ab2@8, c4@2 [ab3,c4]@2 ~ eb3 c4@2, ~@11 ab3@3 ~@2", // Ab
  AA: "[~@6 eb4@2 ~@5 f3@3 bb3@2 ~@2 g4@34 ~@10, [ab4,c5] ~@7, eb4@6 ~@2 [d4,f4]@10 ~ [bb3,eb4]@35 ~@10, ~@4 c4@4 bb3@7 ~@3 g3@36 ~@10]/4", // Ab Dm Eb5
})).s("gm_epiano1").gain(0.14)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A B C B D E D F G E H I J K H L M N@2 O@2 P Q R@2 S@2 T U V W X@2 Y Z X@2 AA@4 AB@2 AC I AC AD AC AE AF I AG AH AI AJ
  AK AG AC I AC AD AC AE AF I AG AH AC I AL AM@4
>`.pickRestart({
  A: "~@6 g4@2 ~@2 f3@2 ~@3 d4, eb3 bb2, ~ bb3@3 ~@2 d3@2, ~@4 eb4@4 ~@5 f3@3, ~@7 bb3",
  B: "~@5 f3 ~ f3, ab2@8 bb2@7 ~, c5 eb4 ~@2, ~ c4@3 ~@2 [bb3,d4]@2, ~@6 ab4@9 ~", // Bb
  C: "~@5 f3 ~ f3, eb3@8 bb2@7 ~, ~ bb3@2 bb3@3 [bb3,d4]@2, ~ eb4 ~@2", // Bb
  D: "~ bb3 ~ bb3 ~ f3 ~ f3, eb3@7 ~ bb2@7 ~, ~ [eb4,g4] ~ [g3,bb3]", // Eb Gm
  E: "~ eb3 ~ eb3 ~ f3 ~ f3, ab2@7 ~ bb2@7 ~, ~@4 [ab3,c4]@7 ~ [g3,bb3]@4", // Ab Gm
  F: "~@2 eb3@2 ~@2 eb3@2 ~@2 f3@2 ~@3 d4, ab2@7 ~ bb2@8, ~ [ab3,c4] ~ d3, ~@13 f3@3, ~@7 bb3", // Ab
  G: "~@3 g4 ~ f3 ~ f3, eb2@8 bb2@7 ~, ~ g3@3 ~@2 [g3,bb3]@2, ~ bb3 ~@2", // Gm
  H: "~ bb3 ~ bb3 ~ f3 ~ f3, eb3@7 ~ bb2@7 ~, ~ [eb4,g4] ~ [bb3,d4]", // Eb Bb
  I: "~ eb3 ~ eb3 ~ f3 ~ f3, ab2@7 ~ bb2@7 ~, ~@4 [ab3,c4]@7 ~ [bb3,d4]@4", // Ab Bb
  J: "~ eb3 ~ eb3 ~ eb3 ~ eb3, ab2@7 ~ ab2@6 ~@2, ~@4 [ab3,c4]@7 ~ [ab3,c4]@4", // Ab
  K: "~ f3 ~ f3 ~@3 bb3, bb2@7 ~ bb2@8, d4@2 [bb3,d4]@3 f3 d4@2, ~@11 bb3@3 ~@2", // Bb
  L: "~ eb3 ~ eb3 ~ f3 ~ f3, ab2@7 ~ bb2@7 ~, ~@4 [ab3,c4]@7 ~@5, ~@2 bb3 [bb3,d4]", // Ab Bb
  M: "~ f3 ~ f3 ~ bb3 ~ bb3, [bb2,bb4]@7 ~ eb3@7 ~, ~ [bb3,d4] ~ [eb4,g4]", // Bb Eb
  N: "[~@2 d4 f4 ~ eb3 ~ eb3 ~ f3 ~ f3 ~ bb3 ~ bb3, bb2@8 ab2@7 ~ bb2@7 ~@9, ~@2 f3@6 ~@16 eb3@7 ~, ~@4 bb3@4 ~@4 [ab3,c4]@7 ~ [bb3,d4]@4 ~@4 [eb4,g4]@4]/2", // Ab Bb Eb
  O: "[~@4 d4@2 f4@2 ~@2 eb3@2 ~@2 eb3@2 ~@2 eb3@2 ~@3 c4 ~@2 bb3@2 ~@2 bb3@2, bb2@8 ab2@7 ~ ab2@8 ~@8, ~ f3@3 ~@6 c3@2 ~@4, ~@4 bb3@4 ~@4 [ab3,c4]@7 ~@2 eb3@3 eb3@7 ~, ~@11 ab3 ~@2 [eb4,g4]@2]/2", // Ab Eb
  P: "~@2 d4 f4 ~ eb3 ~ eb3, bb2@8 ab2@7 ~, ~ f3@3 ~@2 [ab3,c4]@2, ~ bb3 c4 ~", // Ab
  Q: "[ab3,c4] ~@2 ab3 ~ f3 ~ f3, ab2@8 bb2@7 ~, ~ eb3 c4@2 ~@2 [bb3,d4]@2, ~@3 ab3@3 ~@10", // Ab Bb
  R: "[[bb3,d4] f3 ~ f3 ~ eb3 ~ eb3 ~ f3 ~ f3 ab2 eb3 [ab3,c4] eb3, bb2@6 ~@2 ab2@7 ~ bb2@7 ~@9, f3 ~@3 [bb3,d4]@4 ~@4 [ab3,c4]@7 ~ [bb3,d4]@4 ~@8]/2", // Bb Ab Bb Ab Bb
  S: "[~@2 eb3@2 ~@3 c4 [bb3,d4]@12 ~@8 eb4@2 g4@2, ab2@8 bb2@7 ~@9 eb2@8, ~ c3 ~@6, ~@5 eb3@3 ~@20 bb3@4, ~@3 ab3 ~@9 g3@3]/2", // Bb
  T: "~ f3 ~ f3 eb4 ~@2 ab4, bb2@7 ~ ab2@8, ~@2 [bb3,d4]@2 c5@3 ~, ~@5 c4@3, ~@3 eb4", // Bb
  U: "~@6 d4@2 ~@6 eb4 ~, bb2 eb2, ~ f3@3 ~ g3@3, ~ bb3 g4 bb3",
  V: "~@2 f3@2 ~@3 d4 ~@2 eb3@2 ~@2 eb3@2, bb2@8 ab2@7 ~, ~ d3 ~@2, ~@5 f3@3 ~@8, ~@3 bb3 ~@2 [ab3,c4]@2", // Ab
  W: "~ f3 ~ f3 ~ bb3 ~ bb3, bb2@7 ~ eb3@7 ~, ~ [bb3,d4] ~ [eb4,g4]", // Bb Eb
  X: "[~ f3 ~ f3 ~ eb3 ~ eb3 ~ f3 ~ f3 ~ bb3 ~ bb3, bb2@7 ~ ab2@7 ~ bb2@7 ~@5 [eb4,g4]@4, ~@4 [g3,bb3]@4 ~@4 [ab3,c4]@7 ~ [g3,bb3]@4 eb3@7 ~]/2", // Eb Gm Ab Gm
  Y: "~ f3 ~ f3 ~ eb3 ~ eb3, bb2@7 ~ ab2@7 ~, ~ [g3,bb3] ~ [ab3,c4]", // Gm Ab
  Z: "~@2 f3@2 ~@3 d4 ~@6 g4@2, bb2 eb2, ~ d3 ~@2, ~@5 f3@3 ~@2 g3@6, ~@3 bb3 ~@2 bb3@2",
  AA: "[~ f3 ~ f3 ~ eb3 ~ eb3 ~ f3 ~ f3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ f3 ~ f3 ~@3 bb3 ~ bb3 ~ bb3, bb2@7 ~ ab2@7 ~ bb2@7 ~ ab2@7 ~ ab2@6 ~@2 bb2@7 ~ bb2@8 eb3@7 ~, ~@4 [bb3,d4]@4 ~@4 [ab3,c4]@7 ~ [bb3,d4]@4 ~@4 [ab3,c4]@7 ~ [ab3,c4]@4 d4@4 [bb3,d4]@6 f3@2 d4@4 ~@4 [eb4,g4]@4, ~@51 bb3@3 ~@10]/4", // Bb Ab Bb Ab Bb Eb
  AB: "[~ f3 ~ f3 ~ eb3 ~ eb3 ~ f3 ~ f3 ~ f3 ~ f3, bb2@7 ~ ab2@7 ~ bb2@7 ~ [bb2,bb4]@7 ~, ~@4 [bb3,d4]@4 ~@4 [ab3,c4]@7 ~@13, ~@4 bb3 [bb3,d4] ~ [bb3,d4]]/2", // Bb Ab Bb
  AC: "~ bb3 ~ bb3 ~@2 d4 f4, eb3@7 ~ bb2@8, ~@2 [eb4,g4]@2 ~ f3@3, ~@3 bb3", // Eb
  AD: "~@2 eb3@2 ~@2 eb3@2 ~@2 eb3@2 ~@3 c4, ab2@7 ~ ab2@8, ~@4 [ab3,c4]@7 ~ c3@4, ~@13 eb3@3, ~@7 ab3", // Ab
  AE: "~ eb3 ~ eb3 [ab3,c4] ~@2 ab3, ab2@7 ~ ab2@8, c4@2 [ab3,c4]@2 ~ eb3 c4@2, ~@11 ab3@3 ~@2", // Ab
  AF: "~ f3 ~ f3 [bb3,d4] f3 ~ f3, bb2@7 ~ bb2@6 ~@2, ~@4 [bb3,d4]@4 f3 ~@3 [bb3,d4]@4", // Bb
  AG: "ab2@2 eb3@2 [ab3,c4]@2 eb3@2 ~@2 eb3@2 ~@3 c4, ~ ab2, ~@3 c3, ~@13 eb3@3, ~@7 ab3", // Ab
  AH: "[bb3,d4]@3 ~, bb2@7 ~@9", AI: "~@3 bb3 ~@3 f4, [eb2,eb4,g4] [bb2,d4], bb3@3 ~ bb3@2 bb3@2, ~@2 g3@2 ~ f3@3",
  AJ: "~@3 c5 ~@3 f4, [ab2,ab4] [bb2,d4], eb4@2 eb4@2 ~ f3@3, ~ c4@3 bb3@2 bb3@2", // Ab Bb
  AK: "[eb2,g3,bb3,eb4,g4]@4 ~@3 bb3, ~ [bb2,d4,f4], ~@4 bb3@3 ~, ~@3 f3", // Eb Bb
  AL: "~@2 eb4 g4 ~ f3 ~ f3, eb2@8 bb2@7 ~, ~ g3@3 ~@4, ~ bb3 ~ [bb3,d4]", // Bb
  AM: "[eb4 ~@2 ab4 ~@4 d4 ~ g4@17 ~@5, ab2@4 bb2@5 ~@23, c5@3 ~@29, ~@2 c4@6 ~@3 f3@7 g3@36 ~@10, ~@4 eb4@4 ~@5 bb3@5 ~ [bb3,eb4]@35 ~@10]/4", // Eb5
})).s("gm_acoustic_guitar_steel").gain(0.26)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!16 [~ x ~@2] ~@13 [~@3 x] [~ x ~ x]!12 ~@31>").gain(0.43)

// drums · snare
const snare = s("sd").struct("<~@16 A B@8 C ~@16 D B@9 ~ B@13 ~@8>".pickRestart({
  A: "~@6 x!2 ~@4 x ~@3", B: "~ x ~ x", C: "~ x ~@2", D: "~@14 x!2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@25 A ~@25 B ~@4 B ~@8 B ~@8>".pickRestart({
  A: "~@6 x!2 ~@8", B: "~@14 x!2",
})).gain(0.43)

// drums · hihat
const hihat = s("hh").struct("<A@16 B C@8 D ~@4 E A@11 F C@8 G ~ C@3 G C@8 G ~@8>".pickRestart({
  A: "x!8", B: "x!3 ~ x!2 ~ x", C: "x!2 ~ x!3 ~ x", D: "x!2 ~@6", E: "~@4 x!4", F: "x!7 ~", G: "x!2 ~ x!3 ~@2",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@30 [~@3 x ~@4] ~@43>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@4 A ~@20 B ~@4 B ~@8 B ~@8>".pickRestart({
  A: "~@3 x ~@4", B: "~@7 x",
})).gain(0.43)

// drums · ride
const ride = s("rd").struct("<A ~ A ~@22 B@2 C@3 A ~@21 A ~@13 A C@4 D ~@2>".pickRestart({
  A: "x", B: "~ x", C: "x!2", D: "~@2 x!3 ~@11",
})).gain(0.48)

// drums · splash
const splash = s("cr").struct("<~@16 A B@8 C ~@16 D E B@8 ~ B@4 E B@8 ~@8>".pickRestart({
  A: "~@6 x!3 ~@3 x ~@3", B: "~ x ~ x", C: "~ x ~@2", D: "~@14 x!2", E: "x!2 ~ x",
})).gain(0.32)

stack(piano, bass, epiano1, acoustic_guitar_steel, kick, rim, snare, low_tom, hihat, mid_tom, high_tom, ride, splash)