Strudelify

Les chants magnetiques, Part 2

Jean Michel Jarre

KeyF minorTempo126 bpm
0:00/0:00
// Les chants magnetiques, Part 2 — Jean Michel Jarre
// 126 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 2 sawtooth · "saw wave"
const lead_2_sawtooth = note(`<
  ~@4 A B C D A B C A E F G E H I H J K A L A K@2 A B C A ~@30 A B C D A B C A E F G E H I H J K A L A K@2 A B C A ~@20
>`.pickRestart({
  A: "[f4,ab4,c5]", B: "[f4,bb4,db5]", C: "[e4,g4,bb4]", D: "[c4,f4,ab4]", E: "[db4,f4,ab4]", F: "[db4,gb4,bb4]",
  G: "[c4,eb4,ab4]", H: "[db4,f4,bb4]", I: "[db4,gb4,bb4], f4 ~@23", J: "[db4,g4,bb4]", K: "[e4,g4,c5]",
  L: "[g4,bb4,c5]", // C7
})).s("gm_lead_2_sawtooth").gain(0.47)

// bass · fretless bass · "bass"
const bass = note("<~@30 A B C D E F G E H@4 I@6 J@2 K@2 L E M@6 N@2 ~@24 O@3 P O@3 P O@3 P O@5 Q@3>".pickRestart({
  A: "eb3@3 f2", B: "bb3@2 ~@2 ab3@2 ~@3 f3@15", C: "~@3 c3 ~@2 f3 ~@2 c3@2 ~ f3@10 ~@2", D: "f3", E: "db3",
  F: "~@4 db3@7 ~ db3@12", G: "~ db3@23", H: "bb1@3 ~@2 bb2 bb2@2 ~ bb1@2 ~ bb1@3 ~@2 bb2!2 ~@2 bb1@2 ~",
  I: "c2@3 ~@2 c3 c3@2 ~ c2@2 ~ c2@3 ~@2 c3!2 ~@2 c2@2 ~", J: "ab2", K: "[f3@4 c3@3 ~@3 ab2@3 ~ f2@33 ~]/2",
  L: "db2@19 d2 [eb2,e2] [f2,gb2,g2] [ab2,a2,bb2] [b2,c3]", M: "c2@3 ~@2 c3 c3@2 ~ c2 ~@2 c2@4 ~ c3 c3@2 ~ c2@2 ~",
  N: "f2/2", O: "f2@3 ~@2 f3 f3@2 ~ f2 ~@2 f2@4 ~ f3 f3@2 ~ f2@2 ~",
  P: "f2@3 ~@2 f3 f3@2 ~ f2@2 ~ f2@5 ab2 ab2@2 ~ g2@2 ~", Q: "[f2@5 ~]/3",
})).s("gm_fretless_bass").gain(0.63)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@26 A B C D E F@2 E G H I J K L M L N E O P Q@2 R@2 S@2 T@2 U@6 ~@22 A B C D E F@2 E@2 F@2 E@2 F@2 E@6 V@3
>`.pickRestart({
  A: "f6", B: "bb5", C: "g5", D: "f5", E: "[f4,ab4,c5]", F: "[~ [eb4,g4,bb4], [f4,bb4,db5,f5] ~, ~ f6@3]/2",
  G: "~ db6, [db4,f4,ab4,db5]", H: "[db4,g4,bb4,db6]", I: "[c4,eb4,ab4]", J: "[db4,f4,ab4]",
  K: "~@12 bb5@11 ~, [d4,f4,bb4]", L: "[eb4,g4,bb4,bb5]", M: "[d4,f4,bb4,bb5]", N: "~ c6, [e4,g4,c5]",
  O: "~ c6, [g4,bb4,c5]", P: "[f4,ab4,c5,c6]", Q: "[e4,g4,c5,c6]", R: "[b3,eb4,ab4]", S: "[c4,f4,ab4]",
  T: "[db4,f4,bb4]", U: "[e4,g4,c5]", V: "[[f4,ab4,c5]@5 ~]/3",
})).s("gm_string_ensemble_1").gain(0.39)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@7 A ~@5 A ~@3 A ~@11 A ~@5 A ~@11 A ~@7 A ~@3 A ~@3 A ~@5 A ~@3 A ~@11 A ~@4 B ~@2
>`.pickRestart({
  A: "x", B: "x!12 ~@12",
})).gain(0.39)

// drums · ride
const ride = s("rd").struct("<~@103 [~@7 x!17] [x!10 ~@14] ~>").gain(0.79)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@104 [~@10 x!13 ~] ~>").gain(0.24)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~@26
  [~@3 x ~@2 x ~@7 x ~@2 x ~ x ~@4]!22
  ~@34
  [~@3 x ~@2 x ~@7 x ~@2 x ~ x ~@4]!21
  ~@3
>`).gain(1.66)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@26 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~@34 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@5 x",
})).gain(2.02)

// drums · congas
const congas_2 = s("conga:33").struct("<~@26 [x ~@8 x ~ x ~@9 x ~@2]!22 ~@34 [x ~@8 x ~ x ~@9 x ~@2]!21 ~@3>")
  .gain(2.02)

stack(lead_2_sawtooth, bass, string_ensemble_1, crash, ride, ride_soft, bongos, congas, congas_2)

More by Jean Michel Jarre