Strudelify

Circle of Life

Elton John

KeyC majorTempo106 bpm
0:00/0:00
// Circle of Life — John Elton
// 106 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(106/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 · "Bass Melody"
const synth_bass_1 = note(`<
  ~@11 A B@6 ~ C@2 ~@3 D ~@2 E ~@4 D ~@2 E ~@21 D ~@2 E ~@4 D ~@2 E ~@36 F ~@10 G ~ H
>`.pickRestart({
  A: "e4", B: "[~@3 e4@16 ~@3 e4@16 ~@2 f4@16 ~@3 f4@16 ~@3 e4@16 ~@2]/6", C: "[~ f4@4 ~@3]/2", D: "~ d4", E: "f4@3 ~",
  F: "[a#4,d5]@13 ~@3", G: "~@12 g#3@3 ~", H: "[a#3,d#4] ~, g4@3 ~@5",
})).s("gm_synth_bass_1").gain(0.51)

// bass · voice oohs · "Bass"
const bass = note(`<
  A@8 B@3 C D E@6 F@2 G H@2 I J K L M N O H P Q R S T U O@4 V W X Y Z AA AB AC AD AE AF AG G H@2 I J K L M N O H P Q R S
  T U O@4 V W X Y Z AA AB AC AD AE AF O AH AI AJ AH AK AL AM AN AH AI AJ AH AK AO AP AQ AR O@3 AS AT AU AV AW AX AY AZ
  BA BB BC BD
>`.pickRestart({
  A: "[~@6 g3@35 ~ c4!2 [f3,a3,c4]@9 [g3,b3,d4]@2 ~ [g3,b3,d4]@5 ~@2 c3@4 c3@2 ~ g3@7 b3@5 g3@16 g3@2 c4@16 ~ c4!2 [f3,a3,c4]@9, ~@6 c3@8 ~@68 c3@9 ~@37]/8", // F G F
  B: "[~ [g3,b3,d4]@9 [a3,c4]@9 ~ f3@2 f3@5 a3@11 [g3,d4]@2 ~ [g3,d4]@2 ~@5]/3", C: "c3", D: "c4@2 ~ c3@13",
  E: "[~ c4@2 b3@2 ~ [a3,c4]@16 a3@2 [a3,d4]@16 ~ a3@2 [g3,c4]@16 ~@3 c3@16 ~ c3@2 a2@15]/6", // Am D5 C5
  F: "[~ a2@2 ~ a2@16 a2@2 ~ g2@7 g2@2]/2", G: "g2!2", H: "c3@3 c3 c3@4", I: "b2@3 b2 b2@4",
  J: "c3@6 c3@2 c3@3 ~ b2@3 ~", K: "a2@3 a2 a2@4", L: "d3@6 d3@2 d3@3 ~ c3@3 ~", M: "b2@3 a#2 a#2@4",
  N: "g2@6 d3@2 g3@3 ~ a2@3 ~", O: "c3@5 ~ c3@2 c3@6 ~@2", P: "b2@3 ~@3 b2@2 b2@8", Q: "c3@5 ~ c3@2 c3@3 ~ b2@3 ~",
  R: "a2@5 ~ a2@2 a2@6 ~@2", S: "d3@5 ~ d3@2 d3@3 ~ c3@3 ~", T: "a#2@5 ~ a#2@2 a#2@3 ~ a2@3 ~", U: "g2@3 ~ g3@3 ~",
  V: "f2@5 ~ f2@2 f2@6 ~@2", W: "f3@13 ~@3", X: "g2@5 ~ g2@2 g2@6 ~@2", Y: "g2@6 ~@2 g3@3 ~ f3@3 ~",
  Z: "e3@5 ~ e3@2 e3@6 ~@2", AA: "[c#3,a3]@13 ~@3", AB: "[d3,a3]@6 ~@2 d3@3 ~ d3@3 ~", AC: "g#3@5 ~ g#3@2 g#3@8",
  AD: "g3@5 ~ g3@2 [g3,c4]@6 ~@2", AE: "[f3,g3,c4]@6 ~@2 b3@3 ~ g3@3 ~", AF: "[c3,f3]@6 ~@2 c3@3 ~ g3@2 a3@2",
  AG: "g2@12 g2@3 ~, c3@5 ~@11", AH: "c3@5 ~ g3@2 c4@6 ~@2", AI: "c3@5 ~ a3@2 c4@6 ~@2", AJ: "b2@5 ~ g3@2 b3@6 ~@2",
  AK: "a2@5 ~ e3@2 a3@6 ~@2", AL: "e3@5 ~ f3@2 a3@6 ~@2", AM: "a#2@5 ~ f3@2 a#3@6 ~@2", AN: "a2@5 ~ e3@2 g3@6 ~@2",
  AO: "d3@5 ~ f3@2 a3@6 ~@2", AP: "a#2@3 ~ f3@3 ~ a2@3 ~ d3@3 ~", AQ: "a2@3 ~ g3@3 ~", AR: "c3@5 ~ c3@2 c3@8",
  AS: "f3@5 ~ f3@2 f3@6 ~@2", AT: "f3@5 ~ f3@2 [f3,a3]@6 ~@2", AU: "g3@5 ~ g3@2 g3@3 ~ g3@3 ~",
  AV: "[g3,b3]@6 ~@2 g3@3 ~ f3@3 ~", AW: "[d#3,g3]@5 ~ [d#3,g3]@2 [d#3,g3]@3 ~ a#3@3 ~",
  AX: "[c3,e3,a#3]@6 ~@2 c3@3 ~ e3@3 ~", AY: "[f3,g#3]@5 ~ [f3,g#3]@2 [f3,g#3]@6 ~@2",
  AZ: "[b2,g#3]@5 ~ [b2,g#3]@2 [b2,g#3]@6 ~@2", BA: "[a#2,g3]@5 ~ [a#2,g3]@2 [a#2,g3]@3 ~ d#3@3 ~",
  BB: "[a#2,d#3,g#3]@3 ~ a#2@3 ~", BC: "[d#3,g#3]@5 ~ [d#3,g#3]@2 [d#3,g#3]@3 ~ d#3@3 ~", BD: "d#3@3 ~ d#2@3 ~",
})).s("gm_synth_bass_1").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~@21 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!3 ~ x", C: "x",
})).gain(0.26)

// drums · rim
const rim = s("rim").struct("<~@21 [~ x ~ x]!32 ~ [~ x ~ x]!64 ~>").gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@118 x>").gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~@21 [x!8]!32 x [x!8]!64 ~>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@21 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@15 x",
})).gain(0.31)

// drums · ride
const ride = s("rd").struct("<~@118 x>").gain(0.51)

stack(synth_bass_1, bass, kick, rim, low_tom, hihat, open_hat, ride)

More by Elton John