Strudelify

Candle in the Wind

Elton John

KeyF majorTempo121 bpm
0:00/0:00
// Candle in the Wind — Elton John
// 121 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(121/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 · fretless bass · "Reset Volume"
const bass = note(`<
  ~ A@2 B@2 C D B@2 A@2 E F G H B@2 I@2 J K L M N I O P Q R I S T G U V W X Y Z AA AB AC AD AE AF AG V AH AI AJ@2 AK AL
  AM AN AO AP AQ AR AS AT AO AU T H ~
>`.pickRestart({
  A: "[f1@7 a1]/2", B: "[bb1@27 ~ bb1@4]/2", C: "f1@15 ~", D: "f1@3 a1", E: "bb1@15 ~", F: "bb1", G: "f1@13 ~@3",
  H: "f1", I: "c2@11 ~ c2@4", J: "f1@4 f1@7 ~ a1@4", K: "bb1@11 ~ bb1@4", L: "f1@4 f2@2 f1 ~", M: "f1@2 f2 f1",
  N: "c2@11 ~ c2@3 ~", O: "bb1@12 bb1@3 ~", P: "bb1@11 ~ bb1@2 c2@2", Q: "d2@15 ~", R: "d2@11 ~ d2@4",
  S: "bb1@5 ~ bb1 ~", T: "bb1@3 a1@3 g1@2", U: "f1@4 ~@2 f1 ~ f1@6 ~@2", V: "f1@4 ~@2 f1 ~ f1@4 a1@4",
  W: "bb1@5 ~ bb1 ~ bb1@5 ~@3", X: "bb1@4 ~@2 bb1 ~ bb1@3 ~ bb1@2 c2@2", Y: "f1@4 ~@2 f1 ~ f1@4 ~@4",
  Z: "f1@4 ~@2 f1 ~ f1@4 a1@3 ~", AA: "bb1@2 ~@2 bb1@3 ~", AB: "bb1@4 ~@2 bb1 ~ bb1@4 c2@4",
  AC: "f2@4 ~@2 f2 ~ f2@3 ~ f2@2 c2@2", AD: "f1@5 ~@3 f1@4 a1@4", AE: "bb1@5 ~ bb1 ~ bb1@6 ~@2",
  AF: "bb1@5 ~ bb1 ~ bb1@3 ~ bb1@2 c2@2", AG: "f1@5 ~ f1 ~ f1@4 c2@2 f2@2", AH: "bb1@4 ~@2 bb1 ~ bb1@5 ~@3",
  AI: "bb1@5 ~ bb1 ~ bb1@2 a1@2 bb1@2 b1@2", AJ: "c2@4 ~@2 c2 ~ c2@7 ~", AK: "f1@5 ~ f1 ~ f1@4 a1@3 ~",
  AL: "bb1@4 ~@2 bb1 ~ bb1@8", AM: "f1@5 ~ f1@2 f2@8", AN: "f1@2 ~ f1 f2@2 f1@2", AO: "c2@5 ~ c2 ~ c2@7 ~",
  AP: "c2@5 ~ c2 ~ c2@3 ~ c2@4", AQ: "bb1@5 ~ bb1 ~ bb1@7 ~", AR: "bb1@5 ~ bb1 ~ bb1@2 a1@2 bb1@2 c2@2",
  AS: "d2@5 ~ d2 ~ d2@7 ~", AT: "d2@5 ~ d2 ~ d2@4 a1@2 d1@2", AU: "bb1@4 ~@2 bb1 ~ bb1@7 ~",
})).s("gm_fretless_bass").gain(0.63)

// chords · piano
const piano = note(`<
  ~ A B C D E F G H A I C J I K L M N O P Q R S T U V W X Y Z AA AB AC A B C D E F G H A I C J I K L M N O P Q R S T U V
  W X Y Z AA AD AE ~
>`.pickRestart({
  A: "[f3,a3,c4]@5 ~@3 [f3,a3,c4]@5 ~@3", B: "[f3,a3,c4]@5 ~@3 [f3,c4]@4 ~@4, ~@4 a3@3 ~",
  C: "[f3,bb3,d4]@5 ~@3 [f3,bb3,d4]@6 ~@2", D: "[f3,bb3,d4]@5 ~@3 [f3,bb3]@6 ~@2, ~@2 d4 ~",
  E: "[f3,a3,c4]@6 ~@2 [f3,a3,c4]@5 ~@3", F: "[a3,c4]@6 ~@2 [f3,a3,c4]@5 ~@3, f3 ~@3",
  G: "[bb2,d3,f3]@2 ~@2 [d3,f3] ~@2 [d3,f3], ~@8 bb2 ~@3 bb2@4", H: "~@4 d3@7 ~@5, ~@2 bb2@7 ~@7, ~@4 f3@5 ~@7",
  I: "[f3,a3,c4]@4 ~@4 [f3,a3,c4]@5 ~@3", J: "[f3,bb3,d4]@5 ~@3 [f3,bb3,d4]@5 ~@3",
  K: "[a3,c4]@3 ~ [f3,a3,c4]@2 ~@2, f3 ~@3", L: "[bb2,d3,f3]@5 ~@3 [bb2,d3,f3]@2 ~@4 [d3,f3]@2, ~@3 bb2",
  M: "~ bb2 [d3,f3] ~ [d3,f3]@2 ~@2, ~@3 bb2@3 ~@2", N: "[c2,c3]@6 ~@2 [c2,c3]@5 ~@3", O: "[c2,c3]@3 ~ [c2,c3]@2 ~@2",
  P: "[f2,f3]@5 ~@3 [f2,f3]@4 ~@4", Q: "[bb2,bb3] ~ [bb2,bb3] ~", R: "[f2,f3]@5 ~@3 [f2,f3]@6 ~@2",
  S: "[f2,f3]@5 ~@3 f3@4 ~@4, ~@4 f2 ~@3", T: "[c3,c4]@5 ~@3 [c3,c4]@4 ~@4",
  U: "[c3,c4]@2 g3@2 ~@2 g3@2 c3@5 ~@3, ~@4 c4@9 ~@3", V: "[bb2,bb3]@7 ~ [bb2,bb3]@6 ~@2",
  W: "[bb2,bb3]@3 ~ [bb2,bb3]@3 ~", X: "[d3,d4]@5 ~@3 [d3,d4]@5 ~@3", Y: "[d3,d4]@3 ~ [d3,d4]@2 ~@2",
  Z: "[c3,c4]@5 ~@3 [c3,c4]@3 ~@5", AA: "[bb2,bb3]@5 ~@3 [bb2,bb3]@6 ~@2",
  AB: "[bb2,bb3] ~ [bb2,bb3] ~ bb2 ~ [a2,a3]@3 ~@3 [g2,g3]@2 ~@2", AC: "[f2,f3]@5 ~@3",
  AD: "[bb2,bb3] ~ [bb2,bb3] ~ bb2 ~ [a2,a3]@3 ~@3 [g2,g3,d4]@2 ~@2", AE: "[f3,c4], f2@5 ~@3",
})).s("gm_piano").gain(0.64).pan(0.4)

// chords · piano
const piano_2 = note(`<
  ~ A@2 B@2 C D@3 E@2 F G@2 H@3 I J K@2 L@2 M@2 N O@2 P Q R S T A@2 B@2 C D@3 E@2 F G@2 H@3 U V W@2 L@2 M@2 X Y@2 P Z AA
  AB AC ~
>`.pickRestart({
  A: "[a4 ~ a4 ~ a4@2 g4 a4@5 f4 g4 a4 f4]/2", B: "[~@4 d5@2 ~@2 d5@4 eb5@2 d5@5 ~ c5@2 d5@4 c5@2 d5@2 c5 ~]/2",
  C: "c5@4 f4 ~ f4@5 ~ f4@4", D: "[bb4@4 a4@2 g4@6 f4@2 d4@22 ~@2 d4@2 f4@2 g4@2 a4@2 bb4 ~]/3",
  E: "[c5@2 ~@2 c5@17 ~@3 f4@2 g4@2 a4@2 f4@2]/2", F: "~@4 d5 ~ d5@4 ~@2 eb5@3 ~",
  G: "[d5@2 c5 ~ c5@2 d5@2 c5@3 ~ c5 ~@7 f4@4 g4@4 a4@4, ~@7 c5@5 ~@4]/2",
  H: "[bb4@4 a4@2 g4@6 a4@2 d4@28 ~@2 a4 ~ bb4 ~]/3", I: "[e4,g4,c5]@4 ~@2 [e4,g4,c5] ~ [e4,g4,c5]@4 ~@2 a4 ~",
  J: "[e4,g4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,c5]@3 ~@3 a4@2 bb4 ~, ~@6 g4@5 ~@5", // C
  K: "[[f4,a4,c5]@2 ~@2 [f4,a4,c5] ~ [a4,c5]@3 ~ d5 ~ [d4,f4]@8 ~@8 a4@2 bb4 ~, ~@3 f4@3 ~@10]/2", // F Am Dm
  L: "[[f4,a4,c5]@5 ~@3 [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,d5] ~ [f4,a4,c5]@5 ~ bb4@4 a4@4 bb4 ~@3]/2", // F Dm F
  M: "[[e4,a4]@3 ~ [e4,g4] ~ [e4,g4]@16 ~@4 c5 ~ c5@3 ~]/2", // A5 Em
  N: "[f4,bb4,d5] ~ [f4,bb4,d5]@3 ~ [f4,bb4,d5]@3 ~ d5 ~ e5@4", // Bb
  O: "[[bb4,f5]@4 e5@4 [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,a4]@3 ~@5 a4@8 f4 ~, d5@3 ~@11 d5@16 ~@2, ~@20 f4@7 ~@5]/2", // Bb5 Bb F
  P: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ bb4@6 [f4,a4,c5] ~@3, ~@6 f4@3 ~@7", Q: "[e4,a4]@3 ~ [e4,g4] ~ [e4,g4]@3 ~@5 c4 ~",
  R: "d4@4 f4@2 ~@2 f4@2 g4@2 d4 ~@3", S: "[f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [e4,a4,c5]@5 ~ [d4,g4,bb4]@3 ~",
  T: "[c4,f4,a4]@9 ~@7", U: "[e4,g4,c5]@5 ~ [e4,g4,c5] ~ [e4,g4,c5]@4 ~@2 a4@2",
  V: "[e4,g4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,c5]@3 ~@3 a4@2 bb4 ~, ~@3 g4@3 ~@2", // C
  W: "[[f4,a4,c5]@2 ~@2 [f4,a4,c5] ~ [a4,c5]@3 ~ d5 ~ [d4,f4]@15 ~ a4@2 bb4 ~, ~@3 f4@3 ~@10]/2", // F Am Dm
  X: "[f4,bb4,d5] ~ [f4,bb4,d5]@3 ~ [f4,bb4]@4 d5 ~ e5@4, ~@3 d5 ~@4", // Bb Bb5
  Y: "[[bb4,f5]@4 e5@4 [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,a4]@3 ~ f4 ~ a4@8 f4@2 ~@2, d5@3 ~@11 d5@16 ~@2, ~@5 f4 ~@2]/2", // Bb5 Bb F
  Z: "[e4,a4]@3 ~ [e4,g4] ~ [e4,g4]@3 ~@5 c4@2", AA: "d4@2 f4 ~ f4 g4 d4@2",
  AB: "[f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [e4,a4,c5]@3 ~@3 [g4,bb4] ~@3, ~@6 d4 ~", AC: "[c4,f4,a4]",
})).s("gm_piano").gain(0.72).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A@7 B@3 C@2 D@2 E@2 F@6 G@2 H@5 I@2 J K@7 L@3 M@2 N@2 O@2 P@6 Q@2 R@5 S@2 T ~
>`.pickRestart({
  A: "[c3@31 d3@32 c3@33 d3@16, f2]/7", B: "[~@5 c3@11]/3", C: "d3/2", D: "c3/2", E: "[d3@31 ~]/2",
  F: "[g3@32 a3@15 [d3,bb3]@16 [c3,a3]@32 ~, c3 ~]/6", G: "[c3,g3]/2", H: "[bb3@32 a3@31 [c3,g3]@17, d3@4 ~]/5",
  I: "[bb3@21 a3@6 g3@4 ~, d3]/2", J: "[c3,f3]", K: "[c4@31 d4@32 c4@33 d4@16, f3]/7", L: "[~@5 c4@11]/3", M: "d4/2",
  N: "c4/2", O: "[d4@31 ~]/2", P: "[g4@32 a4@15 [d4,bb4]@16 [c4,a4]@32 ~, c4 ~]/6", Q: "[c4,g4]/2",
  R: "[bb4@32 a4@31 [c4,g4]@17, d4@4 ~]/5", S: "[bb4@21 a4@6 g4@4 ~, d4]/2", T: "[c4,f4]",
})).s("gm_string_ensemble_2").gain(0.5).pan(0.9)

// chords · string ensemble 2
const string_ensemble_2_2 = note(`<
  ~ A@8 B@2 C@2 B@2 D@2 E@4 F@4 G@2 H@2 I J@2 K L@8 B@2 C@2 B@2 D@2 E@4 F@4 G@2 H@2 I J@2 M ~
>`.pickRestart({
  A: "[a3 bb3 a3 bb3, f4]/8", B: "a3/2", C: "bb3/2", D: "[bb3@29 ~@3]/2",
  E: "[e4@2 ~ bb3, c4@47 d4@16 ~, ~@16 f4@9 ~@7]/4", F: "[f4@16 e4@13 [d4,f4] ~ f4, c4@29 ~ [e4,g4] ~, ~@61 a4@2 ~]/4",
  G: "[~ f4@15 d4@15 ~, ~ bb4@31]/2", H: "[a4@8 ~ f4@23, d4]/2", I: "[c4,e4]", J: "[[d4,f4]@21 [c4,e4]@6 [bb3,d4]@5]/2",
  K: "[a3,c4]@15 ~", L: "[a3@31 ~ bb3@32 a3@32 bb3@32, f4]/8", M: "[a3,c4]",
})).s("gm_string_ensemble_2").gain(0.56).pan(0.1)

// other · overdriven guitar
const overdriven_guitar = note("<~@19 A B@3 C@2 D@2 E@2 F G H I ~@18 J K@5 L@2 M@2 N O P Q@2>".pickRestart({
  A: "bb4@3 f4", B: "[bb3@43 ~@5]/3", C: "c4/2", D: "[d4@7 e4]/2", E: "f4/2", F: "e4", G: "d4", H: "bb3@6 a3@5 g3@4 ~",
  I: "f3", J: "bb5@3 f5", K: "[bb4@47 c5@28 ~ c5@4]/5", L: "[d5@27 ~ d5@2 e5@2]/2", M: "[f5@27 ~ f5@4]/2",
  N: "e5@3 c5@3 g4@2", O: "f4@15 ~", P: "bb4@3 a4@3 g4@2", Q: "[f4@9 ~@7]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.3)

// other · tubular bells
const tubular_bells = note("<~@48 A B A B C D A B E C E F E G D ~ D ~>".pickRestart({
  A: "~@12 c5 ~@3", B: "c6 ~@15", C: "bb5 ~@15", D: "f5 ~@15", E: "~@12 c6 ~@3", F: "a5 ~@15", G: "g5 ~@15",
})).s("gm_tubular_bells").gain(0.68).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A@2 B A C A C A C A C A C A C A C A C A C A D E@3 C A D E D E D E D@5 E D@3 F D@3 G D H D A D@2 H E D@2 I A
  ~
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "x ~@2 x ~@2 x ~", D: "x ~@2 x ~@3 x", E: "x ~@2 x ~@4", F: "x ~@2 x ~ x ~@2",
  G: "x ~@9 x!2 ~@4", H: "x ~@6 x", I: "x ~@5 x ~@3 x!2 ~@4",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@17 A@17 B A@9 C A@3 D A@3 E A@3 F A@5 E G ~@2>".pickRestart({
  A: "~ x", B: "~@4 x!2 ~@2", C: "~@4 x ~@2 x", D: "~@2 x ~ x ~@3 x!2 ~@2 x ~@3", E: "~@2 x!2", F: "~@3 x ~@2 x ~",
  G: "~ x ~ x",
})).gain(0.62)

// drums · low tom
const low_tom = s("lt").struct("<~@16 [~@5 x!2 ~] ~@39 [~@10 x ~@3 x!2] ~@9>").gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@7 C B@7 ~ D A E@2 A E@3 A F A@6 D G A H A@3 I D A@3 D A@2 B E@3 J E@3 K L E L E L J ~@3
>`.pickRestart({
  A: "x!4", B: "~ x", C: "~@4 x!2 ~@2", D: "~ x!3", E: "x!2 ~ x", F: "x!3 ~", G: "x ~ x ~@3 x!2", H: "x ~ x ~ x ~ x!2",
  I: "x ~ x ~ x!3 ~", J: "x!2 ~@2", K: "x", L: "~ x ~ x",
})).gain(0.62)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 [~@3 x!2 ~@3] ~@39 [~@2 x!3 ~@2 x!2 ~@7] ~@9>").gain(0.62)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@8 B ~ C@2 ~ C@3 ~ A ~@6 B C ~@6 B ~@3 B ~@2 D C@7 ~ C@6 ~@3>".pickRestart({
  A: "~@3 x", B: "x", C: "~ x", D: "~@3 x ~@4",
})).gain(0.62)

// drums · crash
const crash = s("cr").struct("<~@47 A B ~@8 C ~ C ~ C ~ D C ~>".pickRestart({
  A: "~@7 x", B: "x!2 ~ x", C: "x", D: "x ~ x!2 ~@2 x ~",
})).gain(0.62)

// drums · tambourine
const tambourine = s("tb").struct("<~@33 A@13 B A C A@14 B D ~>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x ~ x ~ x ~ x ~ x!8", D: "x",
})).gain(0.56)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@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 ~@3
>`.pickRestart({
  A: "~@5 x!2 ~",
})).gain(2.84)

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

stack(
  bass, piano, piano_2, string_ensemble_2, string_ensemble_2_2, overdriven_guitar, tubular_bells, kick, snare, low_tom,
  hihat, mid_tom, open_hat, crash, tambourine, cabasa, shaker
)

More by Elton John