Strudelify

Can You Feel the Love Tonight

Elton John

KeyB♭ majorTempo60 bpm
0:00/0:00
// Can You Feel the Love Tonight — John Elton
// 60 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 41, 4/4 at bar 41) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 12 "Flute" named as a pipe, played on flute (its clarinet patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 63 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/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(`<
  A B C D E F@2 G H I J K@2 L M N@5 O L M P@5 Q B C D E F@2 G H I J R S T U@3 V W X@2 T U@3 V Y Z AA AB AC AD@4
>`.pickRestart({
  A: "[bb2,f4,bb4,d5] [bb3,f4,bb4] [a2,f4,a4,c5] [a3,c4,f4,a4]", // Bb Bb5 F
  B: "[g2,eb4,g4,bb4] [g3,eb4,g4] [f2,f4,bb4] [f3,d4,f4]", // Eb Cm Bb5 Dm
  C: "[eb2,bb3,eb4,g4]@4 g3 bb3 eb4@2 [d2,bb3,d4,f4]@4 [d3,f3,bb3,d4]@4, ~ eb3 ~@2", // Eb Bb
  D: "[a2,f3,c4] [bb2,f3,bb3,d4] [c3,g3,c4,eb4] [d3,f3,bb3,d4,f4]", // F Bb Cm Bb
  E: "[bb3,eb4,g4]@2 [bb3,eb4,g4]@2 f3@2 ~ d4, eb3 d3, ~@8 [bb3,d4]@5 bb3@3, ~@3 f3", // Eb Bb
  F: "[[bb3,eb4,g4]@2 [g3,bb3,eb4,g4]@2 f3@2 ~ d4 [eb4,g4]@2 ~ eb3 [f4,bb4]@2 ~ d3, eb3@4 d3@8 d3@3 ~, ~@8 [bb3,d4]@5 bb3@3 bb3@8 ~@4 [f4,bb4,d5]@4, ~@6 f3@2 eb3@3 ~@5, ~@5 [eb4,g4,bb4] d4@2]/2", // Eb Bb5 Bb Eb
  G: "g4@4 ~@2 c3@2 f3@4 ~@3 f4, [bb4,eb5]@2 ~ f3, c3@3 ~ [f2,f4,a4,c5]@4, ~@4 [eb4,g4,c5]@4 c4@5 a3@3, ~@7 c4", // Eb5 F Cm
  H: "[bb3,eb4]@2 ~ eb3 [f3,bb3]@2 ~ d4, [eb2,g4]@8 f4 ~@4 bb3@3, eb3@3 ~ [d2,d3]@4, ~@4 [bb3,eb4]@5 ~@3 f3@4", // Eb5 Bb5 Eb D Eb5
  I: "[g3,bb3,eb4]@4 ~@2 [eb2,eb3]@2 f3@4 ~@3 f4, [eb2,eb3]@3 ~ [d2,d3]@4, ~@4 [g3,bb3,eb4]@4 [bb3,d4]@5 bb3@3, ~@3 f3, ~@7 d4", // Eb D Eb Bb
  J: "bb3@2 ~ [eb2,eb3] [g4,bb4]@2 ~ [g2,g3], [eb2,eb3]@3 ~ [g2,g3]@3 ~, g4 ~@3 [bb3,eb4,g4]@5 ~@3 [d4,g4,bb4]@4", // Eb Gm G Eb G Eb Gm
  K: "[[eb4,ab4,c5]@4 ~@2 ab2@2 [f3,f4]@4 ~@3 f4 [f4,bb4,d5]@4 ~@2 bb2@2 [c4,f4,a4,c5]@4 ~@2 a2@2, ab3@2 ~ [f3,c4] bb3@2 a3@2, ab2@3 ~ [f2,c5]@3 c5 bb2@3 ~ a2@3 ~, ~@4 [eb4,ab4,c5]@4 a4@9 ~@3 [f4,bb4,d5]@4 ~@4 [c4,f4,a4,c5]@4, ~@13 f4@2 f2@2 ~@15]/2", // Ab F Bb F F5 Ab Bb F
  L: "[d4,g4,bb4]@4 [d4,g4,bb4]@4 ~@7 f2, [g2,g3,d5]@8 [eb2,eb3]@5 g4 bb4@2, ~@5 g3@3, ~@11 bb3@5, ~@3 eb4", // Gm G5 Eb
  M: "[d4,f4] ~ eb2 [e2,e3,g4,bb4,d5], [bb2,bb3] ~, ~ [d4,f4] ~@2, ~@3 [g4,bb4,eb5]@3 ~@2", // Dm Em7b5 Bb Dm Eb
  N: "[~@8 a4@2 ~@6 eb2@6 eb2@2 d2@6 ~@2 [g2,g3]@4 [f2,f3]@4 eb2@6 ~@2 [c2,c3,g3,c4,eb4]@4 [d2,d3,f3,bb3,d4]@4 [eb2,eb3,bb3,eb4]@4 c4 ~@3 f3@4 ~@3 f4 f4@2 ~ f4 a4 ~@2 f4, c5@16 [eb3,bb3,eb4,g4]@8 [d3,bb3,f4]@13 ~@3 [eb3,g4,bb4]@13 ~@15 f3@2 c4@4 c4@2 [c4,f4,g4]@4, [f2,f3]@6 f4@8 a3@10 d4@8 [d4,g4,bb4]@9 ~@6 d2@5 ~@12 [f2,c4,f4]@5 a3 f2@2 [f2,f3]@6 [f2,f3,c5]@2, a4@5 c4@5 a4@15 ~@15 eb4@8 ~@16 [a4,c5]@12 c5@2 ~@2, f4@4 a3@8 [f2,f3,c4]@13 ~@5 d2@7 ~@9 eb2@7 ~@7 [e2,e3,e4,g4,bb4]@12 ~@5 a4@3]/5", // G F Cm Bb Eb5 Eb Bb Eb …
  O: "[f4,bb4,d5]@2 ~ bb2 [c4,f4,a4,c5]@2 ~ a2, bb3 a3, bb2@3 ~ a2@3 ~, ~ [f4,bb4,d5] ~ [c4,f4,a4,c5]", // Bb F Bb F
  P: "[~@4 a4 ~@3 eb2@3 eb2 d2@3 ~ [g2,g3]@2 [f2,f3]@2 eb2@3 ~ [c2,c3,eb4,g4,c5]@2 [d2,d3,d4,f4,bb4]@2 [eb2,eb3,bb3,eb4,g4,bb4]@2 eb4@2 ~@3 eb4 [bb2,f3,bb3,d4]@4, c5@16 [eb3,bb3,eb4,g4]@8 [d3,bb3,f4]@13 ~@3 [eb3,bb4]@12 ~@12 [bb2,g4,bb4]@9 ~@7, [f2,f3]@6 f4@8 a3@10 d4@8 [d4,g4,bb4]@9 ~@6 d2@5 ~@16 g3@5 ~@7, a4@5 c4@5 a4@15 ~@15 [eb4,g4]@8 ~@16 [bb3,eb4]@5 bb3@3 ~@8, f4@4 a3@8 [f2,f3,c4]@13 ~@5 d2@7 ~@9 eb2@6 ~@8 [f2,f3,c4,f4,a4]@13 ~@7]/5", // G F Cm Bb Eb Bb Eb Bb …
  Q: "~ bb3 [f4,a4,c5] [a3,f4,a4,c5,f5], [bb2,f4,bb4,d5] a2", // F Bb
  R: "[eb4,ab4,c5]@2 ~ ab2 f3@2 [f3,c4]@2, ab3 ~, ab2@3 ~ [f2,f4,a4,c5]@4, ~ [eb4,ab4,c5] ~@2", // Ab F5 F Ab
  S: "[f2,f3,eb4,g4,bb4]@2 f4!2 [f4,bb4,d5]@2 ~ bb2, ~ [f2,f3,a4,c5] bb3@2, ~@4 bb2@3 ~, ~@3 [f4,bb4,d5]", // Eb Bb F Bb
  T: "[c4,f4,a4,c5]@2 ~ a2 [d4,g4,bb4]@2 [d4,g4,bb4]@2, a3 ~, a2@3 ~ [g2,g3,d5]@4, ~ [c4,f4,a4,c5] ~@2", // F Gm G5 F
  U: "[~@7 f2 [d4,f4]@4 ~@4 eb2@4 [e2,e3,g4,bb4,d5]@4 ~@8 a4@2 ~@6 eb2@6 eb2@2, [eb2,eb3]@5 g4 bb4@2 ~@6 [g4,bb4,eb5]@6 ~@4 c5@14 a3@2 [eb3,bb3,eb4,g4]@8, ~ g3@3 [bb2,bb3]@4 ~@4 [f2,f3]@3 f4@9, ~@3 bb3@5 ~@16 f4@4 a3@8 [f2,f3,c4]@12, ~@4 eb4@4 ~@4 [d4,f4]@4 ~@8 a4@5 c4@5 a4@14]/3", // Dm Em7b5 Eb Bb F F5 Dm
  V: "d2@3 ~ [g2,g3]@2 [f2,f3]@2, [d3,bb3,f4]@13 ~@3, d4 [d4,g4,bb4], ~@6 d2@7 ~@3", // G F Bb Gm
  W: "eb2@3 ~ [c2,c3,g3,c4,eb4]@2 [d2,d3,f3,bb3,d4]@2, [eb3,g4,bb4]@13 ~@3, eb4@7 d2@5 ~@4, ~@6 eb2@7 ~@3", // Cm Bb Eb
  X: "[[eb2,eb3,bb3,eb4]@4 c4 ~@3 f3@4 ~@3 f4 f4@2 ~ f4 a4 ~@2 f4 [f4,bb4,d5]@4 ~@2 bb2@2, ~@2 [e2,e3,e4,g4,bb4]@5 c4@2 c4 [c4,f4,g4]@2 bb3@4, ~@4 [a4,c5]@6 c5 ~@5, ~@8 [f2,c4,f4]@5 a3 f2@2 [f2,f3]@6 [f2,f3,c5]@2 bb2@6 ~@2, ~@12 f3@4 ~@5 a4@3 ~@4 [f4,bb4,d5]@4]/2", // Eb5 Bb Edim Csus4 Am F5 F F5 …
  Y: "eb2@3 ~ [c2,c3,eb4,g4,c5]@2 [d2,d3,d4,f4,bb4]@2, [eb3,bb4]@3 ~, [eb4,g4]@7 d2@5 ~@4, ~@3 eb2@3 ~@2", // Cm Bb Eb5 Eb
  Z: "[eb2,eb3,bb3,eb4,g4,bb4]@2 eb4@2 ~@3 eb4, ~ [f2,f3,c4,f4,a4]@3, ~ [bb2,g4,bb4], ~@8 [bb3,eb4]@5 bb3@3, ~@3 g3", // Eb F Eb Eb5
  AA: "bb3 [eb2,eb3,bb3,eb4,g4], [bb2,f3,d4]", AB: "[d2,d3,bb3,d4,f4]@2 [g2,g3,d4,g4,bb4] [f2,f3,d4,g4,bb4]",
  AC: "[eb2,eb3,eb4,g4,bb4]@2 [c2,c3,eb4,g4,bb4] [d2,d3,d4,f4,bb4]", // Eb Cm7 Bb
  AD: "[[eb2,eb3,eb4,g4,bb4]@5 eb4@5 g3@4 ~@5 [bb2,bb3,d4,f4]@32 ~@13, ~@5 [f2,f3,c4,f4]@15 ~@44, ~@10 [bb1,g4]@11 ~@43, ~@10 [bb3,eb4]@6 bb3 eb4@4 ~@43, ~@7 g3@3 ~@22]/4", // Eb Bb F5 Eb Eb5
})).s("gm_piano").gain(0.46)

// other · french horn
const french_horn = note("<A B C D ~@24 A B C E F ~@30>".pickRestart({
  A: "d5@2 c5 f5", B: "eb5@4 eb5 d5 bb4 f4", C: "g4@4 f4 bb4 f4 d4", D: "c4 d4 f4@2", E: "c4 d4 eb4 f4", F: "g4 ~",
})).s("gm_french_horn").gain(0.35).pan(0.6)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<A@4 ~@20 B C D E F@3 G ~@5 H@2 I J K L M@2 N O P@2 K L Q@2 R S T@2 ~@6>".pickRestart({
  A: "[f5,f6]/4", B: "[eb3,eb4,g4,bb4] [d3,d4,f4,bb4]", C: "[g3,d4,g4,bb4] [f3,f4,g4,bb4] [eb3,eb4,g4,bb4]@2",
  D: "[c3,eb4,g4,c5] [d3,d4,f4,bb4] [eb3,eb4,g4,bb4,c5] [f3,eb4,f4,g4,bb4]", E: "[bb3,eb4,bb4] [bb3,d4,bb4], bb2",
  F: "[f5,f6]/3", G: "[a2,a3,c4,f4] [bb2,f3,bb3,d4,f4] [c3,g3,bb3,c4,eb4] [d3,f3,bb3,d4,f4]",
  H: "[~@12 f5 bb5 c6 f6@9 ~@8]/2", I: "~ [f2,f3,f4,a4,c5]",
  J: "[f2,f3,f4,g4,bb4,eb5] [f2,f3,f4,g4,a4,c5,f5] [bb2,bb3,f4,bb4,d5]@2", K: "[a2,a3,f4,a4,c5] [g2,g3,d4,g4,bb4]",
  L: "[eb2,eb3,eb4,g4,bb4] [bb2,bb3,f4,bb4,d5]", // Eb Bb
  M: "[[eb3,eb4,g4,bb4,eb5] [e3,e4,g4,bb4,e5] [f2,f3,f4,a4,c5,f5]@4 [eb2,eb3,eb4,g4,bb4,eb5]@2]/2", // Eb Edim F Eb
  N: "[d2,d3,d4,f4,bb4,d5]@2 [g2,g3,d4,g4,bb4,d5] [f2,f3,d4,g4,bb4,d5]", // Bb Gm Gm7
  O: "[eb2,eb3,eb4,g4,bb4]@2 [c2,c3,c4,eb4,g4,c5] [d2,d3,d4,f4,bb4,d5]", // Eb Cm Bb
  P: "[[eb2,eb3,eb4,g4,bb4,eb5] [e2,e3,e4,g4,bb4,e5] [f2,f3,f4,a4,c5,f5]@4 [bb2,bb3,f4,bb4,d5]@2]/2", // Eb Edim F Bb
  Q: "[[eb3,eb4,g4,bb4,eb5] [e3,e4,g4,bb4,e5] [f2,f3,f4,a4,c5,f5]@4 [eb3,eb4,g4,bb4]@2]/2", // Eb Edim F Eb
  R: "[d3,d4,f4,bb4]@2 [g3,d4,g4,bb4] [f3,f4,g4,bb4]", S: "[eb3,eb4,g4,bb4]@2 [c3,eb4,g4,c5] [d3,d4,f4,bb4]",
  T: "[[eb3,eb4,g4,bb4,c5] [f3,eb4,f4,g4,bb4] [bb3,eb4,bb4]@2 [bb3,d4,bb4]@2 ~@2, ~ bb2@2 ~]/2", // Cm7 Eb Eb5 Bb
})).s("gm_string_ensemble_2").gain(0.17)

// bass · acoustic bass · "Bass"
const bass = note("<~@12 A B C D E F G H I J K L E M N O ~@12 P Q R S T U V W X Y Z S AA U AB AC@2 ~@6>".pickRestart({
  A: "bb1 a1", B: "[g1,bb1]@8 eb2@7 f2", C: "bb1@2 eb2 e2", D: "f2@4 f2@3 f2", E: "eb2@7 eb2 d2@6 d2@2",
  F: "g2@4 f2@4 eb2@6 eb2 d2", G: "c2 d2 eb2 e2", H: "f2@7 f2 f1@4 f2@4", I: "bb1@3 bb1 a1@4", J: "g1@7 f2 eb2@7 f2",
  K: "bb1 bb2 eb2 e2", L: "f2@2 f1 f2", M: "g2 f2 eb2@2", N: "c2 d2 eb2 f2", O: "bb1", P: "~ bb1", Q: "a1 [g1,bb1]",
  R: "eb2@7 f2 bb1@8", S: "eb2 e2 f2@2", T: "f2@6 f2@2 eb2@7 eb2", U: "d2@3 d2 g2@2 f2@2", V: "eb2@6 eb2 d2 c2@4 d2@4",
  W: "eb2@4 e2@4 f2@7 f2", X: "f1@2 f2@2 bb1@3 bb1", Y: "a1@8 g1@7 f2", Z: "eb2@7 f2 bb1@4 bb2@4",
  AA: "f1@4 f2@4 eb2@7 eb2", AB: "eb2@2 c2 d2", AC: "[eb2 f2 bb1@4 ~@2]/2",
})).s("gm_acoustic_bass").gain(0.36).pan(0.3)

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~@12 A B C D E F G H A B C D E F I J ~@12 K L M N O P Q R S L M N O P T U V ~@6
>`.pickRestart({
  A: "bb4 d4 f4 bb4 c5 f4 a4 c5", B: "d5 g4 bb4 g4 bb4 eb4 g4 bb4", C: "d5 f4 bb4 d5 eb5 bb4 e5 c5",
  D: "f5 f4 a4 f4 c5 f4 f5 f4", E: "eb5 g4 bb4 eb5 d5 f4 bb4 d5", F: "bb4 g4 d5 bb4 eb5 g4 bb4 g4",
  G: "c5 g4 d5 bb4 eb5 bb4 e5 bb4", H: "f5 a4 c5 a4 f4 a4 c5 f4", I: "c5 eb4 d5 f4 eb5 g4 c5 f4",
  J: "bb4 eb4 g4 bb4 [d4,f4,bb4]@4", K: "~@4 bb4 d4 f4 bb4", L: "c5 f4 a4 c5 d5 g4 bb4 g4",
  M: "bb4 eb4 g4 bb4 d5 f4 bb4 d5", N: "eb5 bb4 e5 c5 f5 f4 a4 f4", O: "c5 f4 f5 f4 eb5 g4 bb4 eb5",
  P: "d5 f4 bb4 d5 bb4 g4 d5 bb4", Q: "eb5 g4 bb4 g4 c5 g4 d5 bb4", R: "eb5 bb4 e5 bb4 f5 a4 c5 a4",
  S: "f4 a4 c5 f4 bb4 d4 f4 bb4", T: "eb5 g4 bb4 g4 c5 eb4 d5 f4", U: "eb5 g4 c5 f4 bb4 eb4 g4 bb4", V: "[d4,f4,bb4] ~",
})).s("gm_acoustic_guitar_nylon").gain(0.15).pan(0.2)

// other · glockenspiel · "Glock"
const glockenspiel = note("<~@27 A B C D E ~@5 F ~@25>".pickRestart({
  A: "~ [a6,bb6]", B: "[d6,d7]@2 [c6,c7] [f6,f7]", C: "eb6@4 [eb6,eb7] [d6,d7] [bb5,bb6] [f5,f6], eb7@3 ~@5",
  D: "[g5,g6]@4 [f5,f6] [bb5,bb6] [f5,f6] [d5,d6]", E: "[c5,c6] [d5,d6] [eb5,eb6] [f5,f6]", F: "~@12 f5 bb5 c6 f6",
})).s("gm_glockenspiel").gain(0.14).pan(0.7)

// other · oboe
const oboe = note("<~@36 A B C D ~@12 E F G H I J K L@2 ~@2>".pickRestart({
  A: "g4@3 bb4 f4@4", B: "g4@3 a4@2 bb4@2 f4@8 ~", C: "g4 d4", D: "eb4 f4", E: "~ g4", F: "f4 bb4 d5 c5",
  G: "bb4@2 eb5 d5", H: "bb4 g4 g4@2", I: "f4 g4", J: "f4 bb4!2 c5", K: "eb5@2 eb5 d5",
  L: "[bb4@4 ~ bb4@5 bb4@19 ~@3]/2",
})).s("gm_oboe").gain(0.34).pan(0.6)

// other · flute · F Gm Am Bb Cm Dm7 Ebmaj7 F7 …
const flute = note(`<
  ~@39
  [~@8 a5 f5 c6 f5 a5 f5 c6 f5]
  [bb5 f5 c6 f5 a5 f5 c6 f5 ~@8]
  ~@6
  [~@8 [f5,a5] [g5,a5,bb5] [a5,bb5,c6] [bb5,c6,d6] [c6,d6,eb6] [c6,d6,eb6,f6] [d6,eb6,f6,g6] [eb6,f6,g6,a6]]
  [[f6,g6,a6] [g6,a6,bb6] [a6,bb6,c7] [bb6,c7,d7] [c7,d7,eb7] [d7,eb7,f7] [eb7,f7,g7] [f7,g7,a7] bb7@8, ~@8 a7 ~@7]
  ~@14
>`).s("gm_flute").gain(0.07)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [~@3 x]!15 ~@9 [~@3 x]!4 ~ [~ x ~@2]!15 ~@7>").gain(0.48).pan(0.7)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@40 [~@4 x!4] [x!8]!15 x ~@6>").gain(0.61).pan(0.7)

stack(piano, french_horn, string_ensemble_2, bass, acoustic_guitar_nylon, glockenspiel, oboe, flute, tambourine, cabasa)

More by Elton John