Strudelify

Le baiser

Alain Souchon

KeyG minorTempo75 bpm
0:00/0:00
// Le baiser — Alain Souchon
// 75 bpm, 2/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 3/4 at bar 31, 2/4 at bar 33, 3/4 at bar 65, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 154 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/2)

// 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 · "Piano"
const epiano1 = note(`<
  ~@2 A@4 B@5 C@4 D@4 E ~@16 F@2 G@2 H@4 ~ F@2 I@2 J@4 ~@16 A@4 K@8 D@4 E ~@16 F@2 I@2 J@4 ~@10 F@2 G@2 H@4 F@2 G@2 H@4
  F@2 G@2 H@4 F@2 G@2 L@6
>`.pickRestart({
  A: "[~@12 [g5,eb6]@3 [f5,d6]@5 [f5,d6]@3 [eb5,c6]@17 ~@4 [d5,bb5]@3 [c5,a5]@5 a5@2 ~ g4@2 ~@7]/4", // Cm Dm Cm Gm F
  B: "[~@12 [ab4,f5]@3 [f4,d5]@5 [f4,d5]@3 [d4,ab4]@18 ~@3 [g4,eb5]@2 ~ [f4,d5]@4 ~ [f4,d5]@3 [d4,bb4]@16 ~@9]/5", // Db Dm Ddim Cm Dm Gm
  C: "[~@12 [g5,eb6]@3 [f5,d6]@5 [f5,d6]@3 [eb5,c6]@17 ~@4 [d5,bb5]@3 [c5,a5]@5 [d5,a5]@2 ~ g4@2 ~@7]/4", // Cm Dm Cm Gm F D5
  D: "[~@12 [ab4,f5]@3 [f4,d5]@5 [f4,d5]@3 [d4,ab4]@18 ~@3 [eb4,eb5]@2 ~ [f4,d5]@4 ~ [f4,d5]@3 eb4@4 ~ eb4@4, ~@43 c4@2 ~@6 c4@2 ~@2 c5@9]/4", // Db Dm Ddim Eb Dm
  E: "c4@2 ~ [f4,bb4]@4 ~@9", F: "[~@4 [g5,eb6]@3 [f5,d6]@5 [f5,d6]@3 [eb5,c6]@17]/2",
  G: "[~@4 [d5,bb5]@3 [c5,a5]@5 a5@2 ~ g4@2 ~@15]/2", // Gm F
  H: "[~@4 [ab4,f5]@3 [f4,d5]@5 [f4,d5]@3 [d4,ab4]@18 ~@3 [g4,eb5]@2 ~ [f4,d5]@4 ~ [f4,d5]@3 [d4,bb4]@16 ~]/4", // Db Dm Ddim Cm Dm Gm
  I: "[~@4 [d5,bb5]@3 [c5,a5]@5 [d5,a5]@2 ~ g4@2 ~@15]/2", // Gm F D5
  J: "[~@4 [ab4,f5]@3 [f4,d5]@5 [f4,d5]@3 [d4,ab4]@18 ~@3 [eb4,eb5]@2 ~ [f4,d5]@4 ~ [f4,d5]@3 eb4@4 ~ eb4@4 c4@2 ~ [f4,bb4]@4 ~, ~@35 c4@2 ~@6 c4@2 ~@2 c5@11 ~@6]/4", // Db Dm Ddim Eb Dm Bb5
  K: "[~@12 [ab4,f5]@3 [f4,d5]@5 [f4,d5]@3 [d4,ab4]@18 ~@3 [g4,eb5]@2 ~ [f4,d5]@4 ~ [f4,d5]@3 [d4,bb4]@16 ~@5 [g5,eb6]@3 [f5,d6]@5 [f5,d6]@3 [eb5,c6]@17 ~@4 [d5,bb5]@3 [c5,a5]@5 [d5,a5]@2 ~ g4@2 ~@7]/8", // Db Dm Ddim Cm Dm Gm Cm Dm …
  L: "[~@4 [ab4,f5]@3 [f4,d5]@5 [f4,d5]@3 [d4,ab4]@18 ~@3 [g4,eb5]@2 ~ [f4,d5]@4 ~ [f4,d5]@3 [d4,bb4]@15 ~@2 [d5,eb5]@30 ~@2, ~@31 [g5,c6]@16 ~]/6", // Db Dm Ddim Cm Dm Gm Ebmaj7 C5
})).s("gm_epiano1").gain(0.45).pan(0.3)

// bass · electric bass finger · "Basse"
const bass = note(`<
  ~@8 A B C D E F G H I J K L M N M O M N P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH Z AA AB AC AD AE AF AI AJ AK AL
  AK AJ AK AM AN AO AP AQ AR AS AT AU AV AW E F G H I J Z D E F G H I J AX AY M N M O M N P Q R S T U V W X Y ~@5 AZ AF
  BA AJ AK AL AK AJ AK AM AN X BB Z AA AB BC AD AE BD AH Z AA AB BC AD AE BD AH Z AA AB BC AD AE BD AH Z AA AB BC AD AE
  BD AH BE@2
>`.pickRestart({
  A: "~@2 c2 ~", B: "g1@5 ~@3 g1@5 ~@3", C: "d2@4 ~@4 g1@7 ~", D: "g1@3 ~ bb1@3 ~ c2@4 ~@4", E: "g1@5 ~@3 c2@5 ~@3",
  F: "g1@3 ~ c2@3 ~ g1@5 ~@3", G: "d2@4 ~@4 g1@5 ~@3", H: "g1@3 ~ d2@3 ~ bb1@4 ~@4", I: "f1@5 ~@3 bb1@5 ~@3",
  J: "f1@3 ~ bb1@3 ~ c2@5 ~@3", K: "g1@4 ~@4 c2@5 ~@3", L: "~@8 eb2@5 ~@3", M: "eb2@5 ~@2 bb1 bb1@4 ~@4",
  N: "ab1@2 ~@2 eb2 ~ eb2 ~", O: "ab1@4 ~@4 eb2@5 ~@3", P: "eb2@5 ~@2 g1 g1@6 ~@2", Q: "g1@6 ~@2 ab1@3 ~ ab2@3 ~",
  R: "ab1@5 ~@2 ab1 ab1@4 ~@4", S: "ab1@4 ~@3 ab1 ab1@2 ~@2 ab2@2 ~@2", T: "eb2@5 ~@3 bb1@4 ~@3 bb1",
  U: "eb2@2 ~@2 bb1 ~ eb2 ~", V: "bb1@5 ~@3 f2@4 ~@3 bb1", W: "bb1 ~ bb1@2", X: "c2@7 ~ g1@6 ~ g1",
  Y: "c2@3 ~ g1@2 bb1@2", Z: "c2@4 ~@4 g1@5 ~@3", AA: "c2@5 ~@3 g1@3 ~ c2@3 ~", AB: "g1@5 ~@3 d2@4 ~@4",
  AC: "g1@5 ~@3 g1@3 ~ d2@3 ~", AD: "bb1@4 ~@4 f1@5 ~@3", AE: "bb1@5 ~@3 f1@3 ~ bb1@3 ~", AF: "c2@5 ~@3 g1@4 ~@4",
  AG: "g1@5 ~@3 d2@5 ~@3", AH: "g1@5 ~@3 g1@3 ~ bb1@3 ~", AI: "c2@5 ~@11", AJ: "eb2@5 ~@3 eb2@5 ~@2 bb1",
  AK: "bb1 ~ ab1 ~", AL: "eb2@2 ~@2 eb2@2 ~@2 eb2@5 ~@2 bb1", AM: "eb2@2 ~@2 eb2@2 ~@2 eb2@5 ~@2 g1",
  AN: "g1@3 ~ g1@3 ~", AO: "ab1@3 ~ ab2@3 ~ ab1@5 ~@2 ab1", AP: "ab1@4 ~@4 ab1@4 ~@3 ab1",
  AQ: "ab1@2 ~@2 ab2@2 ~@2 eb2@5 ~@3", AR: "bb1@4 ~@3 bb1 eb2@4 ~@4", AS: "bb1@2 ~@2 eb2@2 ~@2 bb1@5 ~@3",
  AT: "f2@4 ~@3 bb1 bb1@4 ~@4", AU: "bb1@8 c2@7 ~", AV: "g1@6 ~ g1 c2@6 ~@2", AW: "g1 bb1 c2 ~",
  AX: "g1@4 ~@4 c2@5 ~@2 bb1", AY: "bb1@3 ~ d2@3 ~ eb2@5 ~@3", AZ: "~@8 f1@3 ~ bb1@3 ~", BA: "c2@5 ~@2 bb1 bb1@5 ~@3",
  BB: "c2@3 ~@5", BC: "g1@5 ~@3 g1@3 ~ g1@3 ~", BD: "c2@5 ~@3 c2@4 ~@4", BE: "c2/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · electric guitar clean · "JCCleanGt"
const electric_guitar_clean = note(`<
  ~@2 A@7 B@7 C@7 D@7 E F G@2 H@2 I@2 J@2 K@2 L@3 I@2 J@2 K@2 M@4 N@4 E O P Q R S@8 T@8 U@7 V@4 W@5 E F G@2 H@2 ~@6 X@3
  Y Z Y Z AA E O AB@2 I@2 J@2 K@2 AC@2 I@2 J@2 K@2 AC@2 AD AE J@2 AF AG AH@4 J@2 AF AG AI@4
>`.pickRestart({
  A: "[~@11 c5@4 ~@8 c5@4 ~ c5@12 ~@3 bb4@4 ~@8 bb4@4 ~ bb4@12 ~@3 bb4@4 ~@8 bb4@4 ~ bb4@12 ~@3 c5@4 g4, ~@8 g4@7 g4@5 g4@7 g4@13 g4@7 g4@5 g4@7 g4@13 f4@7 f4@5 f4@7 f4@13 g4@7 ~, ~@16 c5@7 ~@25 bb4@7 ~@25 bb4@7 ~@25]/7",
  B: "[c5@4 ~@3 bb4@4 ~ bb4@25 ~@6 c5@4 ~@8 c5@4 ~ c5@12 ~@3 bb4@4 ~@8 bb4@4 ~ bb4@12 ~@3 bb4@4 f4, ~@4 f4@7 f4@27 ~@2 g4@7 g4@5 g4@7 g4@13 g4@7 g4@5 g4@7 g4@13 f4@7 ~, ~@48 c5@7 ~@25 bb4@7 ~@25]/7",
  C: "[~@7 bb4@4 ~ bb4@12 ~@3 c5@4 ~@36 bb4@4 eb4@3 ~@5 f4@2 ~@18 bb4@4 eb4@3 ~@5 f4, bb4@7 ~@25 c5@7 c5@32 ~@41, ~@4 f4@7 f4@13 g4@7 g4@5 g4@32 ~@44, ~@60 bb4@7 ~@25 bb4@7 ~@13, ~@8 eb5 ~@3 eb5 ~]/7",
  D: "[~@19 bb4@4 eb4@3 ~@5 f4@2 ~@18 bb4@5 ~@11 g4@5 ~@11 g4@4 c4 ~@7 g4@9 c5@4 ab4@4, ~@12 bb4@7 ~@25 bb4@7 ~@9 g4@7 ~@9 g4@7 ~@5 g4@7 ~@17, ~@4 eb5@2 ~@6 eb5@2 ~@2 bb4@2 ~@2 c5@2 ~ c5@2 ~@3]/7",
  E: "~@11 bb4@5, ~@4 bb4@7 ~@5, ~ eb5", F: "bb4@4 ~@3 bb4@8 ~, ~@4 eb5@11 ~",
  G: "[~@11 ab4@4 ~@8 ab4@9, ~@3 bb4@12 bb4@2 ~@15, ~@4 ab4@7 ~@5 ab4@7 ~@9, ~@2 d5@2 ~ d5@3]/2",
  H: "[g4@2 ~ c5@4 ~@8 c5@16 ~, ~@7 g4@5 g4@19 ~, ~@8 c5@7 ~@17]/2",
  I: "[~@3 c5@4 ~@8 c5@4 ~ c5@12, g4@7 g4@5 g4@7 g4@13, ~@8 c5@7 ~@17]/2",
  J: "[~@3 bb4@4 ~@8 bb4@4 ~ bb4@12, g4@7 g4@5 g4@7 g4@13, ~@8 bb4@7 ~@17]/2",
  K: "[~@3 bb4@4 ~@8 bb4@4 ~ bb4@12, f4@7 f4@5 f4@7 f4@13, ~@8 bb4@7 ~@17]/2",
  L: "[~@3 c5@4 ~ c5@4 ~@8 bb4@25 ~@3, g4@7 g4@5 f4@7 f4@27 ~@2, ~@15 d4@31 ~@2]/3",
  M: "[~@3 c5@4 ~@36 bb4@4 eb4@3 ~@5 f4@2 ~@7, g4@7 g4@5 g4@32 ~@20, ~@8 c5@7 c5@32 ~@17, ~@36 bb4@7 ~@21, ~@5 eb5 ~@2]/4",
  N: "[~@11 bb4@4 eb4@3 ~@5 f4@2 ~@7, ~@4 bb4@7 ~@21, ~ eb5 ~@2]/2", O: "~@11 g4@5, ~@4 g4@7 ~@5, ~ bb4",
  P: "~@11 g4@4 c4, ~@4 g4@7 ~@5, ~ c5", Q: "~@7 g4@9, g4@7 ~@9, ~ c5@2 ~", R: "c5 ab4 ~ bb4",
  S: "[~@3 bb4@5 bb4@4 ~@3 bb4@8 ~@12 ab4@4 ~@8 ab4@9 g4@2 ~ c5@4 ~@8 c5@16 ~@4 c5@4 ~@8 c5@4 ~ c5@12 ~@3 bb4@4 g4, eb5@8 ~@4 eb5@11 ~@4 bb4@12 bb4@2 ~@23 c5@7 ~@25 c5@7 ~@25, ~@28 ab4@7 ~@5 ab4@7 ~@16 g4@5 g4@19 ~ g4@7 g4@5 g4@7 g4@13 g4@7 ~, ~@8 d5@2 ~ d5@3 ~@18]/8",
  T: "[~@7 bb4@4 ~ bb4@12 ~@3 bb4@4 ~@8 bb4@4 ~ bb4@12 ~@3 c5@4 ~ c5@4 ~@3 bb4@4 ~ bb4@12 ~@3 c5@4 ~@8 c5@4 ~ c5@12 ~@3 bb4@4 g4, bb4@7 ~@25 bb4@7 ~@57 c5@7 ~@25, ~@4 g4@7 g4@13 f4@7 f4@5 f4@7 f4@13 g4@7 g4@5 g4@7 g4@13 g4@7 g4@5 g4@7 g4@13 g4@7 ~]/8",
  U: "[~@7 bb4@4 ~ bb4@12 ~@3 bb4@4 ~@8 bb4@4 ~ bb4@12 ~@3 c5@4 ~@36 bb4@4 eb4@3 ~@5 f4, bb4@7 ~@25 bb4@7 ~@25 c5@7 c5@32 ~@9, ~@4 g4@7 g4@13 f4@7 f4@5 f4@7 f4@13 g4@7 g4@5 g4@32 ~@12, ~@92 bb4@7 ~@13, ~@12 eb5 ~]/7",
  V: "[~@19 bb4@4 eb4@3 ~@5 f4@2 ~@18 bb4@4 eb4@3 ~@5 f4, ~@12 bb4@7 ~@25 bb4@7 ~@13, ~@2 eb5 ~@3 eb5 ~]/4",
  W: "[~@19 bb4@5 ~@11 g4@5 ~@11 g4@4 c4 ~@7 g4@9 c5@4 ab4@4, ~@12 bb4@7 ~@9 g4@7 ~@9 g4@7 ~@5 g4@7 ~@17, ~@4 eb5@2 ~@2 bb4@2 ~@2 c5@2 ~ c5@2 ~@3]/5",
  X: "[~@3 c5@4 ~@36 bb4@4 eb4, g4@7 g4@5 g4@32 ~@4, ~@8 c5@7 c5@32 ~, ~@36 bb4@7 ~@5, ~@5 eb5]/3",
  Y: "f4@5 ~@3 eb4@7 ~, ~@7 f4@2 ~@7", Z: "~@11 bb4@4 eb4, ~@4 bb4@7 ~@5, ~ eb5",
  AA: "~@3 d5@4 ~@4 c5@5, f4@5 ~@2 f4@2 ~@7, ~@8 eb4@7 ~",
  AB: "[~@3 g4 c5@3 g4 f4@3 eb4 c4@3 ~ c4@4 ~@12, ~@15 bb3@2 ~@15]/2",
  AC: "[~@3 c5@4 ~ c5@4 ~@3 bb4@4 ~ bb4@12, g4@7 g4@5 g4@7 g4@13]/2", AD: "c4@3 ~ c5@3 g4 f4@3 eb4@4 g4, ~@3 g4@2 ~@11",
  AE: "c5@3 g4 f4@3 eb4@8 ~", AF: "ab4@3 ~ ab4@3 f4 d5@3 ab4@4 f4, ~@3 f4@2 ~@11", AG: "ab4@3 f4 d5@3 ab4@5 ~@4",
  AH: "[~@3 c5@4 ~ c5@4 ~@3 bb4@4 ~@36 eb4@9, g4@7 g4@5 g4@7 g4@16 g4@4 g4 f4@7 g4 c5@16, ~@20 bb4@31 g4@13, ~ c4, ~@36 c5@7 eb4@9 f4@12]/4",
  AI: "[~@3 c5@4 ~ c5@4 ~@3 bb4@4 ~ bb4@32 ~@12, g4@7 g4@5 g4@7 g4@32 ~@13]/4",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.8)

// chords · epiano1 · "Dist E.Piano"
const epiano1_2 = note(`<
  ~@2 A B C D E F G H I A B C D E F G B J K L K M N M O P Q R S T U@2 V ~ W X D@2 Y@2 B Z ~ W X D@2 Y@2 B AA AB AC AB AC
  AD AE AD AF AG AH AI AJ AK AL AM AN A B C D E F G H AO B C D E F G B J K L K M N M O P Q R S T U@2 V ~ W X D@2 Y@2 B
  AA AB AC AB AC AD AE AD AF V ~ W X D@2 Y@2 B Z W X D@2 Y@2 B Z W X D@2 Y@2 B Z W X D@2 Y@2 B Z ~@2
>`.pickRestart({
  A: "~@11 g3 [c4,eb4]@2 ~@2", B: "~@2 [c4,eb4] ~@3 [c4,eb4] ~, ~@3 g3@4 ~@4 g3@4 ~",
  C: "~@2 [c4,eb4] ~@3 [bb3,d4] ~, ~@3 g3@3 ~@5 g3@4 ~", D: "~@2 [bb3,d4] ~@3 [bb3,d4] ~, ~@3 g3@4 ~@4 g3@4 ~",
  E: "~@2 [bb3,d4] ~@3 [d4,f4] ~, ~@3 g3@4 ~@4 bb3@4 ~", F: "~@4 [d4,f4]@3 ~@5 [d4,f4]@2 ~@2, ~@3 bb3@4 ~@4 bb3@4 ~",
  G: "~@4 [d4,f4]@3 ~@5 [c4,eb4]@2 ~@2, ~@3 bb3@4 ~@4 g3@4 ~", H: "~@2 [c4,eb4] ~@3 [bb3,d4] ~, ~@3 g3@4 ~@4 g3@4 ~",
  I: "~@4 [bb3,d4]@3 ~@9, ~@3 g3@4 ~@9", J: "~@12 [g3,bb3,eb4]@3 ~", K: "~@4 [g3,bb3,eb4]@3 ~@5 [d4,g4,bb4]@3 ~",
  L: "~@4 [c4,eb4,bb4]@4 ~@4 [g3,bb3,eb4]@3 ~", M: "~ [c4,eb4,bb4] ~ [g3,bb3,eb4]",
  N: "~@4 [g3,bb3,eb4]@3 ~@5 [d4,g4,bb4]@4", O: "~@4 [g3,bb3,eb4]@3 ~@5 [bb3,d4,g4]@3 ~",
  P: "~@4 [bb3,d4,g4]@3 ~@5 [ab3,c4,eb4,g4]@3 ab3", Q: "~@3 ab3 [ab3,c4,eb4]@3 ab3 ~@4 [c4,eb4]@3 ab3, ~@11 ab3@3 ~@2",
  R: "~@3 ab3 [ab3,c4,eb4]@3 ab3 [ab3,c4,eb4]@3 ~ [ab3,c4,eb4]@3 ~", // Ab
  S: "~@4 [eb4,g4,bb4]@3 eb3 ~@4 [g3,bb3,eb4]@3 eb3, ~@3 eb3@2 ~@11", // Eb
  T: "~@4 [bb3,eb4,g4]@3 eb3 ~@4 [g3,bb3,eb4]@3 eb3, ~@3 eb3@2 ~@11", // Eb
  U: "~@4 [bb3,d4,f4]@3 f3 ~@4 [bb3,d4,f4]@3 bb2, ~@3 bb2@2 ~@11", // Bb
  V: "~@3 c3 [g3,c4,eb4]@2 ~ c3 ~@3 c3 [g3,c4,eb4]@2 ~ c3", W: "~@3 g3 [c4,eb4]@2 ~@6 [c4,eb4]@2 ~@2, ~@11 g3@4 ~",
  X: "~@2 [c4,eb4] ~@3 [c4,eb4] ~, ~@3 g3@4 ~@4 g3@3 ~@2", Y: "~@4 [d4,f4]@2 ~@6 [d4,f4]@3 ~, ~@3 bb3@4 ~@4 bb3@4 ~",
  Z: "~@4 [bb3,d4]@2 ~@6 [bb3,d4]@3 ~, ~@3 g3@4 ~@4 g3@4 ~", AA: "~@2 [c4,eb4] ~@5, ~@3 g3@4 ~@9",
  AB: "~@4 [g3,bb3,eb4]@3 ~@5 [g3,bb3,eb4]@3 ~", AC: "~@4 [d4,g4,bb4]@3 ~@5 [c4,eb4,bb4]@4",
  AD: "~@4 [g3,bb3,eb4]@4 ~@4 [g3,bb3,eb4]@3 ~", AE: "~ [d4,g4,bb4] ~ [c4,eb4,bb4]",
  AF: "~@4 [bb3,d4,g4]@3 ~@5 [bb3,d4,g4]@3 ~", AG: "~@4 [ab3,c4,eb4,g4]@3 ab3 ~@3 ab3 [ab3,c4,eb4]@3 ab3",
  AH: "~@4 [c4,eb4]@3 ab3 ~@3 ab3 [ab3,c4,eb4]@3 ab3, ~@3 ab3@3 ~@10", // Cm Ab
  AI: "[ab3,c4,eb4]@3 ~ [ab3,c4,eb4]@3 ~@5 [eb4,g4,bb4]@3 eb3, ~@11 eb3@2 ~@3", // Ab Eb
  AJ: "~@4 [g3,bb3,eb4]@3 eb3 ~@4 [bb3,eb4,g4]@3 eb3, ~@11 eb3@2 ~@3", // Eb
  AK: "~@4 [g3,bb3,eb4]@3 eb3 ~@4 [bb3,d4,f4]@3 f3, ~@11 bb2@2 ~@3", // Eb Bb
  AL: "~@4 [bb3,d4,f4]@3 bb2 ~@4 [bb3,d4,f4]@3 f3, ~@11 bb2@2 ~@3", // Bb
  AM: "~@4 [bb3,d4,f4]@3 bb2 ~@3 c3 [g3,c4,eb4]@2 ~ c3", AN: "~@3 c3 [g3,c4,eb4]@2 ~ c3 ~@8",
  AO: "~@4 [bb3,d4]@3 ~@4 g3 [c4,eb4]@2 ~@2, ~@3 g3@4 ~@9", // Bb Cm
})).s("gm_epiano1").gain(0.35)

// chords · synth strings 1 · "SynStr1"
const synth_strings_1 = note(`<
  ~@19 A@7 B@4 C@2 D@2 E@2 ~@17 F@6 G H I@8 ~@16 A@7 B@4 C@2 D@2 E@2 ~@8 F@6 G H E@2 J K L K L M J N J K L K L M J N J K
  L K L M J N J K L K L M J N ~@2
>`.pickRestart({
  A: "[~ [bb4,eb5]@4 [bb4,eb5]@4 [bb4,eb5]@4 [bb4,eb5]]/7", B: "[~ [d5,g5,bb5]@2 [c4,eb4,g4,eb5]@5]/4",
  C: "[eb4,g4,bb4,eb5]/2", D: "[f4,ab4,bb4,d5]/2", E: "[c4,eb4,g4,c5]/2", F: "[bb4,eb5]/2", G: "[bb4,eb5]",
  H: "[d5,g5,bb5]", I: "[[c4,eb4,g4,eb5]@5 [eb4,g4,bb4,eb5]@4 [f4,ab4,bb4,d5]@4 [c4,eb4,g4,c5]@3]/8", J: "c5", K: "g5",
  L: "d5", M: "f5", N: "bb4",
})).s("gm_synth_strings_1").gain(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@20 A@10 B@4 ~@19 B@10 ~ A@4 ~@9 A ~@8 A@10 B@5 ~@9 B@9 ~@16 B ~@18>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E D F G F G H I J K L M J N O P O Q O Q N Q N R N S Q@2 N Q N ~ T U V W X W X Y ~ Z AA AB AC@2 AD AE AF Q AG N
  AG N O N S N@2 P N Q N@2 S ~@8 R J K L Q M Q AH AI O Q O Q N Q N R N AJ N O N O N ~ AC AA AB AC@2 AD AE H Q AG N AG N
  O N S N AK AL AC AM AC@4 O AL AC AM AC@4 O AL AC AM AC@4 ~ AL AC AM AC@3 R AN ~@2
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x ~@2 x", D: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", E: "x ~@3 x ~@2 x!2 ~@3 x ~@3", F: "x ~ x!2",
  G: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3", H: "x ~@2 x ~@12", I: "~@9 x ~ x!3 ~ x", J: "x!2 ~ x!3 ~@2 x!2 ~ x ~ x ~ x",
  K: "x ~@3 x ~@4 x ~ x ~@4", L: "x!2 ~ x!2 ~@3 x!2 ~ x!3 ~ x", M: "x!2 ~ x!3 ~@2 x!2 ~ x!3 ~ x",
  N: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", O: "x!2 ~ x!3 ~ x!3 ~ x ~@4", P: "~@8 x!2 ~ x ~@4", Q: "x!2 ~ x ~@4 x!2 ~ x!3 ~ x",
  R: "~@8 x!2 ~ x!3 ~ x", S: "x!2 ~ x!3 ~ x ~@8", T: "~@4 x ~@3 x ~@2 x!2 ~@3", U: "x ~@2 x!2 ~@3 x ~@3 x ~@2 x",
  V: "x ~@3 x ~@3 x ~@2 x!2 ~@3", W: "x ~@2 x!2 ~@3 x ~@7", X: "x ~@3 x ~@3 x ~@2 x!2 ~@2 x",
  Y: "x ~@2 x!2 ~@3 x ~@2 x ~@4", Z: "~ x ~ x!3 ~ x!3 ~ x!3 ~@2", AA: "x!2 ~ x ~ x ~ x!2 ~@3 x ~@3",
  AB: "~ x ~ x ~@4 x!2 ~ x!2 ~@3", AC: "x!2 ~ x!3 ~ x!3 ~ x!3 ~@2", AD: "x!2 ~ x ~ x ~ x!3 ~ x!3 ~ x",
  AE: "~@3 x ~ x ~ x!3 ~ x!3 ~ x", AF: "x!4", AG: "x!2 ~ x ~@4 x!2 ~ x ~@4", AH: "x!2 ~ x!3 ~ x ~@3 x ~ x ~ x",
  AI: "x ~@3 x ~@3 x!2 ~ x ~@4", AJ: "x!2 ~ x ~@12", AK: "~ x ~ x ~@12", AL: "x!2 ~ x ~@4 x!2 ~ x!3 ~@2",
  AM: "~ x ~ x ~@3 x!3 ~ x!3 ~@2", AN: "x",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@77 A ~@57 B ~@7 B ~@7 B ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@3 x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 A ~@32 B ~@7 C ~@40 D ~@7 D ~@14 E ~@2 F ~@7 E ~@7 G ~@2>".pickRestart({
  A: "~@3 x ~@12", B: "~@11 x!2 ~@3", C: "~@5 x ~@10", D: "~@3 x", E: "~ x", F: "~@8 x!2 ~@6", G: "~@11 x ~@4",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A B ~ B C ~ D ~ C E F G B@2 F ~@2 H@2 C H C ~ C ~ I ~ A C@2 ~ C ~@2 J ~ K H ~ L ~ H K J M N K@2 C O ~ C P ~ P ~ H
  ~ A ~@2 Q ~ C ~@11 I F G B C B C R H@2 C H C ~ C ~ I ~ S ~ H ~ H ~@2 K M N K@2 C O C@2 P ~ P ~ H ~ A ~ I M K N K@4 H M
  K N K@4 H M K N K@4 T M K N K@3 O A ~@2
>`.pickRestart({
  A: "~ x", B: "~@7 x ~@8", C: "~ x ~@2", D: "~@4 x ~@2 x ~@8", E: "~@7 x!2 ~@7", F: "~@7 x ~@4 x ~@3",
  G: "~@7 x!2 ~@3 x ~@3", H: "~@3 x", I: "x", J: "x ~@14 x", K: "~@15 x", L: "~@12 x ~@2 x", M: "~@4 x ~@10 x",
  N: "x ~@3 x ~@10 x", O: "x!2 ~@2", P: "~ x ~ x", Q: "x ~@2 x", R: "~@2 x!2", S: "~ x!2 ~", T: "x ~@2 x!2 ~@11",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@27 A ~@6 B ~@17 C ~@15 D ~@15 E A ~@15 F ~@4 G ~@12 H ~@12 I ~@2 J ~@12 G ~@2 K ~@2
>`.pickRestart({
  A: "~ x ~@2", B: "~@8 x ~@2 x!2 ~@3", C: "~@4 x ~@2 x ~@4 x ~@3", D: "x ~@2 x ~@12", E: "~@12 x ~@2 x",
  F: "~@8 x ~@2 x ~@4", G: "~@15 x", H: "~@3 x", I: "x ~@2 x!2 ~@11", J: "~@3 x ~@12", K: "~@3 x!2 ~@11",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~@16 A ~@7 B ~@8 B ~@16 B ~@6 A ~@24 A ~@2 B ~@4 C ~@16 B ~@9 B ~@6 D ~@8 B ~@9
>`.pickRestart({
  A: "~ x", B: "x", C: "x ~@2 x", D: "~@5 x ~@10",
})).gain(0.4)

// … 42 more lines

More by Alain Souchon