Strudelify
Chronologie, Part 4 cover art

Chronology

Chronologie, Part 4

Jean Michel Jarre

KeyB majorTempo120 bpm
0:00/0:00
// Chronologie, Part 4 — Jean Michel Jarre
// 120 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "Tic-tac" woodblock (copy of ch 13 "Tic-tac" agogo); ch 11 "Melodie" acoustic guitar nylon (copy of ch 4 "Melodie" pad poly)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "Bas"
const bass = note(`<
  ~@2 A B A B C D E F D@3 E F D@3 E F D@3 G E@2 D G E D H@2 E H I F E H I F E H I F ~@2 D@3 E F D@3 E F D@3 G E@2 D G E
  D H@2 E H I F E H I F E H I F ~@2
>`.pickRestart({
  A: "b1", B: "d#2", C: "d#2!6 d#2@2 d#2@3 d#2@2 d#2@3", D: "g#1!16", E: "b1!16", F: "e2!16", G: "e1!16", H: "f#1!16",
  I: "c#2!16",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · pad poly · "Nappes-1"
const pad_poly = note(`<
  ~@7 A B C D@2 A B C D@2 A B C D@2 A E F@2 A E B A G@2 B H I J B K@2 J B H I E ~@2 D@2 A B C D@2 A B C D@2 A E F@2 A E
  B A G@2 B H I J B K@2 J B H I E ~@2
>`.pickRestart({
  A: "[g#1,b3,d#4,g#4]", B: "[b1,b3,d#4,f#4]", C: "[e2,b3,e4,g#4]", D: "[[b3,d#4,g#4]@7 ~, g#1]/2", E: "[e1,g#3,b3,e4]",
  F: "[b1,b3,d#4,f#4]/2", G: "[f#1,a#3,c#4,f#4]/2", H: "[f#1,a#3,c#4,f#4]", I: "[c#2,g#3,c#4,e4]", J: "[e2,g#3,b3,e4]",
  K: "[[f#1,a#3,f#4] [c#2,g#3,e4], c#4]/2", // F# C#m
})).s("gm_pad_poly").gain(0.36)

// other · pad sweep · "Analog Nse"
const pad_sweep = note("<~@6 A@2 ~@2 B@2 ~@3 B@2 ~@3 B@2 ~@8 C ~@15 B@2 ~@3 B@2 ~@3 B@2 ~@8 C ~@15>".pickRestart({
  A: "[[g4,d#5]@9 ~@7]/2", B: "[~ [g#3,g#4]@19 ~@12]/2", C: "[f#3,a#3]",
})).s("gm_pad_sweep").gain(0.51)

// other · agogo · "Tic-tac"
const agogo = note("<[~ b6!15] [b6!16]!5 ~ [b6!16]!37 ~@2 [b6!16]!34 ~@2>").s("gm_agogo").gain(0.26)

// other · glockenspiel · "Sonnerie"
const glockenspiel = note(`<
  ~@2 A@4 ~@4 A@2 ~@3 A@2 ~@3 A@2 ~@10 A@12 ~@2 A@2 ~@3 A@2 ~@3 A@2 ~@10 A@12 ~@2
>`.pickRestart({
  A: "b6 ~ b6 ~ b5 ~@3 b6!2 ~ b6!2 ~@3",
})).s("gm_glockenspiel").gain(0.31)

// other · pad poly · "Synth-2"
const pad_poly_2 = note("<~@32 A B C D E B C A E ~ E F A ~@23 A B C D E B C A E ~ E F A ~>".pickRestart({
  A: "b4", B: "a#4", C: "g#4", D: "g#4@3 g#4", E: "f#4", F: "c#5",
})).s("gm_pad_poly").gain(0.41)

// other · orchestral harp · "Arp"
const orchestral_harp = note(`<
  ~@16 A ~@15 B C D E B C D E B C D E ~@8 A ~@15 B C D E B C D E B C D E ~@2
>`.pickRestart({
  A: "g#4 g#5 g#4 g#5 g#4 g#5 g#4 g#5 g#4 g#5 g#4 g#5 g#4 g#5 g#4 g#5",
  B: "f#4 b4@2 f#4 b4@2 b4@2 f#4 b4@2 f#4 b4@2 b4@2", C: "f#4 c#5@2 f#4 c#5@2 c#5@2 f#4 c#5@2 f#4 c#5@2 c#5@2",
  D: "g#4 c#5@2 g#4 c#5@2 c#5@2 g#4 c#5@2 g#4 c#5@2 c#5@2", E: "g#4 b4@2 g#4 b4@2 b4@2 g#4 b4@2 g#4 b4@2 b4@2",
})).s("gm_orchestral_harp").gain(0.41)

// drums · kick
const kick = s("bd").struct("<~@6 A B@24 C B@12 D B@22 C B@12 D E>".pickRestart({
  A: "~@8 x ~@2 x ~ x ~@2", B: "x!4", C: "x ~@4 x ~ x ~@4 x ~@3", D: "x!2 ~@2", E: "x",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct("<~@6 A B@24 C D B@11 E F B@21 C D B@11 E F>".pickRestart({
  A: "~@3 x!7 ~@6", B: "~ x ~ x", C: "x!5 ~ x!10", D: "x!2 ~ x", E: "x ~@3 x ~@3 x ~@2 x ~ x ~@2", F: "x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@2 A@4 ~ B@4 C B@4 C B@4 C B@9 D B@12 ~@2 B C B@4 C B@4 C B@9 D B@12 ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!8", C: "x!5 ~ x ~", D: "x ~@2 x!2 ~ x ~ x ~ x ~ x ~ x ~",
})).gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@4 A ~@4 A ~@25 A ~@4 A ~@4 A ~@24>".pickRestart({
  A: "~@5 x ~ x",
})).gain(0.46)

stack(bass, pad_poly, pad_sweep, agogo, glockenspiel, pad_poly_2, orchestral_harp, kick, snare, hihat, open_hat)

More by Jean Michel Jarre