Strudelify
Oxygene, Part 6 cover art

1976 · Oxygène

Oxygene, Part 6

Jean Michel Jarre

KeyC minorTempo110 bpm
0:00/0:00
// Oxygene, Part 6 — Jean Michel Jarre
// 110 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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 · string ensemble 1 · "Ensemble1"
const string_ensemble_1 = note(`<
  ~@32 A B C D A B C D E F G H E F G H I J K L M@2 ~@20 A B C D A B C D E F G H E F G H I J K L N@2 O@2 P@3 Q R S@4 T U
  V W X@2
>`.pickRestart({
  A: "gb4@3 g4@3 a4@2", B: "c5@3 bb4@3 c5@2", C: "bb4@3 c5@3 d5@2", D: "eb5@3 f5@3 g5@2", E: "ab4@3 a4@3 b4@2",
  F: "d5@3 c5@3 d5@2", G: "c5@3 d5@3 e5@2", H: "f5@3 g5@3 a5@2", I: "eb5@3 d5@3 c5@2", J: "bb4@3 a4@3 g4@2",
  K: "c5@3 bb4@3 a4@2", L: "g4@3 f4@3 eb4@2", M: "[f4@9 ~@7]/2", N: "[f4@4 c5 bb4 g4 f4@4 g4 bb4 c5@2 eb5]/2",
  O: "[c5@4 f5 eb5@2 bb4@3 g4 f4 g4 bb4@2 g4]/2",
  P: "[c5@4 bb4@2 g4@2 f4@2 g4@4 eb5@5 ~ eb5@2 c5@2 f5@2 eb5@4 c5@6 eb5@2 c5@2 f5@2 eb5@2 g5@2 f5@2]/3",
  Q: "c5@5 ~ bb4@2 gb4@2 g4@2 c5@4", R: "c5@2 eb5 c5 g4 f5 eb5 c5",
  S: "[f5@4 g5 f5 eb5 c5@3 eb5 c5 eb5 f5 eb5 c5@3 f5 eb5 c5 g4 bb4 c5@2 gb4 g4 f5 eb5 c5 bb4 eb5]/4",
  T: "c5@3 bb4 c5 g4@2 eb5", U: "eb5@3 ~ eb5@2 c5@2 bb4@2 eb5@6", V: "c5@2 eb5 c5 f5 eb5 g5 f5",
  W: "c5@3 bb4 gb4 g4 c5@2", X: "[c5@3 ~ eb5@2 c5@2 eb5@2 f5@2 eb5@2 c5@4 ~@14]/2",
})).s("gm_string_ensemble_1").gain(0.25).pan(0.8)

// bass · fretless bass
const bass = note(`<
  ~@32 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 E B F G H I J K L@2 M@2 N O I P@2 Q@2 R@2 N S@2 T@2 A@2 B@2 A@2 B@2 C@2 D@2 C@2
  D@2 E B F G H I J K L@2 U V N S@2 W@2 L@2 X@2 N ~
>`.pickRestart({
  A: "d2", B: "g2", C: "e2", D: "a2", E: "c3", F: "c3@3 bb2@3 a2@2", G: "g2@3 f2@3 eb2@2", H: "f2",
  I: "~ ab2!2 g2!2 f2!2 eb2", J: "c2@3 bb1 c2 eb2@2 c2", K: "~ gb1 g1 bb1 c2 eb2@2 c2",
  L: "[f2@3 eb2 f2 c2 eb2 f2@2 ab2!2 g2!2 f2!2 eb2]/2", M: "[g2@2 c2@2 c2 bb1@2 c2@8 b2]/2",
  N: "c3@2 gb2 g2@2 c2 d2 eb2", O: "f2@3 eb2 f2 eb2 f2@2", P: "[g2@2 c2@2 c2 bb1@2 c2@2 gb1 g1 bb1 c2 eb2@2 g2]/2",
  Q: "[f2@3 eb2 f2@2 eb2 f2@2 ab2!2 g2!2 f2!2 eb2]/2", R: "[c2@3 bb1 c2 eb2@2 c2@3 eb2 f2 gb2 g2 bb2 b2]/2",
  S: "[f2@3 eb2 f2 eb2@2 f2@2 ab2!2 g2!2 f2!2 eb2]/2", T: "[g2@6 c2@2 c2@2 bb1@4 c2@15 ~@3]/2",
  U: "g2@2 c2@2 c2 bb1@2 c2", V: "c2@2 eb2 f2 gb2 g2 bb2 b2", W: "[c2@3 bb1 c2 eb2@2 c2@2 gb1 g1 bb1 c2 eb2@2 c2]/2",
  X: "[g2@2 c2@2 c2 bb1@2 c2@3 eb2 f2 gb2 g2 bb2 b2]/2",
})).s("gm_fretless_bass").gain(0.25).pan(0.2)

// chords · synth strings 2 · "SynString2"
const synth_strings_2 = note(`<
  ~@9 A@6 B@2 C@2 B@2 D@3 B@2 C@2 B@2 C@2 E@4 F@2 G@2 H@2 I@2 H@2 I@2 C@2 J@2 K@2 C@2 B@2 D@3 B@2 C@2 B@2 C@2 L B@2 C@2
  E@4 F@2 G@2 H@2 I@2 H@2 I@2 C@2 J@2 B@2 C@2 B@2 D@3 B@2 C@2 B@2 C@2 L ~
>`.pickRestart({
  A: "[c4,eb4,g4,c5]/6", B: "[c4,f4,ab4,c5]/2", C: "[c4,eb4,g4,c5]/2", D: "[c4,eb4,g4,c5]/3",
  E: "[[c4,gb4,a4,c5] [d4,g4,bb4,d5]]/4", F: "[c4,gb4,a4,c5]/2", G: "[d4,g4,bb4,d5]/2", H: "[b3,e4,ab4,b4]/2",
  I: "[c4,e4,a4,c5]/2", J: "[c5 c5, [c4,eb4,g4]]/2", K: "[c4,f4,ab4,c5]", L: "[c4,eb4,g4,c5]",
})).s("gm_synth_strings_2").gain(0.2).pan(0.7)

// drums · bongos
const bongos = s("bongo:18").struct("<[x!2]!112 ~>").gain(0.52)

// drums · congas
const congas = s("conga:13").struct("<[~ x ~@2]!112 ~>").gain(0.63)

// drums · congas
const congas_2 = s("conga:18").struct("<[~@3 x ~@4]!112 ~>").gain(0.63)

// drums · congas
const congas_3 = s("conga:33").struct("<[~@6 x!2]!112 ~>").gain(0.63)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x ~@2 x ~@4]!5 ~@108>").gain(1.01)

// drums · shaker
const shaker = s("sh").struct("<[~@2 x!3 ~@5 x ~ x ~ x ~]!5 [x ~ x!3 ~ x ~@3 x ~ x ~ x ~]!107 ~>").gain(0.2)

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

// drums · rim
const rim = s("rim").struct("<[~@12 x!2 ~@2]!5 [~@12 x!3 ~]!107 ~>").gain(0.1)

stack(string_ensemble_1, bass, synth_strings_2, bongos, congas, congas_2, congas_3, cabasa, shaker, guiro, rim)

More by Jean Michel Jarre