Strudelify
Calypso, Part 2 cover art

En attendant Cousteau / Waiting for Cousteau

Calypso, Part 2

Jean Michel Jarre

KeyE♭ majorTempo90 bpm
0:00/0:00
// Calypso, Part 2 — Jean Michel Jarre
// 90 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: duplicate parts dropped: ch 6 "Bass Synth. 3" synth strings 2 (copy of ch 5 "Bass Synth. 2" synth strings 2, 0.5 beats late)
// note: Full arrangement: all 123 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · steel drums · "Synth. 1" · Eb5 Db5 Eb5 Db5 Eb5
const steel_drums = note(`<
  ~@82
  [~@30 [bb4,eb5]@2 [ab4,db5]@2 ~ [bb4,eb5]@2 [bb4,eb5]@2 [bb4,eb5]@2 [ab4,db5]@2 ~ [bb4,eb5]@2 [bb4,eb5]@2]
  [[bb4,eb5] ~@23]
  ~@39
>`).s("gm_steel_drums").gain(0.56).pan(0.6)

// chords · steel drums · "Synth. 1" · soft notes · Eb5 Db5 Eb5 Db5 Eb5
const steel_drums_soft = note(`<
  ~@83
  [~@18 [bb4,eb5]@2 [ab4,db5]@2 ~ [bb4,eb5]@2 [bb4,eb5]@2 [bb4,eb5]@2 [ab4,db5]@2 ~ [bb4,eb5]@2 [bb4,eb5]@2 [bb4,eb5]@2 ~@10]
  ~@39
>`).s("gm_steel_drums").gain(0.24).pan(0.6)

// other · orchestra hit · "Synth. 1" · Gb Ab Bb
const orchestra_hit = note(`<
  ~@94
  [~@12 [gb3,gb4]@5 [gb3,gb4]@2 [gb3,gb4]@2 ~@2 [ab3,ab4]@5 [ab3,ab4]@2 [ab3,ab4]@2 ~@7 [bb3,bb4]@5 ~@4]
  ~@28
>`).s("gm_orchestra_hit").gain(0.64).pan(0.6)

// other · synth strings 2 · "Synth. 2"
const synth_strings_2 = note("<~@48 A@2 B ~@8 A@3 C ~@8 A@3 D@2 ~@47>".pickRestart({
  A: "eb6 bb5 db6 eb6!2 bb5 db6 eb6!2 bb5 db6 eb6!2 bb5 db6 eb6", B: "eb6 bb5 db6 eb6!2 ~@11", C: "db5 ~",
  D: "[db6@7 ~]/2",
})).s("gm_synth_strings_2").gain(0.64).pan(0.9)

// other · steel drums · "Synth. 2"
const steel_drums_2 = note("<~@79 A B@6 C@3 D@2 E F@2 E B@3 G@3 H@3 I@3 J@9 K@3 ~@4>".pickRestart({
  A: "~@12 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2",
  B: "[eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2]/3",
  C: "[eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 eb5@2 ~ eb5@2 ~@2 eb5@2 eb5@2 ~@3 eb5@2 ~@5 eb5@2 ~@11 eb5@2 eb5@2 ~ eb5@2 ~@2 eb5@2 eb5@2 ~@3 eb5@2 ~@18]/3",
  D: "[eb5@5 eb5@2 db5@4 db5@2 ~ bb4@4 db5@5 ~@2 bb4@4 bb4@2 ~ db5@4 eb5@5 eb5@2 db5@4 db5@2 ~ bb4@4 db5@5 ~@2 bb4@4 bb4@2 ~ db5@4 eb5@5 eb5@2 db5@4 db5@2 ~ bb4@4 db5@5 ~]/2",
  E: "~ bb4@4 bb4@2 ~ db5@4 eb5@5 eb5@2 db5@4 db5@2 ~ bb4@4 db5@5 ~@2 bb4@4 bb4@2 ~ db5@4",
  F: "[~@36 eb5@5 eb5@2 db5@4 db5@2 ~ bb4@4 db5@5 ~@2 bb4@4 bb4@2 ~ db5@4 eb5@5 eb5@2 db5@4 db5@2 ~ bb4@4 db5@5 ~]/2",
  G: "[eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@3 eb5@2 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 eb5@2 ~@5 eb5@2 ~@2 bb4@2 ~ db5@2 ~@2 ab4@2 gb4@2 ~ db4@2 gb4@2 eb4@2 db4@2 ~ gb3@2 ab3@2]/3",
  H: "[bb4@5 ~@2 bb4@4 db5@2 ~ eb5@4 bb4@5 bb4@2 bb4@4 db5@2 ~ eb5@4 bb4@5 ~@2 bb4@4 db5@2 ~ eb5@4 bb4@5 bb4@2 bb4@4 db5@2 ~ eb5@4 bb4@5 ~@2 bb4@4 db5@2 ~ eb5@4 [bb4,eb5]@5 bb4@2 bb4@4 db5@2 ~ eb5@4 bb4@5 ~@2 bb4@4 db5@2 ~ eb5@4 [bb4,eb5]@5 bb4@2 bb4@4 db5@2 ~ eb5@4]/3", // Eb5
  I: "[bb4@5 ~@2 bb4@4 db5@2 ~ eb5@4 [bb4,eb5]@5 bb4@2 bb4@4 db5@2 ~ eb5@4 bb4@5 ~@2 bb4@4 db5@2 ~ eb5@4 [bb4,eb5]@5 bb4@2 bb4@4 db5@2 ~ eb5@4 eb5@2 eb5@2 ~ eb5@2 ~@2 eb5@2 eb5@2 ~@3 eb5@2 ~@5 eb5@2 ~@4 ab4@2 ~ eb4@2 gb4@2 ab4@2 a4@2 ~ bb4@2 db5@2 eb5@2 ab5@2 ~ eb5@2 gb5@2 ab5@2 a5@2 ~ bb5@2 db6@2 eb6@2 eb5@2 ~@5]/3", // Eb5
  J: "[eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4]/3",
  K: "[eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@5 ~@42]/3",
})).s("gm_steel_drums").gain(0.48)

// other · steel drums · "Synth. 2" · soft notes
const steel_drums_soft_2 = note("<~@118 A B@3 ~>".pickRestart({
  A: "~@5 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4",
  B: "[eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4 eb5@5 eb5@2 eb5@4 bb4@2 ~ db5@4]/3",
})).s("gm_steel_drums").gain(0.16)

// other · lead 2 sawtooth · "Bass Synth. 1"
const lead_2_sawtooth = note(`<
  A@6 B@5 C@8 D@4 E@5 F G@2 F G@2 F E@5 F G@2 H G@2 F I ~@2 J@2 F I K F L@2 M N ~@2 J@2 F G@2 M O@2 F N ~@51
>`.pickRestart({
  A: "[~ ab3@11]/6", B: "[~ bb3@39]/5", C: "[~@3 eb3@63 eb3@18 gb3@18 eb3@18 bb3@8]/8",
  D: "[~ db4@9 c4@9 ab3@9 eb3@18 gb3@18]/4", E: "[eb3@15 bb3@3 db4@2]/5", F: "c4 ab3", G: "[eb3@3 bb3@3 db4@2]/2",
  H: "c4 eb4", I: "bb3", J: "[~@3 bb3@3 db4@2]/2", K: "bb3 db4", L: "[bb3@2 bb3@3 bb3 db4@2]/2", M: "c4 db4", N: "eb3",
  O: "[eb4@3 bb3@3 db4@2]/2",
})).s("gm_lead_2_sawtooth").gain(0.17)

// other · woodblock · "Bass Synth. 1"
const woodblock = note("<~@77 A@3 B@6 C@3 B@3 A@3 B@9 D@3 B@3 E@3 B@3 F@3 ~@4>".pickRestart({
  A: "[~@36 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2]/3",
  B: "[eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2]/3",
  C: "[eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 eb4@2 ~ eb4@2 ~@2 eb4@2 eb4@2 ~@3 eb4@2 ~@5 eb4@2 ~@11 eb4@2 eb4@2 ~ eb4@2 ~@2 eb4@2 eb4@2 ~@3 eb4@2 ~@5 eb4@2 ~@11]/3",
  D: "[eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 eb4@2 ~ eb4@2 ~@2 eb4@2 eb4@2 ~@3 eb4@2 ~@5 eb4@2 ~@4 ab3@2 ~ eb3@2 gb3@2 ab3@2 a3@2 ~ bb3@2 db4@2 eb4@2 ab4@2 ~ eb4@2 gb4@2 ab4@2 a4@2 ~ bb4@2 db5@2 eb5@2 eb5@2 ~@5]/3",
  E: "[eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@38]/3",
  F: "[eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@45]/3",
})).s("gm_woodblock").gain(0.48)

// other · woodblock · "Bass Synth. 1" · soft notes
const woodblock_soft = note("<~@77 A ~@40 B C@3 ~>".pickRestart({
  A: "eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@14",
  B: "~@5 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2",
  C: "[eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@5 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 bb3@2 ~ db4@2 ~@2]/3",
})).s("gm_woodblock").gain(0.16)

// bass · synth strings 2 · "Bass Synth. 2"
const bass = note("<~ A@5 B@5 C@8 ~@17 D E F ~@9 D E G@8 ~@2 D E G@8 ~@2 D E F H I J@3 ~@43>".pickRestart({
  A: "[~ ab2@7]/5", B: "[~ bb2@39]/5", C: "[~@3 eb2@125]/8", D: "gb2", E: "ab2", F: "eb2", G: "eb2/8", H: "b1",
  I: "db2", J: "eb2/3",
})).s("gm_synth_strings_2").gain(0.8).pan(1)

// other · lead 2 sawtooth · "Bass Synth. 2"
const lead_2_sawtooth_2 = note("<~@84 A B C@3 D@2 E F@3 G H I J K L M@2 N O@3 P@2 Q P@2 R S@3 T@3 ~@4>".pickRestart({
  A: "~@26 eb3@2 ~ eb4@2 eb3@2 eb3@2 eb4@2 ~ eb3@2 eb3@2 eb4@2 eb3@2 ~@2",
  B: "~@32 eb4@2 ~ eb3@2 eb3@2 eb4@2 eb3@2 ~ eb3@2 eb4@2",
  C: "[~@20 eb3@2 ~ eb4@2 eb4@2 eb3@2 eb4@2 ~@5 eb4@2 eb3@2 ~ eb4@2 eb4@2 eb3@2 eb3@2 ~ eb3@2 eb3@2 eb4@2 eb3@2 ~ eb4@2 eb4@2 eb3@2 eb3@2 ~ eb3@2 eb3@2 eb3@2 eb3@2 ~ eb3@2 ~@2 eb3@2 eb3@2 ~@3 eb3@2 ~@5 eb3@2 ~@11 eb3@2 eb3@2 ~ eb3@2 ~@2 eb3@2 eb3@2 ~@3 eb3@2 ~@5 eb3@2 ~@11]/3",
  D: "[eb3@2 eb4@2 ~@3 eb4@2 ~@2 eb3@2 ~ eb4@2 eb4@2 eb3@2 eb4@2 ~@3 eb3@2 eb4@2 eb3@2 ~ eb3@2 eb3@2 eb3@2 eb4@2 ~@3 eb4@2 ~@2 eb3@2 ~ eb4@2 eb4@2 eb3@2 eb4@2 ~@3 eb3@2 eb4@2 eb3@2 ~ eb3@2 eb3@2 eb3@2 eb4@2 ~@3 eb4@2 ~@2 eb3@2 ~ eb4@2 eb4@2 eb3@2 eb4@2 ~@2]/2",
  E: "~ eb3@2 eb4@2 eb3@2 ~ eb3@2 eb3@2 eb3@2 ~@16 eb3@2 eb4@2 ~@3 eb4@2 ~@2 eb4@2 ~ eb4@2 ~@2",
  F: "[~@14 [eb3,eb4]@5 ~@28 eb3@2 ~ eb4@2 eb3@2 eb3@2 eb4@2 ~@3 eb3@2 eb4@2 ~@25 eb4@2 eb5@2 ~ eb4@2 eb4@2 eb5@2 ~@7 [gb4,gb5]@5 [gb4,gb5]@2 [gb4,gb5]@2 ~@2 [ab4,ab5]@5 [ab4,ab5]@2 [ab4,ab5]@2 ~@7 [bb4,bb5]@5 ~@4]/3", // Eb Gb Ab Bb
  G: "~@2 eb5@2 ~ eb4@2 eb4@2 eb5@2 eb4@2 ~@3 eb5@2 ~@2 eb5@2 ~@16 eb5@2 ~ eb4@2 eb4@2 eb5@2 ~",
  H: "~@8 eb5@2 ~@16 eb5@2 ~ eb4@2 eb4@2 eb5@2 ~@9 eb5@2 ~@2",
  I: "~ eb5@2 eb5@2 ~@3 eb5@2 ~@4 eb5@2 ~ eb4@2 eb4@2 eb5@2 eb5@2 ~@3 eb5@2 ~@18",
  J: "~@5 eb4@2 eb4@2 ~@2 eb4@2 ~@3 eb4@2 eb4@2 ~@9 bb4@2 ~ db5@2 eb5@4 eb5@2 ~ db5@2 bb4@2 ~@3",
  K: "~@17 eb4@2 ~@3 eb4@2 eb4@2 ~@3 eb4@2 eb4@2 ~@2 eb4@2 ~@11",
  L: "~@14 db4@2 ~@3 db4@2 db4@2 db4@2 ~ db4@2 db4@2 ab3@2 gb3@2 ~ db3@2 gb3@2 eb3@2 db3@2 ~ gb2@2 ab2@2",
  M: "[~@9 eb4@2 eb4@2 ~@7 eb4@5 eb4@2 eb4@2 eb4@2 ~ eb4@5 ~@8 eb4@2 eb4@2 ~@7 eb4@5 eb4@2 eb4@2 eb4@2 ~ eb4@5 ~@8 eb4@2 eb4@2 ~@7 eb4@4]/2",
  N: "~ eb4@2 eb4@2 eb4@2 ~ eb4@5 ~@8 eb4@2 eb4@2 ~@7 eb4@5 eb4@2 eb4@2 eb4@2 ~ eb4@4",
  O: "[~@9 eb4@2 eb4@2 ~@7 eb4@5 eb4@2 eb4@2 eb4@2 ~ eb4@5 ~@8 eb4@2 eb4@2 ~@7 eb4@5 eb4@2 eb4@2 eb4@2 ~ eb4@4 eb3@2 eb3@2 ~ eb3@2 ~@2 eb3@2 eb3@2 ~@3 eb3@2 ~@5 eb3@2 ~@47]/3",
  P: "[eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@4]/2",
  Q: "~ eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4",
  R: "~ eb5@4 eb5@2 ~ db5@4 eb5@2 eb5@5 eb5@4 eb5@2 ~ db5@4 [eb4,eb5]@2 [eb4,db5]@2 ~@5 [gb4,gb5]@2 [eb4,eb5]@2 ~@5", // Eb Eb7 Gb Eb
  S: "[~@2 eb4@2 ~ eb4@4 eb4@2 g3@2 ~ ab3@2 bb3@2 db4@2 eb4@5 db4@2 c4@2 bb3@2 ~@7 eb3@2 ~ eb4@2 eb3@2 eb4@2 g3@2 ~ ab3@2 bb3@2 db4@2 eb4@5 db4@2 c4@2 bb3@2 ~@5 eb3@2 eb4@5 eb4@2 e3@2 ab3@2 ~ bb3@2 ~@2 eb3@2 eb4@2 ~ eb5@2 eb3@2 eb4@2 eb5@2 ~ eb3@2 eb4@2 eb5@2 eb3@5 ab3@2 g3@2 ab3@2 ~ bb3@2 eb3@2 eb3@2 ~@7 eb3@2 eb4@2 ~ eb5@2 eb3@2]/3",
  T: "[~@2 eb4@2 ~ eb4@4 eb4@2 g3@2 ~ ab3@2 bb3@2 db4@2 eb4@5 db4@2 c4@2 bb3@2 ~@7 eb3@2 ~ eb4@2 eb3@2 eb4@2 g3@2 ~ ab3@2 bb3@2 db4@2 eb4@5 db4@2 c4@2 bb3@2 ~@5 eb3@2 eb4@5 eb4@2 e3@2 ab3@2 ~ bb3@2 ~@2 eb3@2 eb4@2 ~ eb5@2 eb3@2 eb4@2 ~@43]/3",
})).s("gm_lead_2_sawtooth").gain(0.48)

// other · lead 2 sawtooth · "Bass Synth. 2" · soft notes
const lead_2_sawtooth_soft = note("<~@118 A B@3 ~>".pickRestart({
  A: "~@5 eb5@2 ~ eb3@2 eb4@2 eb5@2 eb3@5 ab3@2 g3@2 ab3@2 ~ bb3@2 eb3@2 eb3@2 ~@7 eb3@2 eb4@2 ~ eb5@2 eb3@2",
  B: "[~@2 eb4@2 ~ eb4@4 eb4@2 g3@2 ~ ab3@2 bb3@2 db4@2 eb4@5 db4@2 c4@2 bb3@2 ~@7 eb3@2 ~ eb4@2 eb3@2 eb4@2 g3@2 ~ ab3@2 bb3@2 db4@2 eb4@5 db4@2 c4@2 bb3@2 ~@5 eb3@2 eb4@5 eb4@2 e3@2 ab3@2 ~ bb3@2 ~@2 eb3@2 eb4@2 ~ eb5@2 eb3@2 eb4@2 eb5@2 ~ eb3@2 eb4@2 eb5@2 eb3@5 ab3@2 g3@2 ab3@2 ~ bb3@2 eb3@2 eb3@2 ~@7 eb3@2 eb4@2 ~ eb5@2 eb3@2]/3",
})).s("gm_lead_2_sawtooth").gain(0.16)

// bass · synth bass 1 · "Bass Synth. 3"
const bass_2 = note("<~@89 A@3 B C D E C D E C F G H@2 G I J G H@2 G K@2 L M N L M O ~@4>".pickRestart({
  A: "[eb2@2 eb2@5 eb2@2 eb2@2 eb2@2 ~@7 eb2@2 ~ eb2@2 eb2@2 ~@5 eb2@2 eb2@2 eb2@2 eb2@5 eb2@2 eb2@2 eb2@2 ~@7 eb2@2 ~ eb2@2 eb2@2 ~@5 eb2@2 eb2@2 eb2@2 eb2@5 eb2@2 eb2@2 eb2@2 ~@7 eb2@2 ~ eb2@2 eb2@2 ~@5 eb2@2 eb2@2 eb2@2 eb2@5 eb2@2 eb2@2 eb2@2 ~@7 eb2@2 ~ eb2@2 eb2@2 ~@5 eb2@2 eb2@2]/3",
  B: "~@36 eb2@2 ~@5 eb2@2 ~@3", C: "~@6 eb2@2 eb2@2 ~@3 eb2@2 ~@9 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@2",
  D: "~ eb2@2 ~@9 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@9",
  E: "eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@9 eb2@2 ~@5 eb2@2 ~@3",
  F: "~ eb2@2 ~@7 eb2@2 eb2@5 ~@6 eb2@2 ~ eb2@2 ~@20", G: "eb2@5 ~@15 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2 eb2@5 ~@7",
  H: "[~@8 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2 eb2@5 ~@15 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2 eb2@5 ~@15 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2]/2",
  I: "~@8 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2 ~@24", J: "~@23 eb2",
  K: "[~@8 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2 eb2@5 ~@15 eb2@2 ~ eb2@2 eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@7 eb2@2 eb2@5 ~@4 eb2@5 ~@4]/2",
  L: "eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@3",
  M: "~@6 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@2",
  N: "~ eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2", O: "~ eb2@2 ~@45",
})).s("gm_synth_bass_1").gain(0.64)

// bass · synth bass 1 · "Bass Synth. 3" · soft notes
const bass_soft = note(`<
  ~@118
  [~@10 eb2@2 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2]
  [eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@3]
  [~@6 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@2]
  [~ eb2@2 ~@7 eb2@2 eb2@2 ~@5 eb2@2 ~@9 eb2@2 eb2@2 ~@3 eb2@2 ~@7 eb2@2]
  ~
>`).s("gm_synth_bass_1").gain(0.24)

// chords · steel drums · "Synth. 1 delay" · Eb5 Db5 Eb5 Db5 Eb5
const steel_drums_3 = note(`<
  ~@83
  [[bb4,eb5]@2 [ab4,db5]@2 ~ [bb4,eb5]@2 [bb4,eb5]@2 [bb4,eb5]@2 [ab4,db5]@2 ~ [bb4,eb5]@2 [bb4,eb5]@2 [bb4,eb5]@2 ~@28]
  ~@39
>`).s("gm_steel_drums").gain(0.4).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@38 A@36 B ~@12 C D E ~@2 F ~ G ~@6 H I J H K L H M J N O P Q R S Q T ~@5>".pickRestart({
  A: "x!4", B: "x", C: "~@24 x ~ x ~@2 x ~@3 x ~ x ~@4 x ~@7", D: "~@12 x ~ x ~@2 x ~@3 x ~ x ~@4 x ~@6 x ~@12",
  E: "x ~@6 x ~@40", F: "~@14 x ~@17 x ~ x ~ x ~ x ~@2 x ~@6", G: "~@12 x ~@4 x ~ x ~@3 x ~@4 x ~ x ~@8 x ~@8",
  H: "x ~@19 x ~@2 x ~@10 x ~ x ~@11", I: "~@6 x ~ x ~@4 x ~@8 x ~ x ~@19 x ~@2 x",
  J: "~@10 x ~ x ~@19 x ~@2 x ~@10 x ~", K: "~@8 x ~@2 x ~@12 x ~ x ~@2 x ~@3 x ~ x ~@4 x ~@3 x ~@3",
  L: "~ x ~ x ~ x ~@2 x ~ x ~ x ~@6 x ~@6 x ~@5 x ~@8 x ~@4 x ~", M: "~@8 x ~@2 x ~@10 x ~ x ~@19 x ~@2 x",
  N: "x ~@19 x ~@6 x ~@6 x ~ x ~@11", O: "~@8 x ~@6 x ~@6 x ~ x ~@19 x ~@3",
  P: "~@3 x ~@6 x ~ x ~@8 x ~@6 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~",
  Q: "x ~@6 x ~@10 x ~ x ~@4 x ~@8 x ~ x ~@6 x ~@4", R: "~@6 x ~ x ~@4 x ~@8 x ~ x ~@6 x ~@10 x ~ x ~@3",
  S: "~ x ~@8 x ~ x ~@6 x ~@10 x ~ x ~@4 x ~@8 x ~", T: "~@6 x ~ x ~@4 x ~@8 x ~ x ~@6 x ~@16",
})).gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@117
  [~@21 x!2 ~]
  [~ x ~@8 x ~ x ~@6 x ~@10 x ~ x ~@4 x ~@8 x ~]
  [x ~@6 x ~@10 x ~ x ~@4 x ~@8 x ~ x ~@6 x ~@4]
  [~@6 x ~ x ~@4 x ~@8 x ~ x ~@6 x ~@10 x ~ x ~@3]
  [~ x ~@8 x ~ x ~@6 x ~@10 x ~ x ~@4 x ~@8 x ~]
  ~
>`).gain(0.16)

// drums · snare
const snare = s("sd").struct(`<
  ~@36 A B C D@9 E F G@8 H G E I G@8 H J E F ~@13 K L M ~@2 N ~ O ~@6 P Q R P S T P Q U V W X P Q U P Q U P Q U ~
>`.pickRestart({
  A: "~ x!4 ~ x!3 ~ x!2 ~ x ~@2", B: "x ~ x!5 ~ x!5 ~@2 x", C: "~@8 x ~@2 x ~@4", D: "~@8 x ~@2 x!2 ~@3",
  E: "~ x!4 ~ x!3 ~@3 x!2 ~ x", F: "x ~ x!5 ~ x!5 ~ x!2", G: "~@4 x ~@3 x ~@2 x!2 ~@3", H: "~@4 x ~@3 x ~@2 x!2 ~ x!2",
  I: "x ~ x!4 ~ x!6 ~ x!2", J: "~ x!2 ~", K: "~@47 x", L: "~@12 x ~ x ~@2 x ~@3 x ~ x ~@4 x ~@6 x ~@12",
  M: "x ~@6 x ~@40", N: "x ~@6 x ~@6 x ~@33", O: "~@12 x ~@4 x ~ x ~@3 x ~@4 x ~ x ~@8 x ~@8", P: "~@3 x ~@5 x ~@5 x",
  Q: "~@4 x ~@10 x ~@17 x ~@6 x ~@7", R: "~@3 x ~@17 x ~ x ~@4 x ~@10 x ~@8",
  S: "~@15 x ~@8 x ~ x ~@2 x ~@3 x ~ x ~@4 x ~@3 x ~@3", T: "~ x ~@19 x ~@6 x ~@6 x ~@3 x ~@8",
  U: "~@3 x ~@17 x ~@6 x ~@10 x ~@8", V: "~@9 x ~@19 x ~@15 x ~@2", W: "~@17 x ~@15 x ~@14",
  X: "~@5 x ~@8 x ~@2 x ~ x ~@3 x ~@2 x ~@3 x ~ x ~@6 x ~ x ~@6",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct(`<
  ~@89
  [x ~@6 x ~@40]
  ~@2
  [x ~@6 x ~@40]
  ~
// … 50 more lines

More by Jean Michel Jarre