Strudelify

Waiting for Cousteau

Jean Michel Jarre

KeyD minorTempo30 bpm
0:00/0:00
// Waiting for Cousteau — Jean Michel Jarre
// 30 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 328 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(30/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 · lead 8 bass lead · "SYNTH 1"
const lead_8_bass_lead = note(`<
  ~@13 A@3 B@7 C@2 D@5 E@4 F@5 G@3 H@2 I@6 J@8 K@8 L@3 M@6 N@4 O@6 P@8 Q@5 ~@5 R@8 S@7 T@5 U@2 V@6 W@2 X@7 Y@8 Z@5 ~@10
  AA@7 ~@2 AB@6 AC@3 AD@8 ~@8 AE@4 AF@7 ~@2 AG@5 AH@4 AI@7 AJ@7 AK@5 AL@8 ~@15 AM@4 AN@6 AO@6 AP@4 AQ@6 AR@6 AS@8 AT@4
  ~@3 AU@3 ~ AV@3 ~ AW@3 ~@2 AX@6 ~
>`.pickRestart({
  A: "[~@3 d6@8 ~]/3", B: "[~@3 e6@16 ~@3 f6@16 g6@16 ~@2]/7", C: "d6/2", D: "[~@5 d6@8 ~ a5@6, ~ c6@8 ~@11]/5",
  E: "[~@7 a5@8 ~, a5@7 ~@9, ~@3 g5@4 ~]/4", F: "[~@5 d6@4 ~, ~@3 f5@8 ~@9]/5", G: "[~@5 a5@7, c6@2 ~, ~ d6@4 ~]/3",
  H: "a5/2", I: "[~@7 a5@8 ~ d6@8, ~@4 g5@32 ~@27 c6@32 ~]/6",
  J: "[~@8 g5@24 ~@3 d6@32 ~ c6@32 ~@6 e6@14 e6@8, ~ f5@8 ~@23, ~ g5 ~@2, ~@33 a5@32 ~@63]/8",
  K: "[~@44 c5@5 ~@2 d5@13, ~@3 e6@31 e5@30 e5@32 ~@32, ~@4 d6@32 ~@21 f5@32 ~@39, ~@12 f5@16 d5@16 ~@5 c5@15, ~@28 g5@31 g5@32 ~@37]/8",
  L: "[~@3 f5@5, d5@2 ~]/3", M: "[~@39 c6 c6@8, e5@32 ~@8 a5@23 a5@32 ~, ~@22 g5@29 g5@32 ~@13, ~@28 c6@11 ~@9]/6",
  N: "[~@7 f6, ~ b5@8 ~ d6@6, ~@3 a5@8 ~@5, ~@11 e5@16 ~@5]/4",
  O: "[~@11 c6, ~ f6@5 f6@8 ~@10, ~@5 e6@16 ~@9 e5@16 ~@2, ~ c6 a5, ~@5 d6@4 ~@3]/6",
  P: "[~@19 g5@5 ~@16 c5@10 ~@54 a5@6 a5@18, ~ c6@16 ~@8 c5@11 c5@16 ~@12, ~@2 a5@5 d6@16 ~@4 d5@11 d5@16 ~@10, ~@8 g5@11 ~@5 g5@32 ~@72, ~@15 a5@11 a5@32 ~@28 c6@32 ~@10]/8",
  Q: "[~@9 a4@8 ~@3, g4@13 g4@16 ~@11, ~ a4@16 ~@23]/5",
  R: "[~@22 d5@2 ~@33 d6@2 d6@3 d6@2, ~@4 e5@16 c5@6 c5@16 ~ g5@16 ~@5, ~@9 g5@5 g5@32 ~@2 d5@32 ~@4 f5@32 ~@12, ~@5 a5@16 a4@16 ~@8 a5@16 ~@3, ~@19 g4@11 e5@16 ~@18]/8",
  S: "[~@39 d6@16 ~, d6@4 ~ g6@4 ~@5, ~@3 c6@8 e6@8 ~@9, ~@5 f6@8 ~@3 c6@8 ~@4]/7",
  T: "[~@3 e6@2, ~ c6@8 ~@11, ~@6 f6@11 f6@16 ~@7, ~@5 d6@8 ~@7]/5", U: "[~@2 e6@5 e6@9]/2",
  V: "[~@11 d5@11 ~@16 a4@10, ~ f5@6 f5@16 ~@6 c5@16 ~@3, ~@8 e5@32 ~@4 d5@31 g4@21]/6",
  W: "[~@7 a4@9, ~ c5@7, ~@3 d5@13, ~@3 g4@5]/2",
  X: "[~@47 a4@9, ~@2 e5@16 ~@3 d5@16 ~@2 f4@16 ~, ~@14 g5@32 ~ e5@32 ~@3 g4@30, ~@28 f5@32 ~@3 a4@31 ~@18, ~@13 c5@8 ~ c5@6]/7",
  Y: "[~@104 g5@3 ~@5 a5@3 a5@12 g5, c5@16 ~@7 g5@16 ~ f5@16 ~@8, ~@4 d5@32 ~@5 a5@29 a5@32 ~@5 g5@20 ~, ~@2 e5@8 d6 d6@8 ~@13, ~@4 f5@8 ~@5 c6@2 c6@8 ~@5]/8",
  Z: "[~@8 a5@3 ~@23 d6@32 ~@14, ~@3 g5@32 ~@45, ~@11 a5@32 ~@37]/5",
  AA: "[~@4 g5@3 g5@3 g5@3 ~@63 e6@32 ~@4, ~@13 g5@22 g5@29 d5@32 ~@16, ~@8 e5@12 e5@9 c5@7 c6@16 ~@4, ~@10 d5@14 d5@7 e5@16 ~@9, ~@32 f5@5 f5@5 ~ f5@24 d6@32 ~@13]/7",
  AB: "[~@2 c6 c6@2 c6@2 ~@18 a5!3 a5@16 ~@4, e6 ~@2, ~ f6@16 ~@31, ~@7 c6@5 c6@16 ~@20, ~@5 d6@8 ~@11]/6",
  AC: "[~@4 g5@3 ~@3 f5@14, e5@2 ~, ~ f5@4 ~@7, ~@7 g5@16 ~]/3",
  AD: "[~@23 a5@8 ~, ~@2 c6@32 f5@22 c5@29 c6@32 ~@11, ~@16 e5@22 g5@22 f5@19 a5@13 ~@36, ~@11 a5@12 a4@16 g5@5 g5@16 ~@4, ~@30 c5@22 d5@28 c6@3 f5@32 ~@13]/8",
  AE: "[~@3 a5, ~ d5@4 d6@8 ~@3, ~@2 g5@7 c6@7, ~@3 a5@7 f6@6, ~@4 f5@7 e6@5]/4",
  AF: "[~@17 c6@8 ~@3, ~@3 e6@12 a5@15 g5@16 ~@10, ~@3 f5@8 c6@6 ~@11, ~ g5@2 e5 e5@2 ~, ~@20 d6@31 g5@5 f5@32 ~@24]/7",
  AG: "[~@6 d6@5 d6 ~@11 d6@7 d6@10, ~@4 c6@16 ~ c6@16 ~@3, ~@12 d6@11 ~@17]/5",
  AH: "[~ g5@2 ~@18 f6@11, c6@3 c6@4 ~, ~@3 g5@16 ~@13, ~@5 a5@16 ~@11, ~@4 d6@3 d6@8 ~]/4",
  AI: "[~@33 f5@2 ~@13 d5@8, ~@8 e6@6 e6@14 f5@31 f5@7 ~@4 f5@32 ~@10, ~@10 c6@9 a5@32 ~@6 a5@23 a5@32, ~@12 f6@12 c6@32 ~@5 c6@10 c6@32 ~@9, ~@16 g5@32 ~@8 g5@7 g5@11 g5@32 ~@6]/7",
  AJ: "[~@13 d6@3 ~@8 f5@4, f5 f5@7 f5@2 f5@8 ~ e6@8 ~, ~@2 e5@32 c6@30 d6 c6@14 c6@32 ~, ~@3 d5@8 ~ d5@8 ~@8, ~@19 e5@15 d6@16 ~@6]/7",
  AK: "[~@3 f5@6 ~@39 f5@8 ~@4 e5@20, d5@8 ~@3 d5@8 ~, ~@9 f5@32 ~@15 f5@24, ~@7 e5@16 ~@17]/5",
  AL: "[~@6 f5@7 ~@75 e5@32 ~@8, ~ d5@16 ~@3 d5@16 ~@28, ~@13 f5@32 ~ a5@32 ~@50, ~@6 c5@8 ~@7 c5@8 ~@3, ~@27 f5@16 ~@21]/8",
  AM: "[~@3 e6@4 ~, ~@15 f5@32 ~@17, ~ d5@2 ~]/4",
  AN: "[~@91 a5@5, e5@24 e5@32 f5@9 f5@31, ~@4 d5@32 ~@6 c5@32 ~ g5@21, ~@7 g5@32 ~@9 d5@14 d5@32 ~@2, ~@4 e6@16 ~@9 e5@16 ~@3]/6",
  AO: "[~@56 e5@4 e5 e5@32 g5@2 e5, g5@31 d6@32 ~@33, ~ a5@23 a5@32 ~@4 g5@32 ~@4, ~@5 c6@8 ~@11, ~@33 f5@32 ~@31]/6",
  AP: "[~@5 e5@3, ~ [e5,c6]@16 ~@15, ~ g5@4 ~@3, ~@9 f5@16 ~@7]/4", // C
  AQ: "[~@11 e5@32 ~@7 e5@32 ~@14, ~@2 d5@7 d5@32 ~@5 d5@32 ~@18, ~@5 f5@32 ~@10 f5@32 ~@17, ~@7 e5@4 ~@85]/6",
  AR: "[c6@24 ~@5 d6@4 d6@27 ~@3 f6 ~@2 e6@4 ~@6 d6@20, ~@24 f5@32 ~@5 e6@5 ~@4 e6@26, ~@25 c6@32 ~@3 d6@16 ~@20, ~@64 f6@7 f6@25]/6",
  AS: "[~@9 d6@11 ~@12 g5@2 ~@12 f5@16 c5@2, d6@9 ~@11 d6@10 c6@16 ~@18, ~ e6@5 e6@32 ~@3 e6@4 e6@23 f5 g5@2 f5@5 e5@8 f5@8 ~@36, ~@3 f6@10 f6@30 f6@8 f6@29 f5 g5@32 ~@15, ~@7 a5@4 e5@4 ~]/8",
  AT: "[~ c5, d5 ~, ~ c5@15 ~@16, ~@2 f5@15 f5@32 ~@15, ~@9 e5@32 ~@23]/4", AU: "[~ d6@16 ~@7]/3", AV: "[~ d6@8 ~@3]/3",
  AW: "[~@5 d6@16 ~@3]/3", AX: "[~@11 a5@21 a5@19 ~@5 d5@32 ~@8, ~@10 g5@32 ~@9 g5@32 ~@13, ~@13 a5@8 ~@3]/6",
})).s("gm_lead_8_bass_lead").gain(0.2).pan(0.6)

// other · pad warm · "SYNTH 3"
const pad_warm = note(`<
  ~ A B C@7 D@3 E@5 F@8 G@3 H I@8 J@2 K@8 ~ L@7 M@8 ~@16 N@5 O@6 ~@2 P@8 Q@2 ~ R@3 S@3 T@5 ~ U@7 V@4 W ~@3 X@3 Y@3 ~@10
  Z@3 AA@5 AB@3 AC AD@6 AE@7 AF@5 AG@4 AH@8 AI@7 AJ@5 AK@8 AL@6 AM@4 ~ AN@4 AO@5 ~@9 AP@4 ~@4 AQ@4 AR@5 AS@5 AT@3 AU@4
  AV@4 AW@7 AX@5 AY@8 AZ@2 BA@7 BB@2 BC@3 BD@3 BE@6 BF@7 BG@6 ~
>`.pickRestart({
  A: "a4", B: "~ a4", C: "[~@3 a4@25]/7", D: "[~ c6, d4]/3", E: "[~ a4@9, d4]/5", F: "[~@3 a4@13, ~ d4@15]/8",
  G: "[~ a4@3]/3", H: "a4 g4@3", I: "[~@3 bb3@5, ~ a4@31]/8", J: "[e5,g5]/2", K: "[~@14 g4@13 bb3@5, ~ d4@15]/8",
  L: "[[a3,d4]@17 ~@10 a4, ~@17 d4@11]/7", M: "[e5@4 d5@4 d4@3 g4@5, f5@17 ~@111]/8", N: "[e4@33 ~@7 g4@16 a4@24]/5",
  O: "[~@7 d4@21 e4@20]/6", P: "[a4@6 d4@4 c4 bb3@3 a3@2]/8", Q: "d5/2", R: "[g4@2 bb4]/3", S: "[d4@11 ~@5]/3",
  T: "[~@4 e5@28 a4@33 ~@15]/5", U: "[~@8 g4@41 ~@7 bb3@56]/7", V: "[~@2 a4@7 g4@7]/4", W: "g4", X: "[~@4 a4@7 ~@5]/3",
  Y: "[a4@11 ~@5]/3", Z: "[f5@11 ~@5]/3", AA: "[f5@6 e5@4 d5@4 g5@5 a5]/5", AB: "[g5@16 ~ f5@7, ~@2 d5]/3",
  AC: "~ e5@7, d5", AD: "[~@4 e5@13 ~@23 d5@56, d5@5 ~@7]/6", AE: "[e5@13 g4@4 [a4,a5]@5 [bb4,bb5]@6]/7",
  AF: "[bb3@3 d5@2]/5", AG: "[d5 a4]/4", AH: "[a4@13 d5@3]/8", AI: "[e6@12 a4@11 d5@17 f4@4 g4@6 a4@6]/7",
  AJ: "[d5@3 bb3@2]/5", AK: "[a3@76 f5@12 d5@37 ~@3]/8", AL: "[~@3 e5@8 d4@13]/6", AM: "[~@12 g4@45 ~@7]/4",
  AN: "[~@8 d4@41 ~@15]/4", AO: "[~@8 d4@57 ~@15]/5", AP: "[a4@49 ~@15]/4", AQ: "[~ a4@7]/4",
  AR: "[~ a4@4, g4@33 ~@47]/5", AS: "[d4 d4]/5", AT: "[~@8 e5@16 f5@4 g5@9 ~@11]/3", AU: "[~@8 c5@41 ~@15]/4",
  AV: "[~@4 c5@45 ~@15]/4", AW: "[f4@33 ~@7 d4@48 d4@24]/7", AX: "[d4@3 d4@3 g4@14]/5", AY: "d4/8",
  AZ: "[~@4 a4@7 a4@5]/2", BA: "[~ bb3@7 g5@6 e5@5 d5@9]/7", BB: "[a4@9 c5@7]/2", BC: "g4/3", BD: "[a4 c4]/3",
  BE: "[~@15 g5@2 g4@2 f4@5, ~ d4@11]/6", BF: "[~@3 e4@12 d4@5 e4@8]/7", BG: "d4/6",
})).s("gm_pad_warm").gain(0.27).pan(0.4)

// other · pad sweep · "SYNTH 4"
const pad_sweep = note(`<
  A@8 ~@2 B C@7 D@8 ~@12 E@8 ~@10 F@3 G@8 E@8 G@8 ~@4 H@6 I@7 J@3 K@8 ~@10 L@6 M@4 N@4 K@8 ~ O@2 K@8 ~@28 E@8 ~@22 P@7
  Q@5 R@4 S@6 ~@10 T@5 ~@42 U K@8 ~@6 E@8 ~@5 V@5 ~@4
>`.pickRestart({
  A: "[~ a4, d4]/8", B: "~ c4", C: "a3/7", D: "[~@8 b3@72 c4@17 ~@31, ~ d4@15, ~@8 bb4@9 ~@111]/8", E: "d4/8",
  F: "c4/3", G: "[~ d4@31]/8", H: "[~ g3@11 e3@8 f3@4]/6", I: "[d4@20 c4 bb3@7]/7", J: "[a3@33 ~@7 c4@8]/3",
  K: "[~ d4@15]/8", L: "[~ d4@5 f4@6]/6", M: "d4/4", N: "[g4@3 f4@5]/4", O: "f3/2", P: "[f3@3 d4@4]/7",
  Q: "[f3@11 e3@9]/5", R: "[~ d4@7]/4", S: "[f3@24 e3@36 c3@20 d3@9 ~@7]/6", T: "[d4@69 ~@11]/5", U: "g3",
  V: "[c4@2 [d4,f4]@3]/5", // Dm
})).s("gm_pad_sweep").gain(0.19).pan(0.4)

// other · pad bowed · "SYNTH 5"
const pad_bowed = note(`<
  A@8 ~@30 B@8 ~@10 C@7 D@4 E@6 F@8 G@6 H@5 I D@4 ~ D@4 J@6 D@4 K@2 L@8 ~@2 M@7 N@4 L@8 ~ O@2 P@8 ~@10 I L@8 ~@4 Q@5 R@5
  ~@9 S@7 T@5 U@7 D@4 V@5 W@4 X@8 Y@8 Z@8 ~@22 AA@8 ~@3 AB@3 AC@7 AD@5 AE@6 Z@8 ~@14
>`.pickRestart({
  A: "d3/8", B: "[~@11 a3@5, d3]/8", C: "[[d2,a3]@11 [f2,f3]@3, d3]/7", D: "[d2,d3]/4", E: "[[f2,f3] [d2,d3]@3]/6",
  F: "[[e2,e3]@3 ~@3 [d2,d3]@10, ~@12 [c2,c3]@13 ~@39]/8", G: "[[d2,d3]@27 ~@5]/6", H: "[~ [g2,g3]@11 [e2,e3]@8]/5",
  I: "[f2,f3]", J: "[~@8 [d2,d3]@73 ~@15]/6", K: "[e2,e3]/2", L: "[~ [d2,d3]@15]/8", M: "[[f2,f3]@3 [d2,d3]@4]/7",
  N: "[[g2,g3]@3 [f2,f3]@5]/4", O: "[f2,f3]/2", P: "[~ d3@15, ~@8 d2@105 ~@15]/8", Q: "[d2,d3]/5",
  R: "[[d2,d3]@13 ~@3]/5", S: "[~ d3@15, ~@7 d2@10 ~@95]/7", T: "[~@8 d2@57 ~@15]/5", U: "[~ [d2,d3]@7 [f2,f3]@6]/7",
  V: "[[f2,f3]@11 [e2,e3]@9]/5", W: "[~ [d2,d3]@7]/4", X: "[[f2,f3]@6 [e2,e3]@9 [c2,c3]@5 [d2,d3]@2 [a2,a3]@10]/8",
  Y: "[[g2,g3]@11 [e2,e3]@9 [f2,f3]@12]/8", Z: "[d2,d3]/8", AA: "[d3, d2@97 ~@31]/8", AB: "[d2@5 [f2,f3]]/3",
  AC: "[[d2,d3]@6 [g2,g3]@3 [d2,d3]@5]/7", AD: "[[a2,a3]@32 [d2,d3]@33 ~@5 [d2,d3]@10]/5",
  AE: "[[f2,f3]@8 [e2,e3]@7 [f2,f3]@9]/6", // F E F
})).s("gm_pad_bowed").gain(0.27).pan(0.2)

stack(lead_8_bass_lead, pad_warm, pad_sweep, pad_bowed)

More by Jean Michel Jarre