Strudelify
Calypso (Part 1) cover art

Waiting for Cousteau

Calypso (Part 1)

Jean Michel Jarre

KeyC majorTempo120 bpm
0:00/0:00
// Calypso (Part 1) — Jean Michel Jarre
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 229 bars on a 16-step grid, each part at one level. 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 · timpani
const timpani = note(`<
  ~@5 A B C D E F G@2 A B C H I F G@2 J K L M N ~ O P Q R ~@7 S@4 A B C D E F G@2 A B C H I F G@2 J K L M N ~ O P Q R
  ~@7 T@4 ~@17 U V W X U V W X U V W Y Z AA AB AC AD AE ~@16 AF AG AH AI AJ AK AJ AK AL@2 AM AN AO@2 AP AQ AR AS AT@2 AU
  AV AW AU AV AX AW AY AZ BA BB ~@13 BC BD BE BF BC BD BE BG ~@10 BC BD BE BF BC BD BE BG ~@29
>`.pickRestart({
  A: "f4@2 c5@2 a4@2 f4 c5@2 c5@2 c5 a4@2 f4@2", B: "g4@2 g4@2 f#4@2 g4 c5@2 c5@3 ~@4",
  C: "c#5@2 g#4@2 f5@2 d#5 f5@2 f5@2 f5 d#5@2 c#5@2", D: "d#5@2 d#5@2 c5@2 c#5 d#5@2 d#5@2 d#5 c#5@2 c5@2",
  E: "a#4@2 c#5@2 c5@2 f4 c#5@2 c#5@2 c#5 c5@2 a#4@2", F: "c#5@2 c#5@2 c5@2 a#4 c#5@2 c#5@2 c#5 c5@2 a#4@2",
  G: "c5@2 c5@2 ~ c5@2 ~ c5@2 c5@2 ~ c5@2 ~", H: "d#5@2 d#5@2 c5@2 c#5 d#5!2 ~ d#5@2 ~@3 g#4",
  I: "a#4@2 c#5@2 c5@2 a#4 c#5@3 c#5!2 c5@2 f4@2", J: "g#4@2 d#4@2 c5@2 a#4 c5@2 c5@2 c5 g#4@2 d#4@2",
  K: "a#4@2 a#4@2 g4@2 g#4 a#4@2 ~ d#4@2 g4@2 d#4@2", L: "f4@2 g#4@2 g4@2 c4 g#4@2 g#4@2 g#4 g4@2 f4@2",
  M: "g#4@2 g#4@2 g4@2 f4 g#4@2 g#4@2 g#4 g4@2 f4@2", N: "g4", O: "g4@2 e5@2 c5@2 g4 e5@2 e5@2 e5 c5@2 g4@2",
  P: "a4@2 f5@2 c5@2 a4 f5@2 f5@2 f5 c5@2 a4@2",
  Q: "g4@2 e5@2 e3 f3 [f#3,g4] g3 g#3 a3 a#3 [b3,e5] c4 c#4 d4 d#4, ~@4 c5@2 ~ e5@2 e5@2 ~ c5@2 g4@2", // Gmaj7 E5
  R: "e4 f4 f#4 g4 g#4 a4 [a4,a#4] b4 c5 c#5 d5 d#5 e5 f5 g5 g#5, a4@2 f5@2 c5@2 ~ f5@2 f5@2 ~@5", // A#maj7
  S: "[~@12 [g4,c5,e5]@2 ~ [a4,c5,f5]@2 ~@11 [g4,c5,e5]@2 ~ [f4,a#4,d5]@2 ~@7 [a#4,d5,f5]@2 ~@2 [c5,f5,a5]@2 ~ [c5,e5,g5]@2 ~@15]/4", // C F C A# F C
  T: "[~@12 [g4,c5,e5]@2 ~ [a4,c5,f5]@2 ~@11 [g4,c5,e5]@2 ~ [f4,a#4,d5]@2 ~@7 [g4,c5,e5]@2 ~@2 [c#5,e5,a5]@2 ~ [a4,d5,f#5]@2 ~@15]/4", // C F C A# C A D
  U: "e4@2 c#4@2 e4@2 c#4@2 ~ e4@2 e4 c#4@2 ~@2", V: "f#4@2 d4@2 f#4@2 d4@2 ~ f#4@2 f#4 d4@2 ~@2",
  W: "g4@2 d4@2 g4@2 d4@2 ~ g4@2 g4 d4@2 ~@2", X: "c#4 e4 c#4 e4 ~@3 c#4", Y: "c#4 e4 c#4 e4 ~@4",
  Z: "[d4,g4,b4] ~@2 [d4,g4,b4] ~@12", AA: "~@2 [f4,c#5]@3 [f#4,c#5]@3 [g4,c#5]@3 [g#4,c#5]@3 [a4,c#5]@2",
  AB: "~ a3 g#3 a3 b3 a3 g#3 a3 c4 a3 g#3 a3 c#4 a3 g#3 a3", AC: "d4 a3 g#3 a3 d#4 a3 g#3 a3 e4@2 ~@3 [f4,a4]@3",
  AD: "[f4,a#4]@3 [g4,b4]@3 [g#4,c5]@3 [a4,c#5]@3 ~@2 [d4,d5]!2", AE: "[d4,d5] ~@7",
  AF: "c5@2 c5 c5@2 c5 c5@2 c5@2 c5@2 c5 c5@2 c5", AG: "c5@2 c5!4 c5@2 c5 c5@2 c5 c5@2 c5@2",
  AH: "a#4@2 a#4 a#4@2 a#4 a#4@2 a#4 a#4@2 a#4 a#4@2 a#4!2", AI: "a#4@2 a#4 a#4@2 a#4 a#4@2 a#4!2 a#4@2 a#4@2 g4!2",
  AJ: "g4@2 g4 g4@2 g4 g4@2 g4@2 g4 g4@2 g4@2 g4", AK: "g4@2 g4 g4@2 g4 g4@2 g4@2 g4 g4@2 g4!3",
  AL: "a4@2 a4 a4@2 a4 a4@2 a4@2 a4@2 a4!4", AM: "g4@2 g4 g4@2 g4 g4@3 g4@2 g4 g4@2 g4@2",
  AN: "g4@2 g4 g4@2 g4 g4@2 g4 g4@2 g4 g4@2 e4!2", AO: "e4@2 e4 e4@2 e4!3 e4@2 e4 e4@2 e4!3",
  AP: "e4@2 e4 e4@2 e4!3 e4@2 e4 e4@3 e4!2", AQ: "d5 c#5", AR: "b4", AS: "a4", AT: "e5@3 e5@3 e5@2 ~@8",
  AU: "[c4,e4,a4]@2 ~ [c4,e4,a4]@2 ~@3 [c4,e4,a4]@2 ~ [c4,e4,a4]@2 ~@3", // Am
  AV: "[d4,e4,g#4]@2 ~ [d4,e4,g#4]@2 ~ [d4,e4,g#4]@2 ~@8", AW: "[c4,e4,a4]@2 ~ [c4,e4,a4]@2 ~ [c4,e4,a4]@2 ~@8",
  AX: "[d4,e4,g#4]@2 ~ [d4,e4,g#4]@2 ~@3 [d4,e4,g#4]@2 ~ [d4,e4,g#4]@2 ~@3", // E7
  AY: "[g4,a4,c#5]@2 ~ [g4,a4,c#5]@2 ~@3 [g4,a4,c#5]@2 ~ [g4,a4,c#5]@2 ~@3", // A7
  AZ: "[f4,a4,d5]@2 ~ [f4,a4,d5]@2 ~ [f4,a4,d5]@2 ~@8", // Dm
  BA: "[a4,b4,d#5]@2 ~ [a4,b4,d#5]@2 ~@3 [a4,b4,d#5]@2 ~ [a4,b4,d#5]@2 ~@3", // B7
  BB: "[g#4,b4,d5]@2 ~ [g#4,b4,d5]@2 ~ [g#4,b4,e5]@2 ~@8", BC: "d4@2 b3@2 d4@2 b3@2 ~ d4@2 d4 b3@2 ~@2",
  BD: "e4@2 c4@2 e4@2 c4@2 ~ e4@2 e4 c4@2 ~@2", BE: "f4@2 c4@2 f4@2 c4@2 ~ f4@2 f4 c4@2 ~@2",
  BF: "b3 d4 b3 d4 ~@2 d4 b3", BG: "b3 d4 b3 d4 ~@4",
})).s("gm_timpani").gain(0.8)

// other · synth brass 1 · "synth brass"
const synth_brass_1 = note(`<
  ~ A@5 B C D E F B@2 A B C D E F B@2 D G A H I@2 ~@4 J K L J@2 K L J M N O A B C D E F B@2 A B C D E F B@2 D G A H I@2
  ~@4 J K L J@2 K L J M P Q I R S E B D R E A I T U@2 V@4 W X J W@2 X J W@2 X J W ~@18 Y@2 Z@2 Y@2 Z@2 I@4 U@2 I@2 AA@3
  AB AC AD AE ~ AF ~ AG AH AI ~ AJ AK AL ~ AM AN AO AN AO AN AP@3 AQ ~@4 I B A I@2 B A I AR@2 AS AT AU AV ~@4 I B A I@2
  B A I AR@2 AS AT AU AV AW ~ AF ~ AG AH AI ~ AJ AK AL ~ AM AN AO AN AO AN AP@3 AQ AX
>`.pickRestart({
  A: "f2 f3 f2 f3@2 f3 f2@2 ~ f2 f3 f2 c2 f2 f3@2", B: "c3 c4 c3 c4@2 c4 c3@2 ~ c3 c4 c3 g2 c3 c4@2",
  C: "c#3 c#4 c#3 c#4@2 c#4 c#3@2 ~ c#3 c#4 c#3 g#2 c#3 c#4@2",
  D: "g#2 g#3 g#2 g#3@2 g#3 g#2@2 ~ g#2 g#3 g#2 d#2 g#2 g#3@2",
  E: "a#2 a#3 a#2 a#3@2 a#3 a#2@2 ~ a#2 a#3 a#2 f2 a#2 a#3@2",
  F: "f#2 f#3 f#2 f#3@2 f#3 f#2@2 ~ f#2 f#3 f#2 c#2 f#2 f#3@2",
  G: "d#2 d#3 d#2 d#3@2 d#3 d#2@2 ~ d#2 d#3 d#2 a#1 d#2 d#3@2",
  H: "c#2 c#3 c#2 c#3@2 c#3 c#2@2 ~ c#2 c#3 c#2 g#2 c#2 d3@2", I: "g2 g3 g2 g3@2 g3 g2@2 ~ g2 g3 g2 d2 g2 g3@2",
  J: "g2!2 g3 g2 e3 g2 d3@2 ~ g2 g3 g2 e3 g2 d3@2", K: "c3!2 c4 c3 a3 c3 g3@2 ~ c3 c4 c3 a3 c3 g3@2",
  L: "f2!2 f3 f2 d3 f2 c3@2 ~ f2 f3 f2 d3 f2 c3@2", M: "f2 f3!2 f2!2 f3@2 f3 f2 f3!2 f2 c3 c3@2 a#2",
  N: "a#2!5 a#2@2 a#2!5 f2!3 c3", O: "c2 c3!2 c2!2 c3@2 c3 c2 c3!2 c2!2 c3@2 c3", P: "a#2!5 a#2@2 a#2!5 a2!3 d3",
  Q: "d2 d3!2 d2!2 d3@2 d3 d2 d3!2 d2!2 d3@2 d3", R: "d3 d4 d3 d4@2 d4 d3@2 ~ d3 d4 d3 a2 d3 d4@2",
  S: "d#3 d#4 d#3 d#4@2 d#4 d#3@2 ~ d#3 d#4 d#3 a#2 d#3 d#4@2",
  T: "d#2 d#3 d#2 d#3@2 d#3 d#2@2 ~ d#2 d#3 d#2 a#1 d#2 a#2@2", U: "a2 a3 a2 a3@2 a3 a2@2 ~ a2 a3 a2 e2 a2 a3@2",
  V: "~ d3@2 d3@3 ~@2", W: "a2!2 a3 a2 f#3 a2 e3@2 ~ a2 a3 a2 f#3 a2 e3@2",
  X: "d3!2 d4 d3 b3 d3 a3@2 ~ d3 d4 d3 b3 d3 a3@2", Y: "c2 c3 c2 c3@2 c3 c2@2 ~ c2 c3 c2 g1 c2 c3@2",
  Z: "a#1 a#2 a#1 a#2@2 a#2 a#1@2 ~ a#1 a#2 a#1 f1 a#1 a#2@2", AA: "e2 e3 e2 e3@2 e3 e2@2 ~ e2 e3 e2 b1 e2 e3@2",
  AB: "c#2 c#3 c#2 c#3 c#2!2 c#3 c#2!2 c#3 c#2 c#3 c#2!2 c#3 c#2",
  AC: "d2 d3 d2 d3 d2!2 d3 d2 d#2 d#3 d#2 d#3 d#2!2 d#3 d#2", AD: "e2 e3 d#3 e3!2 e2!5 e3 e2!2 e3 d#3 e3",
  AE: "e3 e2!5 e3 e2!2 e3 e2!3 e3 d#3 e3", AF: "~@9 e4 b3 g#3 f3 e3 ~@2", AG: "~@9 e4 c4 a3 e3 c3 b2 a#2",
  AH: "a2 ~@15", AI: "~@9 e3 f3 g#3 b3 d4 ~@2", AJ: "~@9 e4 c4 a3 e3 d3 b2 c3", AK: "c#3 ~@15",
  AL: "~@9 g#3 a3 d4 f4 ~@3", AM: "~@9 e4 b3 g#3 e3 g#3 b3 d4", AN: "g4!4 ~@9 g4!3", AO: "a4!4 ~@9 a4!3",
  AP: "f4!4 ~@9 f4!3", AQ: "g4!4 ~@12", AR: "[[f4,a4,c5]@2 ~ [f4,a4,c5]@2 ~@2 c4 f4@2 c4@2 f4 a4@2 c5@2 ~@13 g4 g#4]/2",
  AS: "a4@2 f5 c5@2 a4@2 g5@2 d5@2 b4@2 a5@2 ~", AT: "~ g4 f#4 g4 a4 g4 f#4 g4 a#4 g4 f#4 g4 b4 g4 f#4 g4",
  AU: "c5 g4 f#4 g4 c#5 g4 f#4 g4 d5 g4 f#4 g4 a4 b4 c5 c#5", AV: "d5 e5 f5 f#5 g5 a5 a#5 b5 c6@2 ~@4 c6!2",
  AW: "[a3,a4], a5 ~@7", AX: "[c4,c5] ~@7",
})).s("gm_synth_brass_1").gain(0.64).pan(0.8)

// bass · synth bass 1 · "bass"
const bass = note(`<
  ~ A B A B A C D E F G H I J K L M N O P Q R S A T U V W X Y Z AA AB AC AA@2 AB AC AD@4 A C D E F G H I J K L M N O P Q
  R S A T U V W X Y Z AA AB AC AA@2 AB AC AE@4 AF AG AH AI AJ AK AL AM AN AF AO AP AQ AR AS AT AU AV AW AX AV@2 AW AX
  AV@2 AW AX AV AY AZ ~ BA BB BC ~@12 BD@2 BE@2 BD@2 BE@2 BF@4 BG BH BI BJ BK BL BM BN BO BP@2 BQ BR BS BT BQ BR BS BT
  BU BV BW BX BY BZ CA CB CC CD CE CF CG CH@3 CI CJ CK AC AA@2 CK AC AA CL CM CN ~@2 CO CH@3 CI CJ CK AC AA@2 CK AC AA
  CL CM CN ~@2 CO CP BQ BR BS BT BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF CG CQ
>`.pickRestart({
  A: "f3@3 f2@2 ~@6 f3 c3@2 f3@2", B: "f2@3 f2@2 ~@6 c3 f3@2 c3@2", C: "c3@3 c2@2 ~@6 c3 c3@2 g#2@2",
  D: "c#3@3 c#2@2 ~@6 c#3 g#2@2 c#3@2", E: "g#2@3 g#2@2 ~@4 g#2@2 g#2 g#2@2 g#2@2",
  F: "a#2@3 a#2@2 ~@3 a#2 a#2@2 a#2 a#2@2 g#2@2", G: "f#2@3 f#2@2 ~@6 f#2 f#2@2 f#2@2", H: "c3@3 c2@2 ~@6 c3 g2@2 c3@2",
  I: "c2@3 c2@2 ~@4 g2@2 g2 c3@2 c3@2", J: "f3@3 f2@2 ~@4 f3@2 f3 c3@2 f3@2", K: "c3@3 c2@2 ~@4 c3@2 c3 c3@2 g2@2",
  L: "c#3@3 c#2@2 ~@5 c#3!2 g#2@2 c#3@2", M: "g#2@3 g#2@2 ~@4 d#3@2 d#3 g#3@2 g#2@2",
  N: "a#2@3 a#2@2 ~@6 a#2 g#2@2 c#3@2", O: "f#2@3 f#2@2 ~@6 f#2 f#3@2 f#2@2", P: "c3@3 c2@2 ~@6 c3 c3@2 c3@2",
  Q: "c2@3 c2@2 ~@3 c3@2 c3@2 a#2@2 a#2@2", R: "g#3@3 g#2@2 ~@4 g#3@2 g#3 g#2@2 g#3@2",
  S: "d#3@3 d#2@2 ~@4 d#3@2 d#3 d#3@2 a#2@2", T: "c#3@3 c#3@2 ~@6 c#3@3 g#2@2", U: "g2@3 g2@2 ~@4 g3@2 g3 d3@2 g3@2",
  V: "g2@3 g2@2 ~ g2@2 g2@8", W: "~@12 c2!4", X: "c2@3 c2@2 ~@7 c2@2 c2@2", Y: "c2@3 c2@2 ~@7 c2!4",
  Z: "c2@3 c2@2 ~@3 c2@2 c2@4 c2@2", AA: "g2@3 d3@4 g2@2 ~@7", AB: "c3@3 g3@4 c3@2 ~@6 e2", AC: "f2@3 c3@4 f2@2 ~@6 f2",
  AD: "[g2@3 d3@4 g2@2 ~@3 c3@3 f2@5 ~@8 c3@3 a#2@5 ~@4 a#2@4 f2@3 c2@9 ~@8]/4",
  AE: "[g2@3 d3@4 g2@2 ~@3 c3@3 f2@5 ~@8 c3@3 a#2@5 ~@4 c3@4 a2@3 d3@5 ~@12]/4", AF: "g3@3 g2@2 ~@6 g3 d3@2 g3@2",
  AG: "d3@3 d2@2 ~@6 a2 d3@2 a2@2", AH: "d#3@3 d#2@2 ~@3 d#3 d#3@2 d#3 a#2@2 d#3@2",
  AI: "a#2@3 a#2@2 ~@4 a#2@2 a#2 a#2@2 a#2@2", AJ: "c3@3 c2@2 ~@6 c3 c3@2 a#2@2", AK: "g#2@3 g#2@2 ~@6 g#2 g#2@2 g#2@2",
  AL: "d3@3 d2@2 ~@3 d3 d3@2 d3 a2@2 d3@2", AM: "a#2@3 a#1@2 ~@6 a#2 a#2@2 a#2@2", AN: "f3@3 f2@2 ~@6 c3 f3@2 c3@2",
  AO: "d#3@3 d#3@2 ~@6 d#3 d#3@2 a#2@2", AP: "a2@3 a2@2 ~@6 a2 e3@2 a3@2", AQ: "a2@3 a2@2 ~@3 a2@3 a2@2 ~@3",
  AR: "d2@4 ~@8 d2!4", AS: "d2@3 d2@2 ~@7 d2@2 d2@2", AT: "d2@3 d2@2 ~@7 d2!4", AU: "d2@3 d2@2 ~@3 d2@2 d2@2 d2@2 d2@2",
  AV: "a2@3 e3@4 a2@2 ~@7", AW: "d3@3 a3@4 d3@2 ~@6 f#2", AX: "g2@3 d3@4 d3@2 ~@6 g2", AY: "g2@2 ~ g2@2 ~@11",
  AZ: "~@2 c#2@3 d#2@3 e2@3 f2@3 a2@2", BA: "~@13 f2@3", BB: "f2@3 g2@3 g#2@3 a2@3 ~@2 d2!2", BC: "d2 ~@7", BD: "c2/2",
  BE: "a#1/2", BF: "g2/2", BG: "a2@3 a2@3 a2@2 ~@6 a2!2", BH: "a2@3 a2@3 a2@2 ~@8", BI: "g2@3 g2@3 g2@2 ~@6 g2!2",
  BJ: "g2@3 g2@3 g2@2 ~@6 e2!2", BK: "e2@3 e2@3 e2!2 e2@3 e2@3 e2!2", BL: "e2@3 e2@3 e2!2 e2@3 e2@3 a2 b2",
  BM: "e2@3 e2@3 e2!2 e2@3 e2@3 e2@2", BN: "c#2@3 c#2@3 c#2@2 c#2@3 c#2 c#2@2 c#2@2",
  BO: "d2@3 d2@3 d2@2 d#2@3 d#2@3 d#2@2", BP: "e2@3 e2@3 e2@2 ~@8", BQ: "a2@3 e2@4 a2", BR: "b2@3 e2@4 e2",
  BS: "b2@3 e2@4 g#2", BT: "a2@3 e2@4 e2", BU: "a2@3 e3@4 a2", BV: "d3@3 d2@4 a2", BW: "b2@3 f#2@4 d#3",
  BX: "e3@3 e2@5", BY: "c2@3 c2@2 ~@7 c2@2 c2!2", BZ: "c2@3 c2@2 ~@7 c2 ~@2 c2", CA: "c2@3 c2@2 ~@4 c2@4 c2@3",
  CB: "c2@3 c2@2 ~@7 g2!4", CC: "a2@3 a2@2 ~@4 a2@4 a2@2 a2", CD: "d2@3 d2@2 ~@4 d2!3 e2@2 d2@2",
  CE: "g2@3 g2@2 ~@10 g2", CF: "g2@3 g2@2 ~@9 g2@2", CG: "g2@3 g2@2 ~@5 g2@2 g2@3 g2",
  CH: "c2@3 c2 c2@3 c2 c2@2 c2!2 c2@2 c2!2", CI: "c2@3 c2 c2@3 c2 c2@2 c2!2 c2@2 ~@2", CJ: "g2@3 d3@3 g2@3 ~@7",
  CK: "c3@3 g3@4 c3@2 ~@7", CL: "f2@3 f2@2 ~@11", CM: "~@2 b2@3 c#3@3 d3@3 d#3 ~@4", CN: "f2@2 ~@4 g2@2 ~@5 f2@2 ~",
  CO: "~@5 c2@3", CP: "a2", CQ: "c3 ~@7",
})).s("gm_synth_bass_1").gain(0.64).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@7 B A@3 C A@3 C A@3 C A@3 C A C D E D F G@8 H@2 I A@3 B A@3 C A@3 C A@3 C A@3 C A C D E D F G@8 H@2 I A@5 J A@4
  G@2 D K D L A@7 M A@4 N O A P@2 Q A@3 R A@8 S A@3 T A@3 T A@3 T A@3 T A T A@2 T U@2 A@12 V K W D A@4 X T@4 A@8 Y Z AA
  AB@2 AC T@4 A@8 Y Z AA AB@2 AC ~ A@12 V K W D A@4 X AD
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x!2 ~@3 x ~@2 x", C: "x ~@2 x!2 ~@2 x!2 ~@6 x",
  D: "x ~@2 x!2 ~@7 x!4", E: "x ~@2 x!2 ~@7 x ~ x ~", F: "x ~@2 x!2 ~@2 x!2 ~@7", G: "x ~@2 x ~@3 x!2 ~@2 x!2 ~@2 x",
  H: "~@4 x ~@3 x ~@3 x ~@2 x", I: "~ x!3", J: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3", K: "x ~@2 x!2 ~@7 x ~@2 x",
  L: "x ~@2 x ~ x ~ x ~@8", M: "x ~@2 x ~@3 x!2 ~@2 x!2 ~@3", N: "x ~@2 x ~@4 x ~@3 x ~@2 x",
  O: "x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~", P: "x ~@2 x!2 ~@2 x!2 ~ x ~@2 x ~@2", Q: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  R: "x ~@2 x!2 ~@2 x!2 ~ x ~ x ~@2 x", S: "x ~@3 x ~@3 x ~@2 x!2 ~@3", T: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x!2",
  U: "x ~@2 x ~@2 x!3 ~@2 x!2 ~@2 x", V: "x ~@2 x!2 ~@7 x ~ x!2", W: "x ~@2 x!2 ~@4 x ~@3 x ~@2",
  X: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x", Y: "x ~@2 x ~@12", Z: "~@2 x ~@2 x ~ x ~ x ~@6", AA: "x ~@5 x ~@6 x ~@2",
  AB: "~ x ~ x", AC: "~ x ~@2", AD: "x",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct(`<
  A B ~@7 B ~@3 B ~ B ~@2 B C ~ B ~ C ~ C ~@20 B ~@3 B ~ B ~@2 B C ~ B ~ C ~ C ~@16 B@2 ~ B ~@2 B ~@143
>`.pickRestart({
  A: "~@6 x!5 ~ x!4", B: "~@11 x!2 ~@3", C: "~@11 x ~@4",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A ~@3 B ~@3 B ~@2 C D ~@3 D ~@3 D ~@3 D ~ D ~@3 E F@7 G H I J ~@3 B ~@2 C D ~@3 D ~@3 D ~@3 D ~ D ~@3 E F@7 G H I ~@3
  B ~@2 J ~@2 C B K@2 ~@4 F@3 L F@3 M F@4 N ~@4 O ~@3 P F@3 Q F@3 Q R ~@21 S@2 ~@20 T ~@3 U ~@7 V W X@4 Y ~@3 U ~@7 V W
  X@4 Y ~@21 T Z
>`.pickRestart({
  A: "x ~@10 x ~@4", B: "~@11 x ~ x!2 ~", C: "~@11 x ~@4", D: "~@9 x!6 ~", E: "~@7 x!2 ~@2 x!5", F: "~@4 x ~@6 x ~@4",
  G: "~@4 x ~@6 x ~@3 x", H: "~@12 x ~@2 x", I: "~@8 x ~@3 x ~@2 x", J: "~@11 x!5", K: "x!5 ~ x!9 ~",
  L: "~@4 x ~@6 x ~ x ~@2", M: "~@4 x ~@6 x!5", N: "x ~@2 x ~@12", O: "~@10 x!3 ~ x!2", P: "~@6 x ~@2 x ~ x ~ x!3",
  Q: "~@4 x ~@6 x ~@2 x ~", R: "x ~ x!7 ~ x!5 ~", S: "x ~@2 x ~@2 x ~@4 x!2 ~@3", T: "~@2 x!4 ~ x ~ x!7", U: "~@9 x!7",
  V: "~@4 x ~@3 x!2 ~ x!5", W: "x ~@2 x!13", X: "x!16", Y: "x!9 ~@7", Z: "x",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct(`<
  ~@3 A ~@3 A ~@3 A ~@5 A ~ A ~@3 A ~ A ~@18 A ~@3 A ~@5 A ~ A ~@3 A ~ A ~@24 A ~@141
>`.pickRestart({
  A: "~@3 x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A ~@37 B@3 ~@34 B@3 ~@91 C D@3 ~@8 C E@2 F@2 G C D@3 ~@8 C E@2 F@2 G ~@23
>`.pickRestart({
  A: "x ~ x!2 ~@12", B: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", C: "~ x!2 ~ x!12", D: "x!3 ~ x!12", E: "x!16", F: "x!4",
  G: "x ~@3 x ~@9 x!2",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@187 [~@3 x] ~@17 [~@3 x] ~@23>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~@4 A@8 ~ A@5 B A B A C@4 D@8 ~@7 A@8 ~ A@5 B A B A C@4 D@8 ~@31 C E F G@2 H F@32 ~@2 I@2 D ~ D ~ D ~ D ~ D ~
  D@3 ~@8 C ~@3 D@8 ~@5 J C ~@3 D@8 ~@5 J ~ D ~ D ~ D ~ D ~ D ~ D@3 ~@9
>`.pickRestart({
  A: "~@3 x!2 ~@11", B: "x ~@2 x!2 ~@11", C: "x ~@2 x ~@12", D: "x", E: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  F: "~@3 x ~@12", G: "~@3 x ~@9 x ~@2", H: "x ~@2 x ~@2 x ~@2 x ~@6", I: "~@3 x ~@2 x ~@9", J: "~ x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@228 x>").gain(0.8)

// drums · ride
const ride = s("rd").struct(`<
  ~@31 A@8 ~@29 A@8 ~@3 B@12 ~@4 A@7 ~ A@4 ~@67 A@7 C D E F ~@7 A@7 C D E F ~@26
>`.pickRestart({
  A: "~ x!7", B: "~@3 x!2 ~@11", C: "~ x!5 ~@2", D: "x ~@2 x ~@12", E: "~@2 x ~@2 x ~ x ~ x ~@6",
  F: "x ~@5 x ~@6 x ~@2",
})).gain(0.8)

// drums · cowbell
const cowbell = s("cb").struct(`<
// … 26 more lines

More by Jean Michel Jarre