Strudelify

Chronologie, Part 8

Jean Michel Jarre

KeyF majorTempo104 bpm
0:00/0:00
// Chronologie, Part 8 — Jean Michel Jarre
// 104 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(104/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 · church organ
const bass = note("<A@2 B C D E F G H I J K L M F G N J O@8 P Q R@4 ~@69>".pickRestart({
  A: "[f1@2 c2@4 bb1 a1]/2", B: "d2", C: "c2@2 d2 e2", D: "f2@2 e2 d2", E: "c2@2 bb1 a1", F: "b1", G: "c2",
  H: "f1@3 g1", I: "a1@2 d2 c2", J: "bb1", K: "f1@3 db2", L: "d2 e2", M: "f2", N: "d2@3 c2", O: "[f1@15 e2]/8",
  P: "d2 c2", Q: "b1 bb1", R: "f1/4",
})).s("gm_church_organ").gain(0.36)

// chords · church organ
const church_organ = note("<~@6 A B C@2 D E F@2 G H I J K L M N L M N O P@2 Q@4 ~@50 R@8 ~@2 S@8 ~>".pickRestart({
  A: "[g3,d4,g4]", B: "[d4,f4] e4, [g3,bb3]", C: "[f4@2 c4@4 bb3 a3, f3]/2", D: "[f3,bb3,d4]",
  E: "c4@2 d4 [a3,e4], [f3,a3]@3 ~", F: "[[a3,f4]@2 e4 d4 ~@2 bb3 a3, ~@2 g3@3 f3@3, ~@2 c4 ~]/2", G: "[d3,g3]",
  H: "f3 e3, bb2", I: "[d3,f3]@2 [d4,f4] [c4,e4]", J: "[d4,f4]@2 [d4,f4] e4", K: "[a3,c4,f4]", L: "[a3,c4]@3 [a3,c4]",
  M: "[bb3,d4]@3 [bb3,d4]", N: "[d4,f4]@5 [c4,e4]@5 ~ [bb3,d4]@5", O: "[a3,c4]@2 d4 e4",
  P: "[a3@4 g3@2 [d4,f4] e4, [d4,f4]@3 bb3]/2", Q: "[bb3@3 a3@5, [c4,f4]]/4", R: "[f3,c4,f4]/8", S: "[~@7 f4@57]/8",
})).s("gm_church_organ").gain(0.36)

// bass · synth bass 1
const bass_2 = note(`<
  ~@32 A@4 B A@2 B A@2 ~ C@2 D A@2 E A F G A@2 H A@2 F A ~@3 A@2 B A I ~ J A ~@3 K A@7 L A M N O A M N O A M N O A M N O
  P ~@2
>`.pickRestart({
  A: "f1@3 f1@3 f1@4 f1@2 f1@4", B: "a2@3 a2@2 ab2 g2@2 f2@2 d2@2 f2@4", C: "bb1@3 bb1@3 bb1@3 bb2 bb1@2 bb1@4",
  D: "a2@5 ab2 g2@2 f2@2 d2@2 f2@4", E: "a2@3 a2@2 ab2 g2@2 a2@2 d2@2 f2@4", F: "d2@3 e2@3 f2@10",
  G: "bb1@3 bb1@3 bb1@3 bb2 ab2@2 ~@4", H: "a2@3 a2@2 g2 f2@2 c2@2 d2@2 f2@4", I: "d2@3 e2@3 f2@2 f2@8",
  J: "ab1@3 ab1@2 f1 ab1@4 ab1@2 ~@4", K: "~@9 c2 bb1@2 a1 c1 eb1 e1", L: "c2@3 c2@3 c2@4 c2@2 c2@4",
  M: "eb1@3 eb1@3 eb1@4 eb1@2 eb1@4", N: "ab1@3 ab1@3 ab1@4 ab1@2 ab1@4", O: "db1@3 db1@3 db1@4 db1@2 db1@4", P: "f1",
})).s("gm_synth_bass_1").gain(0.34)

// other · orchestra hit
const orchestra_hit = note("<~@36 A@2 ~ B@2 ~ C@2 ~ D@2 ~ E@2 F@2 G@2 H@2 ~ I@2 J ~ K@2 ~ L@2 ~@35>".pickRestart({
  A: "[a4@3 a4@2 ab4 g4@2 f4@2 d4@2 f4@20]/2", B: "[a4@3 a4@2 ab4 g4@2 f4@2 d4@2 [f4,c5]@20]/2",
  C: "[d5@3 e5@3 f5@26]/2", D: "[a4@3 a4@2 ab4 g4@2 f4@2 d4@2 [c4,f4]@20]/2",
  E: "[[c4,a4]@3 [c4,a4]@2 [b3,ab4] [bb3,g4]@2 f4@2 d4@2 [f4,c5]@20]/2", F: "[d5@3 e5@3 f5@18 ~@2 ab5@2 ab5 a5 ~@2]/2",
  G: "f4/2", H: "[a4@3 a4@2 g4 f4@2 c4@2 d4@2 [f4,c5]@20]/2", I: "[d5@3 e5@3 f5@22 ~@2 ab5@2]/2", J: "ab5 a5@3 ~@12",
  K: "[a5 ab5 g5 f5 ~@2 c5@3 d5@3 c5@20]/2", L: "[a5@3 a5@2 ab5 g5@2 f5@2 d5@2 f5@20]/2",
})).s("gm_orchestra_hit").gain(0.41)

// other · timpani
const timpani = note("<~@99 [~@5 g2!11] [g2 ~@15]>").s("gm_timpani").gain(0.26)

// other · timpani · soft notes
const timpani_soft = note("<~@99 [g2!5 ~@11] ~>").s("gm_timpani").gain(0.1)

// drums · rim
const rim = s("rim").struct("<~@70 [~ x ~ x ~@12]!4 ~@27>").gain(0.36)

// drums · kick
const kick = s("bd").struct("<~@32 [x ~@3 x ~@5 x!2 ~@4]!68 ~>").gain(0.24)

// drums · snare
const snare = s("sd").struct("<~@13 A B ~@4 C B ~@4 C B C B ~@3 D@68 ~>".pickRestart({
  A: "~@8 x ~@3 x!4", B: "x", C: "~@12 x!4", D: "~@3 x ~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<~@70 [~@5 x!2 ~]!4 ~@27>").gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@31 [~@6 x!10] ~@28 [~@7 x ~ x ~@6]!2 ~@11 [~@7 x ~ x ~@6] ~@27>").gain(0.2)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@31 [x!6 ~@10] ~@69>").gain(0.08)

// drums · hihat
const hihat = s("hh").struct("<~@32 [x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x]!68 ~>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@60 [~@5 x ~@10]!2 ~@11 [~@5 x ~@10] ~@27>").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@32 [~@7 x]!68 ~>").gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@60 [~@2 x!3 ~ x ~ x ~@7]!2 ~@11 [~@2 x!3 ~ x ~ x ~@7] ~@27>").gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@5 A ~@5 A ~ A ~@3 A ~@53 A ~@3 A ~@3 A ~@5 A>".pickRestart({
  A: "x",
})).gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@86 x ~@3 x ~@3 x ~@5 x>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@32 [x!8]!68 ~>").gain(0.32)

// drums · triangle
const triangle = s("triangles:35").struct("<~@86 x ~@3 x ~@10>").gain(3.5)

stack(
  bass, church_organ, bass_2, orchestra_hit, timpani, timpani_soft, rim, kick, snare, clap, low_tom, low_tom_soft,
  hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine, triangle
)

More by Jean Michel Jarre