Strudelify

Equinox, Part 5

Jean Michel Jarre

KeyC majorTempo157 bpm
0:00/0:00
// Equinox, Part 5 — Jean Michel Jarre
// 157 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 156 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(157/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.

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  ~@5 A@9 B C@3 D E@2 A B C@3 D E@4 A@2 F E@2 A B C@3 D E@4 A@2 F E@2 G@7 H@6 G@4 A B C@3 D E@2 A B C@3 D E@4 A@2 F E@2
  G@7 H@6 G@4 A B C@3 D E@2 A B C@3 D E@4 A@2 F E@4 A@2 F G@11 I ~@8
>`.pickRestart({
  A: "g2 ~ g2 ~ g3 ~ g3 ~ g2 ~ g2 ~ g3 ~ g3 ~", B: "g2 ~ g2 ~ g3 ~ g3 ~ f2 ~ f2 ~ f3 ~ f3 ~",
  C: "f2 ~ f2 ~ f3 ~ f3 ~ f2 ~ f2 ~ f3 ~ f3 ~", D: "f2 ~ f2 ~ f3 ~ f3 ~ c2 ~ c2 ~ c3 ~ c3 ~",
  E: "c2 ~ c2 ~ c3 ~ c3 ~ c2 ~ c2 ~ c3 ~ c3 ~", F: "g2 ~ g2 ~ g3 ~ g3 ~ c2 ~ c2 ~ c3 ~ c3 ~",
  G: "c2 ~ c2 ~ c3@3 ~ c2 ~ c3@3 ~ c3 ~", H: "f2 ~ f2 ~ f3@3 ~ f2 ~ f3@3 ~ f3 ~", I: "c2 ~ c2 ~@13",
})).s("gm_electric_bass_pick").gain(0.3).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass_2 = note(`<
  A@14 B C@3 D E@2 A B C@3 D E@4 A@2 F E@2 A B C@3 D E@4 A@2 F E@9 G@6 E@4 A B C@3 D E@2 A B C@3 D E@4 A@2 F E@9 G@6 E@4
  A B C@3 D E@2 A B C@3 D E@4 A@2 F E@4 A@2 F E@11 H ~@8
>`.pickRestart({
  A: "g2 ~ g2 ~ g3 ~ g2 ~ g2 ~ g2 ~ g3 ~ g2 ~", B: "g2 ~ g2 ~ g3 ~ g2 ~ f2 ~ f2 ~ f3 ~ f2 ~",
  C: "f2 ~ f2 ~ f3 ~ f2 ~ f2 ~ f2 ~ f3 ~ f2 ~", D: "f2 ~ f2 ~ f3 ~ f2 ~ c2 ~ c2 ~ c3@2 c2 ~",
  E: "c2 ~ c2 ~ c3 ~ c2 ~ c2 ~ c2 ~ c3@2 c2 ~", F: "g2 ~ g2 ~ g3 ~ g2 ~ c2 ~ c2 ~ c3 ~ c2 ~",
  G: "f2 ~ f2 ~ f3 ~ f2 ~ f2 ~ f2 ~ f3@2 f2 ~", H: "c2 ~ c2 ~@13",
})).s("gm_acoustic_bass").gain(0.3).pan(0.6)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~@13 A B@3 C D@3 A B@3 C D@3 E F@2 G H@3 A B@3 C D@3 E F@2 G I@3 J@2 K L@2 M N O P@2 O Q@2 R@2 S@2 A B@3 C D@3 A B@3 C
  D@3 E F@2 G I@3 J@2 K L@2 M N O P@2 O Q@2 R@2 S@2 A B@3 C D@3 A B@3 C D@3 E F@2 G I@3 E F@2 G T@7 U@6 ~@8
>`.pickRestart({
  A: "[b4,d5] ~ [a4,c5]@3 ~ [b4,d5] ~ [a4,c5]@3 ~ [b4,d5] ~ [a4,c5]@2", B: "[~@2 [g4,b4]@5 ~ [f4,a4]@38 ~@2]/3",
  C: "[a4,c5] ~ [g4,b4]@3 ~ [a4,c5] ~ [g4,b4]@3 ~ [a4,c5] ~ [g4,b4]@2", D: "[~@2 [f4,a4]@5 ~ [e4,g4]@38 ~@2]/3",
  E: "[c4,e4]@5 ~ [d4,f4]@2 [d4,f4]@3 ~ [e4,g4]@4", // C Dm Em
  F: "[~@2 [f4,a4]@5 ~ [e4,g4]@5 ~ [g4,b4]@5 ~ [g4,b4]@5 ~ [f4,a4]@2 [f4,a4]@3 ~]/2", // F Em G F
  G: "[e4,g4]@5 ~ [d4,f4]@2 [d4,f4]@3 ~ [d4,f4]@3 ~", // Em Dm
  H: "[[d4,f4] ~ [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ [c4,e4]@27 ~]/3", // Dm Em Dm C
  I: "[[d4,f4] ~ [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ [c4,e4]@26 ~@2]/3", // Dm Em Dm C
  J: "[[g5,a#5]@5 ~ [f5,a5]@5 ~ [e5,g5]@7 ~ [d5,f5] ~ [e5,g5] ~ [d5,f5] ~ [e5,g5] ~ [g5,a#5]@4]/2", // Gm F Em Dm Em Dm Em Gm
  K: "~@2 [f5,a5]@5 ~ [e5,g5]@3 ~ [g4,c5] ~ [g4,c5] ~", // F Em C5
  L: "[[g4,c5]@3 ~ [g4,c5]@3 ~ [g5,a#5]@5 ~ [f5,a5]@5 ~ [e5,g5]@7 ~ [d5,f5] ~ [e5,g5]@2]/2", // C5 Gm F Em Dm Em
  M: "~@4 [g5,a#5]@5 ~ [f5,a5]@5 ~", N: "[e5,g5]@15 ~", O: "[g5,a#5]@5 ~ [f5,a5] ~ [f5,a5]@3 ~ [a5,c6]@4",
  P: "[~@2 [g5,a#5]@5 ~ [a#5,d6]@5 ~ [a5,c6]@5 ~ [f5,a5]@11 ~]/2", // Gm A# Am F
  Q: "[~@2 [g5,a#5]@5 ~ [a#5,d6]@5 ~ [a5,c6]@5 ~ [f5,a5]@5 ~ [e5,g5] ~ [e5,g5]@3 ~]/2", // Gm A# Am F Em
  R: "[[g5,a#5]@5 ~ [f5,a5]@5 ~ [e5,g5]@7 ~ [d5,f5] ~ [e5,g5]@3 ~@3 [g5,a#5]@4]/2", // Gm F Em Dm Em Gm
  S: "[~@2 [f5,a5]@5 ~ [e5,g5]@23 ~]/2", // F Em
  T: "[[d4,f4] ~ [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ e4@11 ~ f4@15 ~@49 f4@12 g4@4, ~@5 c4@15 c4@8, ~@3 e4@3 ~]/7", // Dm Em Dm C
  U: "[c4@2 ~ f4 e4@2, e4 ~, ~ c4@2]/6",
})).s("gm_synth_strings_2").gain(0.36).pan(1)

// other · soprano sax · "SOPRAN SAX"
const soprano_sax = note(`<
  ~@36 A B@3 C D@3 E F@2 G H@3 ~@25 A B@3 C D@3 E F@2 G I@3 ~@25 A B@3 C D@3 E F@2 G J@3 E F@2 G K@3 ~@18
>`.pickRestart({
  A: "b3 ~ a3@3 ~ b3 ~ a3@3 ~ b3 ~ a3@2", B: "[~@2 g3@5 ~ f3@36 ~@4]/3", C: "a3 ~ g3@3 ~ a3 ~ g3@3 ~ a3 ~ g3@2",
  D: "[~@2 f3@5 ~ e3@36 ~@4]/3", E: "c3@5 ~ d3@2 d3@3 ~ e3@4", F: "[~@2 f3@5 ~ e3@5 ~ g3@6 g3@5 ~ f3@2 f3@3 ~]/2",
  G: "e3@5 ~ d3@2 d3@4 d3@4", H: "[d3 ~ e3@5 ~ d3@5 ~ c3@6 c3@27 ~]/3", I: "[~@2 e3@5 ~ d3@5 ~ c3@33 ~]/3",
  J: "[~@2 e3@5 ~ d3@5 ~ c3@31 ~@3]/3", K: "[d3 ~ e3@5 ~ d3@5 ~ c3@6 c3@25 ~@3]/3",
})).s("gm_soprano_sax").gain(0.3).pan(0.8)

// chords · rock organ · "ORGAN 3"
const rock_organ = note("<~@51 A@2 B C@3 D E F@2 E G@2 H@2 I@2 ~@23 A@2 B C@3 D E F@2 E G@2 H@2 J@3 ~@47>".pickRestart({
  A: "[[g6,a#6]@5 ~ [f6,a6]@5 ~ [e6,g6]@7 ~ [d6,f6] ~ [e6,g6] ~ [d6,f6] ~ [e6,g6] ~ [g6,a#6]@4]/2", // Gm F Em Dm Em Dm Em Gm
  B: "~@2 [f6,a6]@5 ~ [e6,g6]@3 ~ [g5,c6] ~ [g5,c6] ~", // F Em C5
  C: "[[g5,c6]@3 ~ [g5,c6]@3 ~ [g6,a#6]@5 ~ [f6,a6]@5 ~ [e6,g6]@7 ~ [d6,f6] ~ [e6,g6]@4 ~@2 [g6,a#6]@5 ~ [f6,a6]@5 ~]/3", // C5 Gm F Em Dm Em Gm F
  D: "[e6,g6]@15 ~", E: "[g6,a#6]@5 ~ [f6,a6]@5 ~ [a6,c7]@4",
  F: "[~@2 [g6,a#6]@5 ~ [a#6,d7]@5 ~ [a6,c7]@5 ~ [f6,a6]@11 ~]/2", // Gm A# Am F
  G: "[~@2 [g6,a#6]@5 ~ [a#6,d7]@5 ~ [a6,c7]@5 ~ [f6,a6]@5 ~ [e6,g6] ~ [e6,g6]@3 ~]/2", // Gm A# Am F Em
  H: "[[g6,a#6]@5 ~ [f6,a6]@5 ~ [e6,g6]@7 ~ [d6,f6] ~ [e6,g6]@5 ~ [g6,a#6]@4]/2", I: "[~@2 [f6,a6]@5 ~ [e6,g6]@24]/2",
  J: "[~@2 [f6,a6]@5 ~ [e6,g6]@25 ~@15]/3", // F Em
})).s("gm_rock_organ").gain(0.25).pan(0.2)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@13 A B@3 C D@3 A B@3 C D@3 E F@2 G H@3 A B@3 C D@3 E F@2 G I@3 ~@17 A B@3 C D@3 A B@3 C D@3 E F@2 J K@3 ~@17 A B@3 C
  D@3 A B@3 C D@3 E F@2 G I@3 E F@2 G L@7 M@6 ~@8
>`.pickRestart({
  A: "[b4,d5] ~ [a4,c5]@3 ~ [b4,d5] ~ [a4,c5]@3 ~ [b4,d5] ~ [a4,c5]@2", B: "[~@2 [g4,b4]@5 ~ [f4,a4]@38 ~@2]/3",
  C: "[a4,c5] ~ [g4,b4]@3 ~ [a4,c5] ~ [g4,b4]@3 ~ [a4,c5] ~ [g4,b4]@2", D: "[~@2 [f4,a4]@5 ~ [e4,g4]@38 ~@2]/3",
  E: "[c4,e4]@5 ~ [d4,f4]@2 [d4,f4]@3 ~ [e4,g4]@4", // C Dm Em
  F: "[~@2 [f4,a4]@5 ~ [e4,g4]@5 ~ [g4,b4]@5 ~ [g4,b4]@5 ~ [f4,a4]@2 [f4,a4]@3 ~]/2", // F Em G F
  G: "[e4,g4]@5 ~ [d4,f4]@2 [d4,f4]@3 ~ [d4,f4]@3 ~", // Em Dm
  H: "[[d4,f4] ~ [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ [c4,e4]@27 ~]/3", // Dm Em Dm C
  I: "[[d4,f4] ~ [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ [c4,e4]@26 ~@2]/3", // Dm Em Dm C
  J: "[e4,g4]@5 ~ [d4,f4]@2 [d4,f4]@3 ~ [d4,f4]@4", K: "[~@2 [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ [c4,e4]@26 ~@2]/3",
  L: "[[d4,f4] ~ [e4,g4]@5 ~ [d4,f4]@5 ~ [c4,e4]@5 ~ e4@12 f4@16 ~@48 f4@12 g4@4, ~@5 c4@15 c4@8, ~@3 e4@3 ~]/7", // Dm Em Dm C
  M: "[c4@2 ~ f4 ~@2, e4 ~, ~ c4@2]/6",
})).s("gm_synth_brass_1").gain(0.15).pan(0)

// chords · flute · G Bm G Bm G G5 Bm G …
const flute = note(`<
  ~
  [[g4,b4] d5 ~ g4 [b4,d5] ~@2 [g4,b4,d5] ~@2 g4 [b4,d5] ~@2 [g4,b4,d5] ~]
  [~@8 [g4,b4] [g4,d5] [b4,d5] [g4,b4] [b4,d5] [g4,d5] [g4,b4] [b4,d5]]
  [[b4,d5] [g4,d5] [b4,d5] [g4,b4] ~@12]
  ~@152
>`).s("gm_flute").gain(0.15)

// other · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~@37 A B C@2 D E F ~@5 G H ~ I J ~@2 I K ~@19 A B C@2 D E F ~@5 G H ~ I L ~@2 I L ~@6 I L ~@3 A B C@2 D E F ~ A B C@2
  D E F ~@5 G M@2 N ~@3 G H ~@18
>`.pickRestart({
  A: "~@8 f6!2 c7 ~ a6!2 f6!2", B: "a6!2 f6 ~ c6!2 a5!2 f5!2 a5!2 f5!2 c5!2",
  C: "[f5!2 c5!2 a4!2 f4!2 a4!2 f4!2 c4 c4@8 ~@11]/2", D: "~@8 c6 g6 e6 c6 e6 c6 g5 e5",
  E: "g5 e5 ~ c5 g4 c5 g4 e4 c4 e4 c4 g3 e3 g3 e3 c3", F: "g2 c3 g2 e2 c2 e2 c2 g1 e1 c1@4 ~@3",
  G: "~@4 e5 c5 g4 e4 c4 g4 e4 c4 g3 c4 g3 e3", H: "c3 e3 c3 g2 e2 g2 e2 c2 g1 e1 c1@4 ~@2", I: "~@7 g5!9",
  J: "g5!10 ~@6", K: "g5!12 ~@4", L: "g5!7 ~@9",
  M: "[c3 e3 c3 g2 e2 g2 e2 c2 g1 e1 c1@10 c2@4 ~ e2 g2 e2 g2 c3 e3 c3]/2", N: "e3 g3 c4 g3 c4 e4 g4 c5 e5@5 ~@3",
})).s("gm_pad_halo").gain(0.36)

// other · pad halo · "HALO PAD" · soft notes
const pad_halo_soft = note("<~@52 A B ~@2 A C ~@34 A D ~@2 A D ~@6 A D ~@50>".pickRestart({
  A: "~ g5!6 ~@9", B: "~@10 g5!6", C: "~@12 g5!4", D: "~@7 g5!9",
})).s("gm_pad_halo").gain(0.24)

// other · oboe
const oboe = note(`<
  ~@6
  [~@9 c#4 ~@3 c#4 ~@2]
  [~ c#4 ~@14]
  [~@2 c#4 ~@2 d4 c#4 ~@2 d4 ~ c#4 ~@4]
  ~
  [~@2 d4!14]
  [~@4 d4!12]
  ~@144
>`).s("gm_oboe").gain(0.2).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@2 [x!2 ~@2 x!2 ~@2]!145 [x!2 ~@6] ~@8>").gain(0.25)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!147 ~@9>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@13 [x!2 ~@2 x!2 ~@2]!134 [x!2 ~@6] ~@8>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@8 [~ x ~@2]!139 ~@9>").gain(0.1)

// drums · ride
const ride = s("rd").struct("<~@8 [~@3 x]!139 ~@9>").gain(0.25)

// drums · shaker
const shaker = s("sh").struct("<[x!2 ~@2 x!2 ~@2]!147 [x!2 ~@6] ~@8>").gain(0.25)

// drums · guiro
const guiro = s("guiro:4").struct("<~@7 [~ x ~ x]!140 ~@9>").gain(4.19)

stack(
  bass, bass_2, synth_strings_2, soprano_sax, rock_organ, synth_brass_1, flute, pad_halo, pad_halo_soft, oboe, kick,
  clap, open_hat, crash, ride, shaker, guiro
)

More by Jean Michel Jarre