Strudelify
Your Song cover art

1970 · Elton John

Your Song

Elton John

KeyF majorTempo100 bpm
0:00/0:00
// Your Song — John Elton
// 100 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 143 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// chords · piano
const piano = note(`<
  ~@4 A@2 B@2 C D E C@2 F G H I@2 G H J@3 K@7 L@8 M@4 N@2 O@3 P@3 Q@3 G H I@2 G H J@3 K@7 L@8 M@4 N@2 O@3 P@3 Q@3 G H
  I@2 G H I@2 G H I@2 G H R@6 N@2 O@3 P@3 Q@3 G H S T G H U@8 ~@6
>`.pickRestart({
  A: "f2@2 f2@2 f2@2 f2!2 f2@2 f2@4 f2@2",
  B: "[f2@2 f2@2 f2@2 f2!2 f2@2 f2@4 f2@2 f2@2 f2@2 f2@2 f2!2 f2@2 f2@4 f2@2, [a3,c4,f4]]/2", // F
  C: "f2@2 f2@2 f2@2 f2!2 f2@2 f2@4 f2@2, [d4,f4,bb4]", D: "f2@2 f2@2 f2@2 f2!2 f2@2 f2@4 f2@2, [c4,e4,g4]",
  E: "f2@2 f2@2 f2@2 f2!2 f2@2 f2@4 f2@2, [c4,f4,a4]", // F
  F: "g4 ~ f2@2 f2@2 f2!2 f2@2 f2@2 [ab2,c4,eb4,ab4]@4, [c4,f4]@3 ~, f2 ~@7, ~ a4@11 ~@4", // Ab F5
  G: "f2@2 f2@2 f2@2 f2!2 f2@2 f2@2 [ab2,c4,eb4,ab4]@4, [c4,f4,a4]@3 ~", // Ab F
  H: "eb2@2 eb2@2 eb2@2 eb2!2 eb2@2 ~@4 eb2@2, [g3,bb3,eb4]@3 [g3,bb3,eb4], ~@5 eb2@2 ~", // Eb
  I: "[bb2@2 bb2@2 bb2@2 bb2!2 bb2@2 bb2@4 bb2@2 bb2@2 bb2@2 bb2@2 bb2!2 bb2@2 bb2@2 [ab2,c4,eb4,ab4]@4, [bb3,d4,f4]@7 ~]/2", // Ab Bb
  J: "[bb2@2 bb2@2 bb2@2 bb2!2 bb2@2 [bb2,f4]@2 f4@2 ~@8 f2@2 ~@2 f4@2 f4@2 ~@8 f2@2 ~@2 f4@2 f4@2 [d4,f4,bb4]@2, [bb3,d4,f4]@5 ~ bb2@2 f2@3 ~ f2@4 f2@3 ~ f2@4, ~@7 [d4,f4,bb4]@2 [c4,f4,a4]@4 ~@2 [d4,f4,bb4]@2 [c4,f4,a4]@4 ~@3]/3", // Bb5 Bb F Bb F
  K: "[~@2 [d4,f4,bb4]@4 f2@2 ~@2 f4@4 ~@2 f2@6 f2@2 ~@2 f4@2 f4@2 ~@6 bb4@2 ~@2 f2@2 [a2,f4]@2 [c3,f4]@2 [eb2,g4,bb4,eb5]@4 g2@2 bb2@2 d2@4 f2@2 [bb2,f4]@2 g4@2 bb4@4 bb4@2 a4@4 f4@4 f2@8 f2!2 f2@2 ~@2 f4@2 ~@8 f2@2 ~@2 f4@2 f4@2 [f4,bb4,d5]@2, f2@3 [c4,f4,a4]@2 ~@2 [a3,c4,f4]@6 ~@2 [d4,f4,bb4]@3 ~ [c4,f4,a4]@2 ~@4 [g4,bb4,eb5]@2 [f4,bb4,d5]@3 ~@2 bb3@7 [a3,c4,f4]@7 ~@10, ~@4 f2@4 ~@4 f2@4 f2@4 ~@11 d2@8 ~@6 f2@3 f2@3 ~ f2@4, ~@32 f4@5 ~@10 [f4,bb4,d5]@2 [f4,a4,c5]@4 ~@3]/7", // Bb Dm F5 Eb Bb5 Bb F Bb …
  L: "[~@2 [f4,a4,c5]@4 f2@2 ~@4 f4!2 ~@6 d5@2 f2@2 ~@2 c5@4 ~@2 f2@6 f2@2 ~@2 f4@2 f4@2 ~@4 [d4,f4,bb4]@4 ~@2 f2@2 a2@2 c3@2 eb2@4 g2@2 bb2@2 d2@4 f2@2 [bb2,f4]@2 bb4@6 bb4@2 a4@4 f4@4 f2@8 f2!2 ~@2 f4@2 f4@2 ~@8 bb2@2 ~@2 f4@2 f4@2 [g4,bb4,eb5]@2, f2@3 [f4,a4,c5]@3 ~ [f4,bb4,d5]@3 ~ [f4,bb4,d5]@2 ~@2 [f4,a4,c5]@6 ~@2 [d4,f4,bb4]@2 ~@2 [c4,f4,a4]@2 f4@2 [g4,bb4,eb5]@4 [f4,bb4,d5]@3 ~ f4@6 ~@2 [a3,c4,f4]@6 ~@2 [g4,bb4,eb5]@2 [f4,bb4,d5]@4 ~@3, ~@4 f2@4 f2@3 ~ f2@4 ~@4 f2@4 f2@4 ~@11 [d2,bb3]@8 ~@5 f2@4 bb2@3 ~ bb2@4]/8", // F Bb Bb5 Eb F Bb F Bb …
  M: "[~@3 bb2 ~@2 f4 ~@2 [f4,bb4,d5]@2 bb2 ~ c5 bb4 ~@2 [f4,a4,c5] ~ f2 ~@2 [c4,f4,a4] ~@2 g4 ~ c3!5, bb2@3 ~ bb2@4 bb2@3 ~ bb2@4 f2@3 ~ f2@4 c3@3 ~@5, ~@2 [f4,bb4,d5]@10 ~@2 [g4,bb4,eb5]@4 ~@4 [f4,bb4,d5]@4 ~@4 [f4,bb4,d5]@4 ~@2 [f4,a4,c5]@8 ~@2 [c4,f4,a4]@4 ~@2 [c4,e4,g4]@11 ~]/4", // Bb F Bb Eb Bb F C
  N: "[[c4,e4,g4,bb4]@2 bb4 ~@5 f2@3 f2!2 f2@2 f2, c3@2 c3!2 ~@4, ~@3 [bb3,d4,a4]@2 f4@2 [c4,f4,a4]@9]/2", // C7 Bbmaj7 F
  O: "[f2@3 f2!2 f4!2 ~@4 bb2 ~ f4!2 ~@4 bb2 ~ f4!3, [c4,eb4,a4]@5 f2@3 bb2@3 ~ bb2@4 bb2@3 ~ bb2@4, ~@7 [g4,bb4,eb5]@2 [f4,bb4,d5]@4 ~@2 [g4,bb4,eb5]@2 [f4,bb4,d5]@4 ~@3]/3", // Adim Eb Bb Eb Bb
  P: "[[bb2,g4,bb4,eb5]@6 bb2@2 ~@2 [d4,f4,bb4]@4 ~@4 [f4,a4,c5]@2 ~@2 f2@2 ~@2 a4@2 a4!2 ~@8 c3@2 c3@2 ~@2 c4@2 c4@2, ~@3 [f4,bb4,d5]@2 ~@2 [f4,bb4,d5]@2 ~ [f4,a4,c5]@3 ~@2 [c4,f4,a4]@2 [c4,e4,g4]@5 ~@2, ~@4 bb2@4 f2@3 ~ f2@4 c3@3 ~@2 c3@3]/3", // Eb Bb F Bb F C
  Q: "[[c4,e4,g4,bb4]@2 [c4,e4,g4,bb4] ~ c3 [bb3,d4,f4]@2 ~ f2@3 f2!2 [f2,bb3,d4,f4]@2 f2 f2@3 f2!3 [ab2,c4,eb4,ab4]@2, c3@4 ~ c3@3 ~@16, ~@3 [c4,e4,a4]@2 ~@2 [bb3,d4,g4]@6 ~@2 [a3,c4,f4]@7 ~@2]/3", // C7 Bb Ab Am Gm F
  R: "[bb2@2 bb2@2 bb2@2 bb2!2 ~@2 f4@2 f4@2 ~@8 bb2@2 ~@2 f4@2 f4@2 ~@8 bb2@2 ~@4 f4@2 ~@4 [f4,bb4,d5]@4 bb2@2 ~@2 c5@2 bb4@2 ~@4 [f4,a4,c5]@2 ~@2 f2@2 ~@4 [c4,f4,a4]@2 ~@4 g4@2 ~@2 c3@2 c3@2 c3@2 c3@2 c3@2, [bb3,d4,f4]@10 ~@4 [g4,bb4,eb5]@4 [f4,bb4,d5]@8 ~@4 [g4,bb4,eb5]@4 [f4,bb4,d5]@10 ~@2 [g4,bb4,eb5]@4 ~@4 [f4,bb4,d5]@4 ~@4 [f4,bb4,d5]@4 ~@2 [f4,a4,c5]@8 ~@2 [c4,f4,a4]@4 ~@2 [c4,e4,g4]@11 ~, ~@4 bb2@4 bb2@3 ~ bb2@4 bb2@3 ~ bb2@4 bb2@3 ~ bb2@4 f2@3 ~ f2@4 c3@3 ~@5]/6", // Bb F Bb Eb Bb Eb Bb Eb …
  S: "bb2@2 bb2@2 bb2@2 bb2!2 bb2@2 bb2@4 bb2@2, [bb3,d4,f4]", // Bb
  T: "f2@2 f2@2 f2@2 f2!2 f2@2 f2@2 [ab2,c4,eb4,ab4]@4, [a3,c4,f4]@3 ~", // Ab F
  U: "[~ bb4 d5 f5 e5 c5 bb2!2 bb2@2 bb2@2 bb2@4 ~ bb5 d6 f6 e6 c6 bb2!2 bb2@2 bb2@4 bb2@2 ~ bb4 d5 f5 e5 c5 bb2!2 bb2@2 bb2@4 bb2@2 ~@4 e4 c4 bb2!2 bb2@2 bb2@4 bb2@2 bb2@2 bb2@2 bb2@2 bb2!2 bb2@2 bb2@4 bb2@2 bb2@2 bb2@2 bb2@2 bb2!2 bb2@2 bb2@4 bb2@2 ~@32, [d4,f4]@25 bb2!2 ~@37, bb3@49 bb3@15 ~@64, bb2!3 d5@5 bb2!3 d6@5 bb2!3 d5@5 bb2 d4@2 d4@37, ~@51 f4@13 ~@64]/8", // Dm
})).s("gm_piano").gain(0.72).pan(0.2)

// bass · fretless bass
const bass = note(`<
  A@13 B@2 C D E B C D A@4 F@3 A@5 F@3 A D@3 A G@2 A@2 D@3 A G@2 A B@2 C D E B C D A@4 F@3 A@5 F@3 A D@3 A G@2 A@2 D@3 A
  G@2 A B@2 C D E B C D E B C D E B C D@4 A G@2 A@2 D@3 A G@2 A B@2 C D B@2 C D@6 A@8
>`.pickRestart({
  A: "[f1,f2]@3 [f1,f2] [f1,f2]@2 [f1,f2]@2", B: "[f1,f2]@3 [f1,f2] [f1,f2]@2 [ab1,ab2]@2",
  C: "[eb1,eb2]@3 [eb1,eb2] [eb1,eb2]@2 [eb1,eb2]@2", D: "[bb1,bb2]@3 [bb1,bb2] [bb1,bb2]@2 [bb1,bb2]@2",
  E: "[bb1,bb2]@3 [bb1,bb2] [bb1,bb2]@2 [ab1,ab2]@2", // Bb Ab
  F: "[[f1,f2]@3 [f1,f2]!2 [a1,a2] [c2,c3] [eb1,eb2]@2 [g1,g2] [bb1,bb2] [d1,d2]@2 [f1,f2] [bb1,bb2] [d1,d2]@3 [d1,d2] [d1,d2]@3 [d1,d2]@2]/3", // F A C Eb G Bb D F …
  G: "[c2,c3]@3 [c2,c3] [c2,c3]@2 [c2,c3]@2", // C
})).s("gm_fretless_bass").gain(0.66)

// other · electric guitar clean · "Electric Guitar (Clean)"
const electric_guitar_clean = note("<~@25 A@4 ~@4 A@4 ~@27 A@4 ~@4 A@4 ~@67>".pickRestart({
  A: "[~@3 f2@2 a2 c3 eb2@2 g2 bb2 d2@2 f2 bb2 d2@8 f2@9]/4",
})).s("gm_electric_guitar_clean").gain(0.72).pan(0.3)

// other · synth strings 1 · "SynthStrings"
const synth_strings_1 = note("<~@6 A@2 B C D B@2 E ~@129>".pickRestart({
  A: "f3/2", B: "bb3", C: "g3", D: "a3", E: "a3@3 ~",
})).s("gm_synth_strings_1").gain(0.64).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@2 x!2 ~@2 x ~@5]!106 [x ~@2 x ~@2 x!2 ~@8] [x ~@2 x ~@2 x!2 ~@2 x ~@5]!36>")
  .gain(0.64)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!91 [~ x ~@2] [~ x ~ x]!14 [~ x ~@2] [~ x ~ x]!36>").gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[~ x ~ x]!91 [~ x ~@2] [~ x ~ x]!14 [~ x ~@2] [~ x ~ x]!36>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@91 [~@14 x!2] ~@14 [~@12 x!4] ~@15 [~@14 x!2] ~@20>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@91 [~@10 x!4 ~@2] ~@14 [~@8 x!4 ~@4] ~@15 [~@10 x!4 ~@2] ~@20>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@92 A ~@7 A ~@6 A ~@15 B@2 A C B A ~@14>".pickRestart({
  A: "x", B: "x ~@2 x", C: "~@3 x",
})).gain(0.64)

stack(piano, bass, electric_guitar_clean, synth_strings_1, kick, snare, pedal_hat, mid_tom, high_tom, crash)

More by Elton John