Strudelify

Gone Too Soon

Michael Jackson

KeyB majorTempo73 bpm
0:00/0:00
// Gone Too Soon — Jackson Michael
// 73 bpm, 4/4, key B 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 63 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(73/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 · epiano2
const epiano2 = note("<~@8 A B C D E@3 F B G@7 H@7 I J@5 K L@8 M N O@6 P@8 ~>".pickRestart({
  A: "~@13 a#4@5 c5@6, g#2@25 d#4@23, ~ d#3@6 ~, ~ a#3@3, ~@3 c4@5",
  B: "~@2 d#5 c#5, c#3 g#4, ~@6 g#3@35 ~@7, ~@12 c#4@29 ~@7, ~@3 f4@5",
  C: "~@25 a#4@12 c5@11, g#2@25 d#4@23, ~@6 d#3@35 ~@7, ~@6 a#3@17 ~, ~@3 c4@5",
  D: "~@27 d#5@19 ~@2, c#3@13 g#4@10 ~, ~@7 g#3@39 ~@2, ~@13 c#4@33 ~@2, ~@19 f4@28 ~",
  E: "[~@2 d#4@22 ~@2 d#4@22 ~ c#4@12 c4@11 ~ c#4@10 ~ c4@3 ~@9 c5@3 c#5@3 g#5@18 ~@2 g#4@21 ~, g#2@36 [g#2,f3]@24 [d#2,g#3]@11 ~, g#3@24 g3@24 f#3@24 g#4@15 c#4@33 ~ [c#4,f4]@22 ~, ~ [a#3,c4]@24 [a#3,c4]@24 a#3@24 g#3@47 ~@24, ~@90 g#4@31 ~@23]/3", // C# G#5 C# A#sus2
  F: "g#2 ~@5 c5@2, [c4,d#4]@23 ~ [c4,d#4,a#4]@24, a#3@17 ~ a#3@30, d#3@11 ~ d#3@36, ~ g#2@7", // Cm Cm7
  G: "[~@21 g#4@2 ~ [g3,c4,d#4,g4]@24 [g#3,c#4,f#4]@12 [g#3,c4,g#4]@12 ~@27 g#4@20 ~ d#4 ~@2 d#4@44 ~@25 a#4@12 c5@12 ~@18 d#4@3 f4@2 ~ [c#4,f#4]@12 [c4,g#4]@10 ~@44 f4@5 ~@19 a3@3 c4@2 [g2,g3], g#2@72 g#2@94 ~@2 g#2@24 d#4@24 ~@24 d#4@22 c#2@38 c#4@11 ~@2 [c4,f4]@20 ~@3, ~@6 d#3@161 ~@7 d#3@36 ~@6 g#2@46 c#3@3 f4@29 g#3@17 ~ a3@16 ~@8, ~@12 g#3@6 d#4@6 ~@72 g#5 [d#5,f5] c#5@21 ~@61 a#3@36 ~@6 d#3@41 f3@2 c#4@23 f3@23 f3@13 ~@3 f3@7 ~@2, ~@15 c4@9 ~@48 [g#3,c#4,f4]@48 [d#2,g#3,c#4,f4]@47 ~@19 c4@30 ~@12 a#3@36 g#3@18 c#3@29 d2@22 ~@3]/7", // Cm C#sus4 G# F#5 Fm G F5 D#sus2 …
  H: "[[c4,d4,g4]@11 ~ [b3,d4,g4]@11 ~ [g3,c4,d#4]@11 ~ [g3,b3,d#4]@10 ~@2 d#4@7 ~@2 f4@8 ~ d#4@5 ~ [f3,g#3,c#4] ~@5 [c#3,f3,g#3]@9 ~@3 [d#3,g3,a#3]@16 ~@2 d#4@3 g4@3 a#4@2 ~ d#5@3 [f4,g#4,c#5] ~@5 [c#4,f4,g#4]@9 ~@3 [d#4,g4,a#4]@24 ~@24 c4@5 ~@2 g4@17 f#4@3 f4@3 ~ f#4@10 ~@2 g#4@9 ~@44 g#4@5 ~@2 g#4@46 ~, ~@11 [g2,g3]@11 ~ c2@46 ~@3 d#2@17 ~ d#2@76 ~@2 c4@12 d#3@61 [g#3,c#4]@5 g#2@30 g#3@11 ~@49, ~@48 [g3,a#3]@22 ~@97 g#3@23 ~ g3@2 d#4@22 ~@24 g#4@19 g#3@6 c#4@24 [c#4,f4]@47 ~, ~@169 [d#4,g#4]@23 a#3@21 ~@3 [a#3,c#4]@10 ~@2 [c4,d#4]@9 ~@3 f4@12 c#3@35 [d#2,g#3]@47 ~@2, ~@29 g#2@11 c#2@5 f4@3 ~@8]/7", // Csus2 G Cm Gaug C# D# C# D# …
  I: "~@24 a#4@11 ~ c5@11 ~, g#2 d#4, ~@3 d#3@19 ~@2, ~ a#3@3, ~@3 c4@5",
  J: "[~@18 c4@6 [c#4,e4,f#4,b4]@11 ~ [e4,g#4,b4,c#5]@11 ~@19 d#4@5 ~@2 a#4@17 a4@3 g#4@3 ~ a4@10 ~@2 b4@9 ~@44 b4@5 ~@2 b4@22 ~@25 c#5@11 ~ d#5@11 ~, g#2@23 ~@26 [f#4,b4]@23 c#4@21 ~@3 [c#4,e4]@10 ~@2 [d#4,f#4]@9 ~@3 g#4@12 e3@24 b3@11 b3@23 ~@2 b2@24 f#4@24, ~@6 d#3@18 ~@24 d#4@12 f#3@61 [b3,e4]@5 b2@41 f#2@43 d#4@30, ~@12 a#3@12 ~@23 b3@23 ~ a#3@2 f#4@22 ~@24 b4@19 b3@6 e4@24 [e4,g#4]@23 ~@7 f#3@38 ~@4, ~@9 b2@11 e2@5 g#4@3 ~@6 c#4@6]/5", // C#m7 B5 C#m D#m E5 E
  K: "~@24 c#5@11 ~ b4@11 b3, b2 f#4, ~@3 f#3@19 ~@2, ~ c#4@3, ~@3 d#4@5",
  L: "[~@18 d#4@5 ~@2 a#4@17 a4@3 g#4@3 ~ a4@10 ~@2 b4@9 ~@47 b4@5 ~@3 b4@29 ~@12 f#3@6 [f#3,b3,d#4]@6 [f#3,a#3,c#4]@16 ~@2 [f#3,a#3,c#4]@3 ~@3 [d#3,a3,c#4]@12 [d#3,f#3,b3]@12 [e3,f#3,c#4]@12 [f#3,b3,d#4]@10 ~@44 g#4@5 ~@19 c4@3 d#4@2 ~ [d#4,f4,a#4]@11 ~ [d4,f4,a#4]@11 ~ [a#3,d#4,f#4]@11 ~ [a#3,d4,f#4]@10 ~@2 f#4@7 ~@2 g#4@5, d#4@18 ~@5 a#3@2 f#4@22 ~@24 b4@20 b3@6 e4@26 ~@37 d#3@39 ~@49 e3@3 g#4@29 b3@17 ~ c4@16 ~@56 [a#3,c#4]@14, ~ [f#4,b4]@23 c#4@21 ~@3 [c#4,e4]@10 ~@2 [d#4,f#4]@9 ~@3 g#4@12 e3@26 b3@13 [b3,e4]@30 ~ b2@94 ~ g#3@2 e4@23 g#3@23 g#3@13 ~@3 g#3@7 ~@64, ~@6 b2@66 e2@31 g#4@20 ~ g#4@30 ~@96 b3@18 e3@29 f2@22 ~@2 [a#2,a#3]@11 ~ [a#2,a#3]@11 ~ d#2@39, ~@12 f#3@61 [b3,e4]@5 b2@44 f#2@54 ~@72 e2@38 e4@11 ~@2 [d#4,g#4]@20 ~@65]/8", // B F# D#m7b5 B F#7 B D#sus2 A# …
  M: "~@4 f#4@5 ~ [g#3,b3,e4] ~@5 [e3,g#3,b3]@9 ~@3 [f#3,a#3,c#4]@16 ~@2 f#4@2, ~@10 f#2@17 ~ f#2@18 ~@2", // E F#
  N: "~ a#4@3 c#5@2 ~ f#5@3 [g#4,b4] ~@5 [e4,g#4,b4]@9 ~@4 [f#4,a#4,c#5]@19, ~@5 e5 ~@18", // G#m E F#
  O: "[~@29 f#4@12 ~@12 f#4@12 ~@48 [b5,d#6]@6 [f#5,b5]@6 f#5@6 g#5@6 ~@96 c#5@10 d#5@13 ~@24 [b4,f#5]@8, ~@17 b3@6 d#4@20 d#5@22 a3@6 d#4@20 g#5@10 e4@38 e5@5 b3@63 b2@25 f#4@24 ~@18 g#4@14, ~@17 f#4@3 f#5@21 a#3@6 d#4@20 d#5@10 f#4@15 b5@3 b3@42 b3@3 g5@73 f#3@36 ~@7 e3@32, ~@18 b4@23 f#4@3 f#5@21 f#4@3 f#5@22 e5@35 b5@11 ~@2 b4@12 e4@69 c#4@37 ~@6 b3@26, ~@19 d#5@23 b4@24 b4@23 [g#3,b4]@47 ~ [g3,b5]@82 ~@6 d#4@31 ~@12 e4@20]/6", // B B5 G#m G
  P: "[~@4 e5@12 ~@26 c#5@13 d#5@12 ~@30 [b4,f#5]@28 ~@68 d#6@176 ~@15, ~@16 b2@26 f#4@26 ~@19 g#4@37 ~@26 f#3@4 b3@4 c#4@3 d#4@4 f#4@3 b4@4 c#5@4 d#5@194 ~@14, ~@22 f#3@37 ~@8 e3@58 ~@10 f#2@53 c#6@181 ~@15, ~@28 c#4@35 ~@11 b3@51 ~@19 c#3@226 ~@14, ~@35 d#4@33 ~@12 e4@44 ~@23 d#3@222 ~@15]/8", // B5
})).s("gm_epiano2").gain(0.35).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note("<~ A@8 ~@8 B@5 C@2 D E ~ F@2 G@4 H@3 I@2 J K@8 ~ L@4 M@4 N@7>".pickRestart({
  A: "[~@2 [g#3,b3,e4,b5]@4 [a#3,c#4,f#4,a#5]@3 [g#3,c#4,d#4,g#5]@6 [f#3,b3,d#4,f#4,f#5]@3 [g#3,c#4,f4,g#4,f5]@3 [g#3,a#3,d#4,g#4,d#5]@11, d#6, ~@2 g#4@13 d#2@17]/8", // E F# G#sus4 B C# G#sus2
  B: "[g#4@23 ~ g4@24 f#4@12 g#4@12 ~@33 d#4@14 ~ [g#3,c#4,d#4,f4]@46 ~@2 [g#3,c4,d#4]@72, [g#3,c4,d#4]@3 [g#3,f4]@2 ~@5, ~@72 [c4,c#4]@37 ~@131]/5", // C# G# C# C#maj7
  C: "[[f#3,a#3,c#4]@12 [g#3,c4,d#4]@11 ~ [g#3,c#4,f4]@48 [a3,c4,f4]@24]/2", D: "[b3,d4,g4]@2 [g3,c4,d#4] [g3,b3,d#4]",
  E: "[g3,a#3,d#4]@11 ~@13", F: "[~@17 [g#3,c4,g#4]@7 [g3,a#3,c4,g4]@12 [f#3,g#3,c4,f#4]@12, ~@17 d#4@31]/2",
  G: "[c4@48 c#4@47 ~ g#3@5 g#4@6 [a#3,a#4]@6 g#4@6 [a#3,a#4]@6 g#4@6 [a#3,a#4]@6 g#4@6 [a#3,a#4]@6 g#4@6 [a#3,a#4]@6 [g#3,g#4]@6 f#3 [f#3,b3,c#4]@23 ~, [f3,g#3,f4]@94 ~ [a#3,a#4]@6 g#3@12 g#3@12 g#3@12 g#3@12 g#3@12 ~@6 f#4@22 ~@3, ~@4 [d#3,c4]@3 ~]/4", // A# G# F#sus4 Fm A# Cm
  H: "[[b3,d#4,b4]@24 [a#3,c#4,d#4,a#4]@24 e6@12 d#6@12 d#4@48 e4@23 ~, f#4 ~, f#6@2 [a3,b3,d#4,a4] [g#3,b3,g#4,g#5]@3]/3", // B D#7 B7 G#m
  I: "[f#3,b3,d#4,f#5]/2", J: "[b3,d#4,b4] [a#3,c#4,d#4,a#4], [f#4,f#6]",
  K: "[e6@12 d#6@12 d#4@51 e4@30 ~ d#6@24 c#6@24 ~@12 [f#4,b4,d#5]@12 [g#4,c#5,e5,c#6]@12 [b4,d#5,f#5,b5]@12 [b3,e4,g#4]@48 [c4,d#4,g#4]@21 ~@3 [d4,f4,a#4]@24 [a#3,d#4,f#4]@12 [a#3,d4,f#4]@12 [a#3,c#4,f#4]@22 ~@40, [a3,b3,d#4,a4]@24 [g#3,b3,g#4,g#5]@82 f#5@84 ~@12 g#5@69 a#5@27 f#5@50 ~@36, ~@53 [f#3,b3,d#4]@30 ~@109, ~@154 d#6@25 ~@205]/8", // B C#m B E G# A# D#m A#aug …
  L: "[~@17 b4@24 a#4@24 a4@24 [g#4,g#5]@48 [g4,g5]@55, ~@17 [d#5,f#5]@72 [b4,e5,b5]@101 ~@2]/4", // G# G D#m E5
  M: "[~@56 [f#3,c#4,d#4]@25 [e3,b3]@15, ~@9 f#5@55, ~@7 b2@5]/4", N: "[~@31 [b2,f#3,b3]@263 ~@42]/7",
})).s("gm_string_ensemble_2").gain(0.17).pan(0.4)

// other · piccolo
const piccolo = note("<A B C ~@29 D E F G H I ~ J K@2 L@4 M N@2 ~ O@2 ~@2 P@4 ~@5>".pickRestart({
  A: "~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6",
  B: "~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5",
  C: "~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~ g#6 d#6 ~ c#6 g#5 ~ c#6 d#6 ~@12",
  D: "~@5 g#5 a#5 c#6", E: "f#6", F: "~@45 g#5 [a#5,b5] c#6", G: "d#6@6 b5@2 ~@4 b5@6 g#5@3 ~@3 g#5@24",
  H: "f#5@22 ~@2 f#5@3 a#5@3 f#5@3 d#5@3 f#5@3 a#5@3 f#5@3 d#5@3", I: "f#5@11 ~", J: "~@46 g#5 [a#5,b5]",
  K: "[c#6 d#6@6 b5@2 ~@5 b5@7 g#5@3 ~@3 g#5@31 ~@38]/2",
  L: "[~@8 b5@3 c#6@3 b5@3 c#6@3 b5@3 c#6@3 b5@3 g#5@12 b4@3 e5@3 g#5@3 e6@3 g#6@12 a#6@12 ~@19]/4", M: "~@23 f#5",
  N: "[~ a#5@3 c#6@3 f#6@3 e6 ~@5 b5@10 ~@3 c#6@37 ~@30]/2", O: "[~@17 d#6@6 b5@2 ~@4 b5@6 g#5@6 b5@41 ~@14]/2",
  P: "[~@16 f#4@21 ~ d#4@3 f#4@3 a#4@3 f#4@9 ~ d#4@3 f#4@3 a#4@3 f#4@117 ~@9]/4",
})).s("gm_piccolo").gain(0.24)

// other · orchestral harp · G#sus2 C#sus2 F#maj7 Bmaj7 C#sus2 F#maj7 Bmaj7 C#sus2 …
const orchestral_harp = note(`<
  ~@32
  [~@30 f#2 [g#2,a#2] b2 [c#3,d#3] [f3,f#3] g#3 [a#3,b3] [c#4,d#4] [f4,f#4] g#4 [a#4,b4] [c#5,d#5] f5 [f#5,g#5] [a#5,b5] [c#6,d#6] f6 [f#6,g#6]]
  [[a#6,b6] [c#7,d#7] f#7@5 ~@41, ~@2 f7 ~@45]
  ~@29
>`).s("gm_orchestral_harp").gain(0.27).pan(0.3)

// bass · electric bass finger
const bass = note("<~@32 A B C@2 D E B F@7 G@3 ~@14>".pickRestart({
  A: "~@24 f#2@23 ~", B: "b1@41 ~ f#2@6", C: "[b1@3 f#2 e2@8 f#2@4]/2", D: "b1", E: "b1@47 ~",
  F: "[b1@18 f#2@6 e2@51 f#2@31 b1@48 b1@12 ~@12 c#2@12 d#2@11 ~@2 e2@47 f2@24 a#1@12 a#1@12 d#2@38, ~@166 b1@35 ~@135]/7",
  G: "[~@10 f#2@18 f#1@85 ~@31]/3",
})).s("gm_electric_bass_finger").gain(0.32)

// chords · english horn
const english_horn = note("<~@56 A@6 ~>".pickRestart({
  A: "[~@31 [f#3,c#4]@253 ~@4]/6", // F#5
})).s("gm_english_horn").gain(0.05).pan(0.6)

stack(epiano2, string_ensemble_2, piccolo, orchestral_harp, bass, english_horn)

More by Michael Jackson