Strudelify

Equinoxe, Part 4

Jean Michel Jarre

KeyA minorTempo113 bpm
0:00/0:00
// Equinoxe, Part 4 — Jean Michel Jarre
// 113 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "Saw Ld" lead 2 sawtooth (copy of ch 5 "Saw Ld (echo)" lead 2 sawtooth, 0.427 beats early)
// note: Full arrangement: all 105 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/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 · synth strings 2 · "SynString2"
const synth_strings_2 = note(`<
  A@5 B C B D@2 B C@2 E@2 B C B D@2 B C F@2 G H@2 ~@6 I@4 J ~@6 I@4 J B C B K B C@2 E@2 B C B K B C F@2 G H@2 ~@6 I@4 J
  ~@6 I@4 J ~@6 I@7 L
>`.pickRestart({
  A: "[a4,c5,a5]/5", B: "[a4,c5]@3 [g4,b4]", C: "[a4,c5]@3 [b4,d5]", D: "[[f4,a4]@63 ~]/2", E: "[[c5,e5]@63 ~]/2",
  F: "[[a4,c5]@3 e4 [e4,a4]@4, ~@3 c4@2 ~@3]/2", G: "[e4,a4,c5]", H: "[[g4,a#4,c#5]@63 ~]/2",
  I: "a3@11 ~ a4@4 a3@11 ~ a4@4", J: "a3", K: "[f4,a4]", L: "a3@11 ~ a4@4 ~@16",
})).s("gm_synth_strings_2").gain(0.35)

// chords · synth strings 2 · "SynString2" · soft notes
const synth_strings_2_soft = note(`<
  ~@27 A@2 B@2 C@2 D@5 A@2 B@2 C@2 D@5 ~@20 A@2 B@2 C@2 D@5 A@2 B@2 C@2 D@5 A@2 B@2 C@2 E@4 F@4
>`.pickRestart({
  A: "[[d4,f4,a4]@63 ~]/2", B: "[[a#3,d4,f4]@63 ~]/2", C: "[g3,a#3,d4]/2", D: "[c#4,e4]/5", E: "[c#4,e4]/4",
  F: "[~@112 a3@11 ~@5, [c#4,e4]]/4", // C#m
})).s("gm_synth_strings_2").gain(0.1)

// chords · lead 2 sawtooth · "Saw Ld (echo)"
const lead_2_sawtooth = note(`<
  ~@27 A B@3 C D E@4 ~ F@5 D G@4 ~@21 H@4 I J K@3 L ~ M@3 N@2 O P@2 Q@2 ~ R@2 S@3 T U V@3 W@2 Q@2
>`.pickRestart({
  A: "~@3 [d6,f6] ~@2 [d6,f6] ~ [d6,f6]@2 ~ [d6,f6] ~@4 [e6,g6]@2 ~ [f6,a6]@2 ~@4 [d6,f6]@2 ~@4 [d6,f6]", // Dm Em F Dm
  B: "[~@3 [g6,a#6]@2 ~@4 [f6,a6]@2 ~@4 [e6,g6]@2 ~@2 [f6,a6]@2 ~@4 [e6,g6]@2 ~@4 [d6,f6]@2 ~@2 [a#5,d6] ~@2 [a#5,d6] ~ [a#5,d6]@2 ~ [a#5,d6]@2 ~@3 [c6,e6]@2 ~ [d6,f6]@2 ~@4 [a#5,d6]@2 ~@4 [a#5,d6]@2 ~@2 [e6,g6]@2 ~@4 [d6,f6] ~@5 [c6,e6]@2 ~@2 [d6,f6] ~@5 [c6,e6]@2 ~@4 [a#5,d6]]/3", // Gm F Em F Em Dm A# C …
  C: "~@3 [g5,a#5] ~@2 [g5,a#5] ~ [g5,a#5]@2 ~ [g5,a#5]@2 ~@3 [a5,c6]@2 ~ [a#5,d6]@2 ~@4 [g5,a#5] ~@6", // Gm Am A# Gm
  D: "~@3 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@4 [a5,c6]@2 ~@2 [a#5,d6]@2 ~@11", // Gm Am A#
  E: "[~@3 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@2 [f5,a5]@2 ~@4 [f5,a5]@2 ~@4 [f5,a5]@2 ~@2 [e5,g5] ~@5 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [d5,f5]@2 ~@4 [d5,f5]@2 ~@2 [f5,a5]@2 ~@4 [f5,a5] ~@5 [f5,a5]@2 ~@2 [e5,g5] ~@5 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [d5,f5]@2 ~@4 [d5,f5] ~@3 [c#5,e5]@2 ~@11]/4", // Gm F Em Dm F Em Dm C#m
  F: "[~@3 [d6,f6] ~@2 [d6,f6] ~ [d6,f6] ~@2 [d6,f6]@2 ~@3 [e6,g6] ~@2 [f6,a6]@2 ~@4 [d6,f6]@2 ~@4 [d6,f6]@2 ~@2 [g6,a#6] ~@5 [f6,a6]@2 ~@4 [e6,g6]@2 ~@2 [f6,a6]@2 ~@4 [e6,g6]@2 ~@4 [d6,f6]@2 ~@2 [a#5,d6] ~@2 [a#5,d6] ~ [a#5,d6]@2 ~ [a#5,d6]@2 ~@3 [c6,e6]@2 ~ [d6,f6] ~@5 [a#5,d6]@2 ~@4 [a#5,d6]@2 ~@2 [e6,g6]@2 ~@4 [d6,f6]@2 ~@4 [c6,e6] ~@3 [d6,f6]@2 ~@4 [c6,e6]@2 ~@4 [a#5,d6]@2 ~@2 [g5,a#5] ~@2 [g5,a#5] ~ [g5,a#5]@2 ~ [g5,a#5] ~@4 [a5,c6]@2 ~ [a#5,d6]@2 ~@4 [g5,a#5]@2 ~@5]/5", // Dm Em F Dm Gm F Em F …
  G: "[~@3 [g5,a#5] ~@5 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@2 [f5,a5]@2 ~@4 [f5,a5]@2 ~@4 [f5,a5]@2 ~@2 [e5,g5]@2 ~@4 [e5,g5] ~@5 [e5,g5]@2 ~@2 [d5,f5] ~@5 [d5,f5]@2 ~@4 [d5,f5]@2 ~@2 [f5,a5]@2 ~@4 [f5,a5]@2 ~@4 [f5,a5] ~@3 [e5,g5]@2 ~@4 [e5,g5] ~@5 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [e5,g5]@2 ~@4 [d5,f5]@2 ~@2 [c#5,e5]@2 ~@11]/4", // Gm F Em Dm F Em Dm Em …
  H: "[~@3 [d6,f6] ~@2 [d6,f6] ~ [d6,f6]@2 ~ [d6,f6]@2 ~@3 [e6,g6]@2 ~ [f6,a6]@2 ~@4 [d6,f6]@2 ~@4 [d6,f6]@2 ~@2 [g6,a#6]@2 ~@4 [f6,a6] ~@5 [e6,g6]@2 ~@2 [f6,a6] ~@5 [e6,g6]@2 ~@4 [d6,f6]@2 ~@2 [a#5,d6] ~@2 [a#5,d6] ~ [a#5,d6]@2 ~ [a#5,d6]@2 ~@3 [c6,e6]@2 ~ [d6,f6]@2 ~@4 [a#5,d6] ~@5 [a#5,d6]@2 ~@2 [e6,g6]@2 ~@4 [d6,f6]@2 ~@4 [c6,e6]@2 ~@2 [d6,f6]@2 ~@4 [c6,e6]@2 ~@4 [a#5,d6]]/4", // Dm Em F Dm Gm F Em F …
  I: "~@3 [g5,a#5] ~@2 [g5,a#5] ~ [g5,a#5] ~@2 [g5,a#5]@2 ~@3 [a5,c6] ~@2 [a#5,d6]@2 ~@4 [g5,a#5]@2 ~@5", // Gm Am A# Gm
  J: "~@3 [g5,a#5] ~@5 [g5,a#5]@2 ~@4 [a5,c6]@2 ~@2 [a#5,d6]@2 ~@11", // Gm Am A#
  K: "[~@3 [g5,a#5]@2 ~@4 [g5,a#5] ~@5 [g5,a#5]@2 ~@2 [f5,a5] ~@5 [f5,a5]@2 ~@4 [f5,a5]@2 ~@2 [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5] ~@3 [d5,f5]@2 ~@4 [d5,f5] ~@5 [d5,f5]@2 ~@2 [f5,a5]@2 ~@4 [f5,a5]@2 ~@4 [f5,a5]@2 ~@2 [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5]]/3", // Gm F Em Dm F Em
  L: "~@3 [d5,f5]@2 ~@4 [d5,f5]@2 ~@4 [d5,f5]@2 ~@2 [c#5,e5]@2 ~@11", // Dm C#m
  M: "[~@3 [d6,f6] ~@2 [d6,f6] ~ [d6,f6]@2 ~ [d6,f6]@2 ~@3 [e6,g6]@2 ~ [f6,a6] ~@5 [d6,f6]@2 ~@4 [d6,f6]@2 ~@2 [g6,a#6]@2 ~@4 [f6,a6]@2 ~@4 [e6,g6] ~@3 [f6,a6]@2 ~@4 [e6,g6]@2 ~@4 [d6,f6]@2 ~@2 [a#5,d6] ~@2 [a#5,d6] ~ [a#5,d6]@2 ~ [a#5,d6] ~@4 [c6,e6]@2 ~ [d6,f6]@2 ~@4 [a#5,d6]@2 ~@4 [a#5,d6]]/3", // Dm Em F Dm Gm F Em F …
  N: "[~@3 [e6,g6]@2 ~@4 [d6,f6]@2 ~@4 [c6,e6]@2 ~@2 [d6,f6]@2 ~@4 [c6,e6]@2 ~@4 [a#5,d6]@2 ~@2 [g5,a#5] ~@2 [g5,a#5] ~ [g5,a#5]@2 ~ [g5,a#5]@2 ~@3 [a5,c6]@2 ~ [a#5,d6]@2 ~@4 [g5,a#5]@2 ~@5]/2", // Em Dm C Dm C A# Gm Am …
  O: "~@3 [g5,a#5]@2 ~@4 [g5,a#5] ~@5 [a5,c6]@2 ~@2 [a#5,d6] ~@12", // Gm Am A#
  P: "[~@3 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@4 [g5,a#5] ~@3 [f5,a5]@2 ~@4 [f5,a5] ~@5 [f5,a5]@2 ~@2 [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [d5,f5]@2 ~@4 [d5,f5]]/2", // Gm F Em Dm
  Q: "[~@3 [f5,a5]@2 ~@4 [f5,a5]@2 ~@4 [f5,a5]@2 ~@2 [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5] ~@5 [e5,g5]@2 ~@4 [d5,f5]@2 ~@2 [c#5,e5]@2 ~@11]/2", // F Em Dm Em Dm C#m
  R: "[~@3 [d6,f6] ~@2 [d6,f6] ~ [d6,f6]@2 ~ [d6,f6]@2 ~@3 [e6,g6]@2 ~ [f6,a6]@2 ~@4 [d6,f6] ~@5 [d6,f6]@2 ~@2 [g6,a#6]@2 ~@4 [f6,a6]@2 ~@4 [e6,g6]@2 ~@2 [f6,a6]@2 ~@4 [e6,g6]@2 ~@4 [d6,f6]]/2", // Dm Em F Dm Gm F Em F …
  S: "[~@3 [a#5,d6] ~@2 [a#5,d6] ~ [a#5,d6] ~@2 [a#5,d6]@2 ~@3 [c6,e6] ~@2 [d6,f6]@2 ~@4 [a#5,d6]@2 ~@4 [a#5,d6]@2 ~@2 [e6,g6] ~@5 [d6,f6]@2 ~@4 [c6,e6]@2 ~@2 [d6,f6]@2 ~@4 [c6,e6]@2 ~@4 [a#5,d6]@2 ~@2 [g5,a#5] ~@2 [g5,a#5] ~ [g5,a#5]@2 ~ [g5,a#5]@2 ~@3 [a5,c6]@2 ~ [a#5,d6] ~@5 [g5,a#5]@2 ~@5]/3", // A# C Dm A# Em Dm C Dm …
  T: "~@3 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@4 [a5,c6] ~@3 [a#5,d6]@2 ~@11", // Gm Am A#
  U: "~@3 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@4 [g5,a#5]@2 ~@2 [f5,a5]@2 ~@4 [f5,a5]@2 ~@4 [f5,a5]", // Gm F
  V: "[~@3 [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [d5,f5]@2 ~@4 [d5,f5]@2 ~@2 [f5,a5] ~@2 [f5,a5] ~ [f5,a5]@2 ~ [f5,a5]@2 [f5,a5] ~@2 [f5,a5]@2 ~ [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [e5,g5] ~@5 [d5,f5]@2 ~@2 [c#5,e5] ~@12]/3", // Em Dm F Em Dm Em Dm C#m
  W: "[~@3 [g5,a#5] ~@2 [g5,a#5] ~ [g5,a#5]@2 ~ [g5,a#5]@2 [g5,a#5]@2 ~ [g5,a#5] ~@2 [f5,a5]@2 ~@4 [f5,a5] ~@5 [f5,a5]@2 ~@2 [e5,g5]@2 ~@4 [e5,g5]@2 ~@4 [e5,g5]@2 ~@2 [d5,f5]@2 ~@4 [d5,f5]@2 ~@4 [d5,f5]]/2", // Gm F Em Dm
})).s("gm_lead_2_sawtooth").gain(0.3).pan(1)

// bass · acoustic bass · "Woodbase"
const bass = note(`<
  ~@5 A B@3 C B@4 C B@2 D@10 E@2 F@2 G@2 H@5 E@2 F@2 G@2 H@5 I B@4 C B@4 C D@9 E@2 F@2 G@2 H@5 E@2 F@2 G@2 H@5 E@2 F@2
  G@2 H@7 J
>`.pickRestart({
  A: "a1@3 ~ a1@10 ~@2 a1@7 ~@9", B: "a1@3 ~ a1@3 ~@9 a1@7 ~@9", C: "a1@3 ~ a1@3 ~@9 a1@8 ~@8",
  D: "a1@3 ~ a1@3 ~@9 a1@3 ~ a1@3 ~@9",
  E: "[d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3", // D
  F: "[a#1,a#2] ~@3 [a#1,a#2] ~@3 [a#1,a#2] ~@3 [a#1,a#2] ~@3 [a#1,a#2] ~@3 [a#1,a#2] ~@3 [a#1,a#2] ~@3 [a#1,a#2] ~@3", // A#
  G: "[g1,g2] ~@3 [g1,g2] ~@3 [g1,g2] ~@3 [g1,g2] ~@3 [g1,g2] ~@3 [g1,g2] ~@3 [g1,g2] ~@3 [g1,g2] ~@3", // G
  H: "[a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@2 a2 a3 ~@3", // A
  I: "a1@3 ~ a1@10 ~@2 a1@8 ~@8",
  J: "[a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@3 [a2,a3] ~@2 a2 ~@4", // A
})).s("gm_acoustic_bass").gain(0.3).pan(0.6)

// other · blown bottle · "Bottle"
const blown_bottle = note("<~@25 A B C ~@8 A B C ~@7 A B C ~@18 A B C ~@19 C ~@15>".pickRestart({
  A: "~@25 g7!7", B: "g7!32", C: "g7 f#7 f7 e7 d#7 d7 c#7 c7 b6 a#6 a6 g#6 ~ g6 f#6 ~ f6 e6 ~ d#6 d6 ~ c#6 ~@9",
})).s("gm_blown_bottle").gain(0.43)

// other · blown bottle · "Bottle" · soft notes
const blown_bottle_soft = note("<~@25 A ~ B ~@8 A ~ B ~@7 A ~ B ~@18 A ~ B ~@19 B ~@15>".pickRestart({
  A: "~@8 g7!17 ~@7", B: "~@23 c6 ~ b5 a#5 ~ a5 g#5 ~ g5",
})).s("gm_blown_bottle").gain(0.14)

// other · pad poly · "PolySyn Pad"
const pad_poly = note(`<
  ~@27 A@2 ~@9 B@2 ~@8 C@2 ~@2 D ~@2 E F ~ G ~@2 H ~@2 I@2 ~@3 J@2 ~@2 K@2 ~ L@2 ~ M ~ N ~@2 O@2 P ~@2 Q R@2 ~@2 S@2 K@2
  T ~@2 U@2 ~@2
>`.pickRestart({
  A: "[g6@5 ~ a#6@6 ~@20 c8@13 ~@19, ~@13 f7@32 ~@19, ~@16 a6@21 ~@27]/2",
  B: "[c7@6 c7@5 ~@21 d#8@13 ~@19, ~@13 g#7@32 ~@19, ~@16 d7@21 ~@27]/2",
  C: "[c7@6 f#6@5 ~@21 g7@13 ~@19, ~@13 f#7@32 ~@19, ~@16 b6@21 ~@27]/2", D: "a7@5 ~ c8@6 ~@8 d#7@11 ~, ~@13 g7@19",
  E: "a7@5 ~@4 g7@3 ~@20, ~@6 c8@5 ~@21", F: "~@6 a#6@5 ~@21", G: "~@13 d#6@18 ~", H: "f8@6 ~@11 f7@14 ~, ~@14 c8@17 ~",
  I: "[c8@5 ~ c7@6 ~ a#6@32 ~@19]/2", J: "[g6@5 ~ a#6@6 ~ f7@32 ~@19]/2", K: "[~@2 g6@3 ~ a#6@5 ~@2 f7@32 ~@19]/2",
  L: "[~@16 e6@29 ~@19, ~@3 g6@8 ~@5]/2", M: "c8@5 ~ e7@6 ~@20", N: "a7@6 c8@5 ~ d8@19 ~", O: "[~@13 f7@32 ~@19]/2",
  P: "~@2 a7@3 ~ c8@5 ~@21", Q: "f7@5 ~ a7@6 ~@4 c8@14 ~@2, ~@13 g7@19",
  R: "[~@6 a#6@5 ~@21 c8@13 ~@19, ~@13 f7@32 ~@19]/2", S: "[~@6 a#6@6 ~ f7@32 ~@19]/2", T: "d#8@6 d7@5 ~@21",
  U: "[c8@6 c7@5 ~@2 a#6@32 ~@19]/2",
})).s("gm_pad_poly").gain(0.48)

// other · pad poly · "PolySyn Pad" · soft notes
const pad_poly_soft = note("<~@56 A ~@27 B@2 ~@4 C@2 ~@2 D ~@10>".pickRestart({
  A: "~@3 g6@3 ~@26", B: "[g6@5 ~@11 a6@29 ~@19]/2", C: "[~@2 g6@3 ~@11 a6@21 ~@27]/2", D: "g6@5 ~@27",
})).s("gm_pad_poly").gain(0.32)

// other · pad choir · "Choir Pad"
const pad_choir = note("<~@50 A B C D ~@4 E F G H ~@2 I J K D ~@37>".pickRestart({
  A: "~@24 f6@2 ~@2 f6 ~@3", B: "f6@2 ~@2 f6@2 ~@2 f6@2 ~@3 f6@2 ~@3 f6@2 ~@4 f6 ~@4 f6@2 ~",
  C: "~@2 f6 ~@5 f6@2 ~@3 f6@2 ~@3 f6@2 ~@4 f6@2 ~@3 f6@2 ~", D: "~@3 f6@2 ~@4 f6@2 ~@4 f6@2 ~@5 f6@2 ~@8",
  E: "~@12 a6 ~ a6 ~", F: "a6@2 ~@2 a6 ~@3 a6@2 ~@3 a6 ~@4 a6@2 ~@4 a6@2 ~@3 a6@2 ~",
  G: "~@2 a6@2 ~@4 a6@2 ~@3 a6@2 ~@3 a6 ~@5 a6@2 ~@3 a6@2 ~", H: "~@3 a6@2 ~@4 a6@2 ~@4 a6 ~@6 a6@2 ~@8",
  I: "~@12 f6 ~ f6 ~", J: "f6@2 ~@2 f6@2 ~@2 f6@2 ~@3 f6@2 ~@3 f6 ~@5 f6@2 ~@3 f6@2 ~",
  K: "~@2 f6@2 ~@4 f6@2 ~@3 f6@2 ~@3 f6@2 ~@4 f6 ~@4 f6@2 ~",
})).s("gm_pad_choir").gain(0.43).pan(0)

// other · pad poly · "PolySyn Pad"
const pad_poly_2 = note("<~@76 A B C D E ~@10 A B C D F G H I J A B C D K>".pickRestart({
  A: "c3 c#3 d3 d#3 e3 f3 f#3 g3 g#3 a3 a#3 b3 c4 c#4 d4 d#4 e4 f4 f#4 g4 g#4 a4 a#4 b4 c5 c#5 d5 d#5 e5 f5 f#5 g5",
  B: "g#5 a5 a#5 b5 c6 b5 a#5 a5 g#5 g5 f#5 f5 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4 e4 d#4 d4 c#4 c4 b3 a#3 a3",
  C: "g#3 g3 f#3 f3 e3 d#3 d3 c#3 c3 c#3 d3 d#3 e3 f3 f#3 g3 g#3 a3 a#3 b3 c4 c#4 d4 d#4 e4 f4 f#4 g4 g#4 a4 a#4 b4",
  D: "c5 c#5 d5 d#5 e5 f5 f#5 g5 g#5 a5 a#5 b5 c6 b5 a#5 a5 g#5 g5 f#5 f5 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4",
  E: "e4 d#4 d4 c#4 c4 b3 a#3 a3 g#3 g3 f#3 f3 e3 d#3 d3 c#3 c3 ~@15",
  F: "e4 d#4 d4 c#4 c4 b3 a#3 a3 g#3 g3 f#3 f3 e3 d#3 d3 c#3 c3 c#3 d3 d#3 e3 f3 f#3 g3 g#3 a3 a#3 b3 c4 c#4 d4 d#4",
  G: "e4 f4 f#4 g4 g#4 a4 a#4 b4 c5 c#5 d5 d#5 e5 f5 f#5 g5 g#5 a5 a#5 b5 c6 b5 a#5 a5 g#5 g5 f#5 f5 e5 d#5 d5 c#5",
  H: "c5 b4 a#4 a4 g#4 g4 f#4 f4 e4 d#4 d4 c#4 c4 b3 a#3 a3 g#3 g3 f#3 f3 e3 d#3 d3 c#3 c3 c#3 d3 d#3 e3 f3 f#3 g3",
  I: "g#3 a3 a#3 b3 c4 c#4 d4 d#4 e4 f4 f#4 g4 g#4 a4 a#4 b4 c5 c#5 d5 d#5 e5 f5 f#5 g5 g#5 a5 a#5 b5 c6 b5 a#5 a5",
  J: "g#5 g5 f#5 f5 e5 d#5 d5 c#5 c5 b4 a#4 a4 g#4 g4 f#4 f4 e4 d#4 d4 c#4 c4 b3 a#3 a3 g#3 g3 f#3 f3 e3 d#3 d3 c#3",
  K: "e4 d#4 d4 c#4 c4 b3 a#3 a3 g#3 g3 f#3 f3 e3 d#3 d3 c#3 c3 c#3 d3 d#3 e3 f3 f#3 g3 g#3 a3 a#3 b3 ~@4",
})).s("gm_pad_poly").gain(0.15)

// drums · kick
const kick = s("bd").struct("<[x!4]!14 [x ~@7 x ~@7 x ~@6 x ~@8] [x!4]!42 [x ~@7 x ~@7 x ~@6 x ~@8] [x!4]!47>")
  .gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@15 [~ x ~@6]!34 ~@9 [~ x ~@6]!22 [~ x!2 ~@2 x!2 ~]!25>").gain(0.25)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@80 [~@3 x ~@12]!25>").gain(0.1)

// drums · hihat
const hihat = s("hh").struct("<~@5 [x ~ x!3 ~ x!6 ~ x!3]!99 [x ~ x!3 ~ x!6 ~ x ~@2]>").gain(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@26 A B C@7 D E@2 F C@6 D E@2 F ~@19 A B C@17 D E@2 F C@14>".pickRestart({
  A: "~@12 x!20", B: "x!17 ~@3 x ~@11", C: "~@5 x ~@2", D: "~@20 x ~@3 x!8", E: "x!32", F: "x!12 ~@8 x ~@11",
})).gain(1.26)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~@26 A B ~@7 C ~@2 D E ~@5 C ~@2 D E ~@18 A B ~@17 C ~@2 D E ~@13
>`.pickRestart({
  A: "~@3 x!9 ~@20", B: "~@17 x!3 ~ x!5 ~@6", C: "~@2 x!18 ~ x!3 ~@8", D: "~@12 x!8 ~ x!11", E: "x!2 ~@30",
})).gain(0.5)

// drums · shaker
const shaker = s("sh").struct("<~@26 A B ~@7 C D@2 B ~@6 C D@2 B ~@19 A B ~@17 C D@2 B ~@14>".pickRestart({
  A: "~@14 x!18", B: "x!17 ~@15", C: "~@25 x!7", D: "x!32",
})).gain(0.25)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@26 A B ~@7 C ~@2 D E ~@5 C ~@2 D E ~@18 A B ~@17 C ~@2 D E ~@13>".pickRestart({
  A: "~@4 x!10 ~@18", B: "~@17 x!9 ~@6", C: "~@4 x!21 ~@7", D: "~@17 x!15", E: "x!5 ~@27",
})).gain(0.1)

// drums · rim
const rim = s("rim").struct("<[~@6 x!3 ~@5 x!2] [x ~@5 x!3 ~@5 x!2]!103 [x ~@5 x!3 ~@7]>").gain(0.25)

stack(
  synth_strings_2, synth_strings_2_soft, lead_2_sawtooth, bass, blown_bottle, blown_bottle_soft, pad_poly,
  pad_poly_soft, pad_choir, pad_poly_2, kick, snare, snare_soft, hihat, cabasa, cabasa_soft, shaker, shaker_soft, rim
)

More by Jean Michel Jarre