Strudelify

Magnetic Fields, Part 1

Jean Michel Jarre

KeyF minorTempo132 bpm
0:00/0:00
// Magnetic Fields, Part 1 — Jean Michel Jarre
// 132 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 1 "fiddle" named as a string part, played on violin (its epiano2 patch is not one)
// note: duplicate parts dropped: ch 14 "ahahahah" pad choir (copy of ch 2 "choir" choir aahs)
// note: Full arrangement: all 178 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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.

// other · synth bass 1 · "seq2r"
const synth_bass_1 = note(`<
  A B@11 C@4 D@4 E@6 B@8 C@4 D@4 E@6 B@8 C@4 D@4 E@6 ~@14 F E@5 B@8 C@4 D@4 E@6 B@8 C@4 D@4 E@6 ~@14 F E@5 B@24
>`.pickRestart({
  A: "~@2 f5@2 f4 f5 e5 f4!2 f5@2 f4 e5 f5 f4@2", B: "f5 f4 f5@2 f4 f5 e5 f4!2 f5@2 f4 e5 f5 f4@2",
  C: "db5 db4 db5@2 db4 db5 c5 db4!2 db5@2 db4 c5 db5 db4@2",
  D: "bb4 bb3 bb4@2 bb3 bb4 a4 bb3!2 bb4@2 bb3 a4 bb4 bb3@2", E: "c6 c5 c6@2 c5 c6 b5 c5!2 c6@2 c5 b5 c6 c5@2",
  F: "~ c5 c6@2 c5 c6 b5 c5!2 c6@2 c5 b5 c6 c5@2",
})).s("gm_lead_8_bass_lead").gain(0.8).pan(0)

// chords · synth strings 1 · "strings"
const synth_strings_1 = note(`<
  ~@4 A B C A@2 B C A D@4 E@4 F@6 G@8 D@4 E@4 F@6 G@8 D@4 E@4 F@6 ~@14 H I H I J@2 G@8 D@4 E@4 F@6 G@8 D@4 E@4 F@6 ~@14
  H I H I J@2 G@12 K@8 ~@4
>`.pickRestart({
  A: "[f4,ab4,c5]", B: "[f4,bb4,db5]", C: "[g4,bb4,c5]",
  D: "[[db4,f4,ab4] [db4,gb4,bb4] [c4,eb4,ab4] [db4,f4,ab4], db3]/4", // Db Gb Ab Db
  E: "[[d4,f4,bb4] [eb4,g4,bb4] [d4,f4,bb4] [eb4,g4,bb4], bb2]/4", // Bb Eb Bb Eb
  F: "[[e4,g4,c5] [f4,ab4,c5] [g4,bb4,c5] [f4,ab4,c5] [e4,g4,c5]@2, c3]/6", // C Fm C7 Fm C
  G: "[[f4,ab4,c5] [f4,bb4,db5] [g4,bb4,c5] [f4,ab4,c5], f3]/4", H: "g4", I: "ab4", J: "g4/2", K: "[f2,f4,g4,c5]/8",
})).s("gm_synth_strings_1").gain(0.8)

// bass · fretless bass · "bass"
const bass = note(`<
  ~@29 A B@2 C B D@4 E@4 F@6 B@2 C B@3 C B D@4 E@4 F@6 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@6 ~@3 A B@2 C B D@4 E@4 F@6 B@2 C
  B@3 C B D@4 E@4 F@6 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@6 ~@7 A B@2 C B@13
>`.pickRestart({
  A: "~@6 ab2 g2", B: "f2@2 ~ f2@2 e2 f2 e2 f2@2 ~ f2@2 e2 f2 e2",
  C: "f2@2 ~ f2@2 e2 f2 e2 f2@2 ~@2 ab2@2 g2@2, ~@11 f2@2 ~@3", D: "db2@2 ~ db2@2 c2 db2 c2 db2@2 ~ db2@2 c2 db2 c2",
  E: "bb1@2 ~ bb1@2 a1 bb1 a1 bb1@2 ~ bb1@2 a1 bb1 a1", F: "c2@2 ~ c2@2 b1 c2 b1 c2@2 ~ c2@2 b1 c2 b1",
  G: "ab2@2 ~ ab2@2 ab2 g2@2 ab2@2 ~ ab2@2 ab2 g2@2", H: "f2@2 ~ f2@2 f2 e2@2 f2@2 ~ f2@2 f2 e2@2",
  I: "db2@2 ~ db2@2 db2 c2@2 db2@2 ~ db2@2 db2 c2@2", J: "c2@2 ~ c2@2 c2 b1@2 c2@2 ~ c2@2 c2 b1@2",
})).s("gm_fretless_bass").gain(0.8)

// other · lead 2 sawtooth · "pitch"
const lead_2_sawtooth = note(`<
  ~@26 A@4 ~ B@3 C@8 D@6 ~@4 E@3 ~@5 F@2 G@2 H@6 ~@24 I@4 J@3 ~ K@4 L@5 ~@5 E@3 ~@5 F@2 G@2 H@6 ~@44
>`.pickRestart({
  A: "[c6,f6]/4", B: "[~ f4@15]/3", C: "[~@2 db4@31 ~ bb4@15 ~ bb4@14]/8", D: "[~@5 c5@43]/6", E: "[~@5 f4@19]/3",
  F: "[bb4@31 ~]/2", G: "[~@7 bb4@24 ~]/2", H: "[c5@95 ~]/6", I: "[[c5,f5]@15 ~]/4", J: "[~ db4@11]/3",
  K: "[~@3 bb3@16 bb4@15 ~@2 bb3@27 ~]/4", L: "[~@8 c4@57 ~@15]/5",
})).s("gm_lead_2_sawtooth").gain(0.5)

// other · violin · "fiddle"
const violin = note(`<
  ~@48 A B C D A B C D E ~ F G H I J K L M N M O@2 ~@42 A B C D A B C D E ~ F G H I J K L M N M O@2 ~@44
>`.pickRestart({
  A: "~@3 f6 c6 ab5 f6 c6 f6 c6 ab5 c6 ab5 f5 c6 ab5", B: "f5!8 ~@8",
  C: "c5 f5 ab5 c5 ab5 f5 ab5 c6 ab5 f5 ab5 c6 ab5 c6 ab5 c6", D: "f6!13 ~@3",
  E: "~@3 db5 f5 ab5 db5 f5 ab5 f5 ab5 f5 ab5 db6 ab5 f5",
  F: "db6 ab5 f5 ab5 f5 db5 ab5 f5 db5 f5 db5 ab4 db5 f4 ab4 f4",
  G: "~@3 db5 f5 ab5 db5 f5 ab5 f5 ab5 db6 ab5 f5 ab5 db6", H: "bb5 f5 d5 f5 d5 f5 d5 bb4 d5 bb4 d5 bb4 f4 bb4 f4 bb4",
  I: "bb4!8", J: "bb4 d5 bb4 d5 f5 bb4 d5 f5 d5 f5 d5 f5 bb5 f5 bb5 f5", K: "bb5!8",
  L: "~@3 c6 g5 e5 c6 g5 c6 e5 c5 g5 e5 c5 g4 e4", M: "c4!8",
  N: "[g4,bb4,c5]!3 [bb4,c5] ~ [g4,bb4] [g4,bb4,c5]!2 [g4,bb4] c5 g4 bb4 c5 g4 bb4 c5", // C7 Bbsus2 Gm C7 Gm
  O: "c5 e4 c4 c5 c4 e4 g4 c4 e4 c5 g4 e4 g4 c4 e4 g4",
})).s("gm_violin").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@26
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x!2]!44
  [x!2]!20
  ~@4
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x!2]!40
  [x!2]!20
  ~@4
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x!2]!20
>`).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@78 [~@3 x ~@2 x ~ x ~@2 x ~@2 x ~]!12 ~@52 [~@3 x ~@2 x ~ x ~@2 x ~@2 x ~]!12 ~@24>")
  .gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@26 A@44 ~@8 A@12 ~@4 A@40 ~@8 A@12 ~@4 A@20>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@26 A@44 ~@8 B@12 ~@4 A@40 ~@8 B@12 ~@4 A@20>".pickRestart({
  A: "x!16", B: "~@2 x ~@2 x ~@4 x ~@2 x ~@2",
})).gain(0.8)

// drums · cowbell
const cowbell = s("cb").struct("<~@26 A@44 ~@8 A@12 ~@4 A@40 ~@8 A@12 ~@4 A@20>".pickRestart({
  A: "~@2 x ~@3 x ~@2 x ~@4 x ~",
})).gain(0.8)

stack(synth_bass_1, synth_strings_1, bass, lead_2_sawtooth, violin, kick, hihat, open_hat, ride, cowbell)

More by Jean Michel Jarre