Strudelify

Et maintenant

Gilbert Becaud

KeyF majorTempo120 bpm
0:00/0:00
// Et maintenant — Gilbert Becaud
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 119 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · trumpet · "xxxxxxxx"
const trumpet = note("<~@7 A B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 ~@15 J B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 ~@63>".pickRestart({
  A: "~@12 f4@2 ~@3 f4@2 ~@2 a4@2 ~", B: "[a4@33 ~@3 f4@3 ~@2 f4@3 ~ a4@3]/2",
  C: "[bb4@10 ~@2 a4@18 ~@6 f4@3 ~@2 f4@2 ~@2 f4@2 ~]/2", D: "[g4@27 ~@3 a4@2 ~ g4@2 ~ f4@4 ~@2 g4@4 ~@2]/2",
  E: "[a4@31 ~@5 f4@3 ~@2 f4@2 ~ a4@3 ~]/2", F: "[a4@33 ~@3 f4@3 ~ f4@3 ~ a4@3 ~]/2",
  G: "[bb4@10 ~@2 a4@17 ~@13 f4@2 ~ f4@2 ~]/2", H: "[g4@26 ~@4 a4@2 ~ g4@2 ~ f4@4 ~@2 g4@4 ~@2]/2", I: "[a4@9 ~@7]/2",
  J: "~@12 f4@3 ~@2 f4@3 ~ a4@2 ~",
})).s("gm_trumpet").gain(0.35)

// bass · electric bass finger
const bass = note(`<
  ~@24 A B C D E F G H I J K L M N O P ~@16 A B C D E F G H I J K L M N O P Q@2 R S T@2 U Q V S R S T W V X A B C D E F
  G H I J K L M N O P Q@2 R S T@2 S ~@8
>`.pickRestart({
  A: "~ g1@4 ~ a1@4 ~@2 bb1@4 ~@2 d2@4 ~@2", B: "c2@2 ~ g1@2 ~ c2@2 ~ bb1@2 ~", C: "a1@2 ~ c2@2 ~ e2@2 ~ c2@2 ~",
  D: "d2@2 ~ a1@2 ~ d2@2 ~ a1@2 ~", E: "g1@2 ~ bb1@2 ~ c2@2 ~ g1@2 ~", F: "c2@2 ~ bb1@2 ~ a1@2 ~ g1@2 ~",
  G: "f1@2 ~ a1@2 ~ c2@2 ~ d2@2 ~", H: "f2@2 ~ f2@2 ~ f1@2 ~ f1@2 ~", I: "bb1@2 ~ bb1@2 ~ db2@2 ~ f2@2 ~",
  J: "eb2@2 ~ db2@2 ~ c2@2 ~ bb1@2 ~", K: "ab1@4 ~@2 c2@4 ~@2 eb2@4 ~@2 c2@4 eb2 ~",
  L: "db2@2 ~ db2@2 ~ ab1@2 ~ ab1@2 ~", M: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~", N: "bb1@2 ~ bb1@2 ~ b1@2 ~ b1@2 ~",
  O: "c2@2 ~ c2@2 ~ g1@2 ~ g1@2 ~", P: "c2 ~@7", Q: "f1 ~@11", R: "bb1 ~@3 f1 ~@3", S: "f1 ~@7", T: "g1 ~@7",
  U: "f1 ~@3 f1 ~@3", V: "f1@2 ~@20 c2 ~", W: "c2 ~@11", X: "f1@3 ~@13 f1 ~ a1@3 ~ c2 ~",
})).s("gm_electric_bass_finger").gain(0.31)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@40 A@2 B@2 C@2 D E A@2 F@2 G@2 H@2 ~@63>".pickRestart({
  A: "[[a3,c4,f4]@23 ~]/2", B: "[[bb3,d4,f4]@11 ~ [a3,c4,f4]@34 ~@2]/2", C: "[[g3,bb3,d4]@47 ~]/2",
  D: "[a3,c4,e4]@11 ~", E: "[a3,c4,d4]@19 ~@5", F: "[[bb3,d4,f4]@11 ~ f4@12 f3@22 ~@2, ~@6 [a3,c4]@17 ~]/2",
  G: "[~@8 f4@7 ~, [g3,bb3,d4]@15 ~]/2", H: "[[a3,c4,f4]@13 ~@11]/2",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · french horn
const french_horn = note(`<
  ~@8 A@2 B C D E F G C H I H D J K C L M N O P Q R S T U V W X Y Z AA A@2 B C D E F G C H I H D J K C L M N O P Q R S T
  U V W X Y Z AA A@2 B C D E F G C H I H D J K C L M N O P Q R S T U V W X Y Z AA A@2 B C D E AB AC AD AC AE AD@2 AF AG
>`.pickRestart({
  A: "[a3,c4] ~@23, f4 ~@11", B: "[d4,f4] ~@5 [a3,c4,f4] ~@5, bb3 ~@23", C: "[a3,f4] ~@11, c4 ~@23",
  D: "[g3,bb3,d4] ~@11", E: "[bb3,d4] ~@23, f4 ~@11", F: "[c4,e4,g4] ~@11", G: "[c4,d4,f4] ~@11", H: "[a3,c4,f4] ~@11",
  I: "[bb3,d4,f4]@3 ~@9 [a3,c4,f4]@2 ~@10", J: "[g3,d4] ~@11, bb3 ~@23",
  K: "[a3,c4,f4]@2 ~@10 [a3,c4] ~@11, ~@6 f4 ~@5", L: "[d4,bb4]", M: "[e4,c5]@23 ~", N: "[c4,a4]@23 ~",
  O: "[c4,f4]@23 ~", P: "[d4,g4]@12 [c4,e4]@11 ~", Q: "[e4,c5]@11 ~ [e4,g4]@11 ~", R: "[e4,a4]@23 ~", S: "[f4,a4]@11 ~",
  T: "[db4,f4]@23 ~", U: "[db4,g4]@11 ~", V: "[c4,g4]@23 ~", W: "[c4,f4]@19 ~@5", X: "[db4,bb4]@23 ~",
  Y: "[db4,f4]@11 ~ [f4,ab4]@11 ~", Z: "[f4,g4]@23 ~", AA: "[e4,g4] ~@7", AB: "[f3,c4,e4,g4] ~@11, a3 ~@23",
  AC: "[f3,a3] ~@23", AD: "[f3,a3] ~@11", AE: "a3 ~@11, f3 ~@23", AF: "f3 ~@11, a3 ~@23", AG: "[f2,f3,a3] ~@7",
})).s("gm_french_horn").gain(0.25).pan(0.7)

// bass · cello
const bass_2 = note(`<
  ~@8 A@2 B@2 C D@2 E@2 F@4 G@2 H ~@16 A@2 B@2 C D@2 E@2 F@4 G@2 H ~@16 A@2 B@2 C D@2 E@2 F@4 G@2 H ~@16 A@2 B@2 C D@2
  ~@8
>`.pickRestart({
  A: "[f2@34 ~@2 f2@11 ~]/2", B: "[bb2@11 f2@23 ~@2 a2@6 c3@5 ~]/2", C: "g2@23 ~", D: "[g2@22 ~ f2@23 ~@2]/2",
  E: "[f2@16 ~@7 f2@23 ~@2]/2", F: "[f2@20 ~@3 bb2@12 ~ f2@22 ~@2 f2@11 g2@23 ~@2]/4", G: "[g2@21 ~@2 f2@23 ~@2]/2",
  H: "f2 ~@5",
})).s("gm_cello").gain(0.13)

// chords · epiano2
const epiano2 = note(`<
  ~@24 A B C D E@2 F ~ G H I J ~ K L M ~@16 N O P Q R@2 S ~ T U V ~ W X ~ Y ~@16 Z AA AB AC AD@2 AE AF AG AH AI AJ AK AL
  AM ~@8 AN AO AP AQ ~@2 AR AO
>`.pickRestart({
  A: "~@16 g3 ~@7", B: "bb3@23 ~", C: "e4@15 ~ c4 g3 ~@6", D: "[a3,f4]@5 ~@3", E: "[~@13 bb3@27 [g3,c4] ~@7]/2",
  F: "[f3,c4]@2 ~", G: "[ab3,f4]@16 f4 ab3 ~@6", H: "[bb3,eb4]@11 ~", I: "~@8 [c4,g4] ~@3", J: "[f4,c5]@11 ~",
  K: "db4@11 ~ [b3,f4]@11 ~", L: "f4@23 ~", M: "[c4,e4] ~@7", N: "[bb3,d4]@5 ~@3", O: "c4@11 ~",
  P: "g3@15 ~@2 [g3,e4,g4] ~@6", Q: "[c4,f4]@5 ~@3", R: "[~@12 g3@27 ~ [bb3,c4] ~@7]/2", S: "f3@2 ~",
  T: "bb3@16 ~ [ab3,bb3,db4] ~@6", U: "[g3,db4,eb4]@11 ~", V: "ab3@2 ~", W: "db4@15 ~ f4 ~@7", X: "~@12 [b3,f4]@11 ~",
  Y: "bb3 ~@7", Z: "[d4,f4]@15 ~ bb3 ~@7", AA: "e4@23 ~", AB: "~@17 a3 ~@6", AC: "c4@15 ~ c4 ~@7",
  AD: "[bb3@10 ~@3 c4@27 [g3,bb3,c4] ~@7]/2", AE: "~@16 c4 ~@7", AF: "f4@5 ~", AG: "bb3@2 ~", AH: "g3@11 ~",
  AI: "[ab3,c4,g4]@8 [ab3,g4] ~@3", AJ: "[db4,f4]@11 ~", AK: "db4@15 ~ [db4,f4] ~@7", AL: "db4@11 ~ f4@11 ~",
  AM: "[f4,g4]@23 ~", AN: "[c4,f4] ~@11", AO: "f4 ~@11", AP: "c4 ~@11 c4 ~@8 [c4,f4] ~@2", AQ: "~ [c4,f4] ~@22",
  AR: "f4 ~@11, c4 ~@23",
})).s("gm_epiano2").gain(0.35).pan(0.9)

// chords · epiano2
const epiano2_2 = note(`<
  ~@24 A B C D E@2 F G H ~ I J K L M ~@17 N B O P Q@2 R G S ~ T U V L ~ W ~@16 X Y Z AA AB@2 AC ~ AD AE AF U AG AH ~ AI
  ~@8 AJ AK ~ AL AM ~ AJ
>`.pickRestart({
  A: "[d4,f4]@15 ~ bb3 ~@7", B: "e4@23 ~", C: "g4@5 ~@3", D: "c4@15 ~ d4 ~@7",
  E: "[[g3,bb3,d4,f4]@10 ~@3 c4@27 e4@5 ~@3, ~@4 g3@9 ~@3]/2", F: "~@16 [a3,c4] ~@7", G: "c4@5 ~",
  H: "db4@16 ~ db4 ~@6", I: "[ab3,c4,eb4]@2 ~", J: "~ ab4@22 ~", K: "db4@15 ~ [bb3,db4,f4] ~@7", L: "[bb3,f4] ~",
  M: "g4@23 ~", N: "[g3,f4]@5 ~@3", O: "[c4,e4]@15 ~@2 a3 ~@6", P: "[a3,d4]@15 ~ [a3,c4,d4,f4] ~@7",
  Q: "[[g3,bb3,f4]@10 ~@3 [bb3,c4]@27 e4@5 ~@3, ~@40 g3 ~@7]/2", R: "c4@15 ~ [a3,f4] ~@7", S: "[ab3,db4,f4]@2 ~",
  T: "g4@8 [eb4,g4] ~@3", U: "~ ab4@22 ~, c5@11 ~", V: "bb3@15 ~ db4 ~@7", W: "[c4,e4] ~@7", X: "~@16 g3 ~@7",
  Y: "g3@23 ~", Z: "[a3,c4]@15 ~ c4 [e4,g4] ~@6", AA: "[a3,d4]@15 ~ f4 ~@7", AB: "[d4@10 ~@2 [g3,e4]@27 ~ e4@5 ~@3]/2",
  AC: "[f3,c4]@16 [a3,f4] ~@7", AD: "~@16 f4 [ab3,bb3,db4] ~@6", AE: "db4@11 ~", AF: "eb4@8 [c4,eb4] ~@3",
  AG: "~@16 bb3 ~@7", AH: "~@6 d4@5 ~", AI: "bb3 ~@7", AJ: "c4 ~@23", AK: "~@12 f4 ~@4 c4 ~ f4 ~@3 f4",
  AL: "f4 ~@11, c4 ~@23", AM: "f4 ~@11",
})).s("gm_epiano2").gain(0.35).pan(0.4)

// chords · epiano2
const epiano2_3 = note(`<
  ~@24 A B C D E@2 F G H I J K L ~ M N ~@16 O P Q ~ R@2 S G T U V W X Y Z ~@17 A AA AB AC AD@2 AE AF AG AH ~@2 L AI M AJ
  ~@6 AK ~@2 AL ~@2 AM ~@2
>`.pickRestart({
  A: "[g3,bb3]@15 ~ [d4,f4] ~@7", B: "[g3,c4]@23 ~", C: "[g3,a3,c4]@15 ~@2 [a3,e4,g4] ~@6", D: "d4@15 ~ [a3,c4,f4] ~@7",
  E: "[~@12 e4@27 ~ bb3 ~@7]/2", F: "a3@16 f4 ~@7", G: "[a3,f4]@5 ~", H: "bb3@16 ~ bb3 ~@6", I: "[g3,db4]@11 ~",
  J: "g4@8 [ab3,eb4] ~@3", K: "db4@11 ~", L: "[bb3,f4]@5 ~@3", M: "c4@23 ~", N: "bb3 ~@7", O: "~@16 [g3,d4,f4] ~@7",
  P: "[g3,bb3]@23 ~", Q: "[a3,g4]@15 ~ c4 ~@7", R: "[d4@10 ~@2 e4@27 ~@9]/2", S: "a3@16 c4 ~@7", T: "~@16 f4 ~@7",
  U: "bb3@11 ~", V: "[c4,eb4]@8 [ab3,c4] ~@3", W: "[db4,f4]@11 ~", X: "f4@15 ~ bb3 ~@7", Y: "db4@11 ~ d4@10 ~@2",
  Z: "[c4,f4,g4]@23 ~", AA: "[bb3,c4]@23 ~", AB: "[g3,e4,g4]@15 ~@2 g3 ~@6", AC: "f4@15 ~ [a3,d4] ~@7",
  AD: "[[g3,f4]@10 ~@3 bb3@27 ~@8]/2", AE: "a3@2 ~", AF: "[a3,c4]@5 ~", AG: "[ab3,db4,f4]@2 ~", AH: "[bb3,eb4]@11 ~",
  AI: "[bb3,f4]@6 b3@5 ~", AJ: "[c4,e4] ~@7", AK: "[c4,f4] ~@7", AL: "f4@2 ~@12 [c4,f4] ~ f4 ~@2 c4 ~@3 c4",
  AM: "c4 ~@23",
})).s("gm_epiano2").gain(0.35).pan(0.1)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~ A B ~@2 C ~ D E F G ~ H ~@2 I J ~ K ~ L ~@2 J ~@16 J M N ~ H O P ~@2 J Q R S L T ~@17 U V ~@2 W ~ U X U F Y Z AA L
  AB M ~@17 M G A S O AC AD AE AD Z@2 U ~@2
>`.pickRestart({
  A: "c4 ~@11", B: "~ f2@2 ~@21, ~ f3 ~@22", C: "[f2,f3,c4] ~@23", D: "f2 ~@11, f3 ~@23", E: "[f2,f3,c4] ~@11",
  F: "f3 ~@11", G: "bb3 ~@11", H: "g3 ~@11", I: "~ c4@2 ~@21, ~ f2 ~@22", J: "[f2,f3] ~@11", K: "bb2 ~@5 f3 ~@5",
  L: "g2 ~@11", M: "[f3,c4] ~@11", N: "f3 ~@5 f2 ~@5", O: "~ g3@2 ~@21", P: "~ c4@2 ~@21", Q: "f3 ~@5 [f2,f3] ~@5",
  R: "f2 ~@11, c4 ~@23", S: "[g3,d4] ~@11", T: "[f2,c4] ~@11, a3 ~@23", U: "f2 ~@11", V: "[f2,c4] ~@11", W: "d4 ~@11",
  X: "~ c4@2 ~@21, a3 ~@11", Y: "[f3,bb3] ~@5 f3 ~@5", Z: "c4 ~@23", AA: "[g2,d4] ~@11", AB: "c4 ~@11, a3 ~@23",
  AC: "c4 ~@11, f3 ~@23", AD: "f3 ~@23", AE: "~ f2@2 ~@21",
})).s("gm_pizzicato_strings").gain(0.25).pan(1)

// chords · pizzicato strings
const pizzicato_strings_2 = note(`<
  ~ A ~ B ~@3 C ~@2 D ~ E F G H ~ I J A K L M ~@17 N ~ O I ~@2 P Q R N S ~ E L ~ T ~@16 R ~ U N ~@2 V ~ N W X ~ Y Z A
  ~@17 W ~ D ~ E AA ~ W AB AC AD@2 ~ AE I
>`.pickRestart({
  A: "f2 ~@11", B: "f2@2 ~@16 [f3,c4] ~@5, f3 ~@23", C: "c4 ~@23", D: "f3 ~@5 c4 ~@5, bb2 ~@23", E: "g2 ~@11",
  F: "~ g3@2 ~@21", G: "e4 ~@11", H: "~ d4@2 ~@21, a3 ~@11", I: "[f2,f3] ~@11", J: "f3 ~@11", K: "d4 ~@11",
  L: "bb3 ~@11", M: "[f3,a3] ~@23, c4 ~@11", N: "c4 ~@11", O: "bb3 ~@5 [f3,c4] ~@5, bb2 ~@23", P: "[f2,e4] ~@11",
  Q: "~ f2 ~@22, a3 ~@11", R: "[f3,c4] ~@11", S: "[bb2,bb3] ~@5 c4 ~@5", T: "[f3,a3,c4] ~@11", U: "f3 ~@11, bb2 ~@23",
  V: "~ a3@2 ~@21, f3 ~@11", W: "[f2,c4] ~@11", X: "bb2 ~@5 [f2,c4] ~@5", Y: "g3 ~@11", Z: "[g3,bb3] ~@11",
  AA: "~ d4 ~@22", AB: "~ c4 ~@22", AC: "c4 ~@17 [f2,c4] ~@5", AD: "f2 ~@23", AE: "f2 ~@11, c4 ~@23",
})).s("gm_pizzicato_strings").gain(0.25).pan(0.6)

// chords · pizzicato strings
const pizzicato_strings_3 = note(`<
  A B C D E ~ F ~@2 G H I J K L ~ M@2 N O P Q R S ~@17 R ~ M T K U V R ~@2 B ~ P ~ R ~@17 W X Y Q Z AA AB W ~@2 AC ~@2 B
  AD ~@16 W R H Y ~ AE R ~ AF AG B@2 O B AH
>`.pickRestart({
  A: "[f2,c4] ~@11, f3 ~@23", B: "f3 ~@23", C: "~ c4 ~@22", D: "c4 ~@17 f2 ~@5", E: "[f2,f3,c4] ~@23",
  F: "[f3,c4] ~@23, f2 ~@11", G: "[f2,c4] ~@11", H: "~@6 [f2,f3] ~@5", I: "[f2,f3,c4] ~@11", J: "d4 ~@11",
  K: "~ g2@2 ~@21, ~ d4 ~@22", L: "~ [a3,c4]@2 ~@21, [f2,f3] ~@11", M: "c4 ~@11", N: "bb3 ~@5 [f2,c4] ~@5",
  O: "[f3,c4] ~@23", P: "g3 ~@11", Q: "[g2,g3] ~@11", R: "f2 ~@11", S: "[a3,c4] ~@11", T: "[g2,d4] ~@11",
  U: "~ a3@2 ~@21", V: "~ [c4,d4]@2 ~@21", W: "f3 ~@11", X: "bb3 ~@5 [f2,f3,c4] ~@5", Y: "[f2,f3] ~@11",
  Z: "~ [g2,g3]@2 ~@21, ~ d4 ~@22", AA: "~ c4@2 ~@21, e4 ~@11", AB: "~ d4@2 ~@21, ~ f2 ~@22", AC: "f2 ~@11, f3 ~@23",
  AD: "[f2,a3] ~@11", AE: "~ g2@2 ~@21", AF: "~ f3 ~@22", AG: "f2@2 ~@16 f3 ~@5", AH: "~ c4@2 ~@21",
})).s("gm_pizzicato_strings").gain(0.25).pan(0.1)

// chords · rock organ
const rock_organ = note("<~@71 A B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 ~@31>".pickRestart({
  A: "~@12 f5@3 ~@2 f5@3 ~ a5@2 ~", B: "[a5@33 ~@3 f5@3 ~ f5@3 ~ a5@3 ~]/2",
  C: "[~ c5 ~@10 [c5,a5]@22 ~@2 [a4,f5]@3 ~@2 [a4,f5]@3 [a4,f5]@3 ~, [d5,bb5]@11 ~@37]/2", // F Dm Gm
  D: "[[bb4,g5]@28 ~@2 a5@2 ~@2 bb4@2 [a4,f5]@5 ~ [bb4,g5]@5 ~, ~@30 c5 ~@2 g5@2 ~@13]/2", // Eb Dm Eb
  E: "[[c5,a5]@33 ~@4 f5@3 ~ [a4,f5]@3 ~ [c5,a5]@3, ~@12 a4 ~@3]/2", // F Dm F
  F: "[[c5,a5]@33 ~@3 [a4,f5]@3 ~ [a4,f5]@3 ~ [c5,a5]@3 ~]/2", // F Dm F
  G: "[[d5,bb5]@11 ~ [c5,a5]@23 ~@7 [a4,f5]@2 ~ [a4,f5]@2 ~]/2", // Gm F Dm
  H: "[[bb4,g5]@26 ~@4 [c5,a5]@2 ~ [bb4,g5]@2 ~ [a4,f5]@5 ~ [bb4,g5]@4 ~@2, ~@36 b4 ~@11]/2", I: "[[c5,a5]@13 ~@11]/2",
})).s("gm_rock_organ").gain(0.25)

// other · piano
const piano = note("<~@103 A B C D E F G H ~@8>".pickRestart({
  A: "~@12 [f3,f5]@3 ~ [f3,f5]@3 ~@2 [a3,a5]@3", B: "[a3,a5]@19 ~@5", C: "~@12 [f3,f5]@3 ~@2 [f3,f5]@3 ~ [a3,a5]@2 ~",
  D: "[bb3,bb5]@3 ~ [a3,a5]@4", E: "~@12 [f3,f5]@3 ~@2 [f3,f5]@3 ~ [f3,f5]@2 ~", F: "[g3,g5]", G: "~@6 [g3,g5]@5 ~",
  H: "[a3,a5] ~@7", // A
})).s("gm_piano").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  A@24 B C B C B C B C B C B C B C B A@17 B C B C B C B C B C B C B C B A@17 B C B C B C B C B C B C B C B A@16
>`.pickRestart({
  A: "x", B: "x ~@5 x ~@4 x", C: "x!2",
})).gain(0.3)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  A B A@3 B A ~ A B A@3 B A ~ A B A@3 B A ~@17 A B A@3 B A ~ A B A@3 B A ~@17 A B A@3 B A ~ A B A@3 B A ~@17 A B A@3 B A
  B A@3 B A ~@2
>`.pickRestart({
  A: "~@5 x ~@6", B: "~@5 x ~@5 x",
})).gain(0.1)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@24 A B A B A B A B A B A B A B A C ~@16 A B A B A B A B A B A B A B A C ~@16 C@7 D C@6 E ~@16
// … 40 more lines