Strudelify
When You Come Back to Me cover art

When You Come Back to Me

When You Come Back to Me

Jason Donovan

KeyF♯ majorTempo126 bpm
0:00/0:00
// When You Come Back to Me — Jason Donovan
// 126 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 4 "Ch  4" Vibe 1 -> vibraphone; ch 3 "Ch  3" Brs Sect 2 -> brass section
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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, A@4 for four bars: edit a riff to change every repeat.

// chords · vibraphone · "Ch  4" · B A#m B C# D#m C# Fm F# …
const vibraphone = note(`<
  [[b3,d#4] [a#3,c#4] [b3,d#4] [c#4,f4] [d#4,f#4] [c#4,f4] d#4 [f4,g#4] [f#4,a#4] [f4,g#4] [f#4,a#4] [g#4,b4] [a#4,c#5] [g#4,b4] [b4,d5] [c#5,e5]]
  [[d5,f#5] ~@15]
  ~@22
  [[b3,d#4] [a#3,c#4] [b3,d#4] [c#4,f4] [d#4,f#4] [c#4,f4] d#4 [f4,g#4] [f#4,a#4] [f4,g#4] [f#4,a#4] [g#4,b4] [a#4,c#5] [g#4,b4] [b4,d5] [c#5,e5]]
  [[d5,f#5] ~@15]
  ~@72
>`).s("gm_vibraphone").gain(0.4)

// chords · vibraphone · "Ch  4" · soft notes
const vibraphone_soft = note("<[~@6 f#4 ~@8 b4] ~@23 [~@6 f#4 ~@8 b4] ~@73>").s("gm_vibraphone").gain(0.24)

// chords · synth brass 1 · "Ch  2"
const synth_brass_1 = note(`<
  ~@9 A B C@2 D@4 E@2 F G F A H@3 ~@7 I@4 J K D@2 L@2 F M@2 A N@2 ~@16 O@4 P@3 K F A F Q R A N@2 ~@17
>`.pickRestart({
  A: "[c#4,f#4,a#4]", B: "[b3,d#4,f#4,a#4]", C: "[[c#4,a#4]@16 [b3,d#4,a#4]@15 ~, f#4@15 ~]/2",
  D: "[[f4,c#5]@15 ~ [d#4,f#4]@16, a#4]/2", E: "[[e4,f4] ~ f4@14 [f#4,a#4]@16, c#4, g#4@15 ~@17]/2", F: "[c#4,f4,g#4]",
  G: "[b3,d#4,f#4]@3 ~ [c#4,f#4,a#4]@12", H: "[c#4,f4,g#4]/3",
  I: "[[c#4,f#4]@16 [b3,d#4,f#4]@16 c#4@15 ~ [b3,d#4]@15 ~, a#4@63 ~, ~@32 f#4@31 ~]/4", J: "[f4,a#4,c#5]",
  K: "[d#4,f#4,a#4]", L: "[[f4,g#4] [f#4,a#4], c#4@31 ~]/2",
  M: "[[b3,d#4,f#4]@3 ~ [f#4,a#4]@12 [f4,g#4]@16, ~@4 c#4@27 ~]/2", N: "[c#4,f4,g#4]/2",
  O: "[[c#4,a#4]@15 ~ [b3,d#4,a#4]@16 c#4@15 ~ d#4@16, f#4@31 ~, ~@32 a#4@31 ~, ~@24 b3@7 ~]/4", // F# Bmaj7
  P: "[[f4,c#5] [d#4,f#4] [f4,c#5], a#4]/3", Q: "[b3,d#4,f#4]@3 ~ [a#3,c#4,f#4]@11 ~", R: "[c#4,f4,g#4]@15 ~, a4 ~@15",
})).s("gm_synth_brass_1").gain(0.24)

// bass · synth bass 2 · "Ch  5"
const bass = note(`<
  ~ A B C D E F G D@2 H D H I J I J K D K L K D K@2 A B C D E F G D@2 H D H I J I J K D K L K D K@2 A M C D E F G D A B
  C D E F G D@2 H D H I J I N O D K L K D K@2 A B C D E F P D A B Q D E R P D ~
>`.pickRestart({
  A: "d2!5 ~ e2!2 ~ e2 ~ e2!4 ~", B: "a1!5 ~ d2!2 ~ d2 ~ d2!4 ~", C: "a1!5 ~ c#2!2 ~ c#2 ~ c#2!4 ~",
  D: "f#2!5 ~ f#2!2 ~ f#2 ~ f#2!4 ~", E: "b1!5 ~ c#2!2 ~ c#2 ~ c#2!4 ~", F: "f#2!5 ~ b1!2 ~ b1 ~ b1!4 ~",
  G: "f#2!5 ~ c#2!2 ~ c#2 ~ c#2!4 ~", H: "b1!5 ~ b1!2 ~ b1 ~ b1!4 ~", I: "a#1!5 ~ a#1!2 ~ a#1 ~ a#1!4 ~",
  J: "d#2!5 ~ d#2!2 ~ d#2 ~ d#2!4 ~", K: "c#2!5 ~ c#2!2 ~ c#2 ~ c#2!4 ~", L: "b1!3 ~ f#2 ~ f#2!2 ~ f#2 ~ f#2!4 ~",
  M: "a1!5 ~ d2!2 ~ d2 ~ d2!3 [d2,e2] ~", N: "d#2!5 ~ d#2!2 ~ d#2 ~ d#2!5",
  O: "[c#2,d#2] c#2!4 ~ c#2!2 ~ c#2 ~ c#2!4 ~", P: "f#2!5 ~ f#2 c#2 ~ c#2 ~ c#2!4 ~", Q: "a1!5 ~ c#2!3 ~@2 c#2!4 ~",
  R: "f#2!5 ~ f#2 b1 ~ b1 ~ b1!4 ~",
})).s("gm_synth_bass_2").gain(0.56)

// other · piano · "Ch  6"
const piano = note("<~@65 A B A C D E D F G ~@24>".pickRestart({
  A: "g#4 c#4 a#3 g#4 c#4 a#3 ~@2 a#3 f#4 c#4 a#3 f#4 c#4 a#3 c#4, ~@3 g#4 ~@4, ~@7 c#4@2 ~@7",
  B: "a#4 d#4 b3 a#4 d#4 b3 a#4 d#4 b3 g#4 d#4 b3 g#4 d#4 b3 d#4",
  C: "a#4 d#4 b3 a#4 d#4 b3 a#4 d#4 b3 g#4 d#4 g#4 a#4@2 b4@2",
  D: "c#5 a#4 f4 c#5 a#4 f4 c#5 a#4 f4 b4 g#4 d#4 b4 g#4 d#4 g#4",
  E: "b4 g#4 d#4 a#4 f#4 d#4 a#4 f#4 d#4 a#4 f#4 d#4 a#4 d#4 b4 d#4",
  F: "b4 g#4 d#4 a#4 f#4 d#4 a#4 f#4 d#4 c#5 b4 a#4 g#4 f#4 f4 d#4", G: "c#4@7 ~@9",
})).s("gm_piano").gain(0.56)

// chords · synth strings 1 · "Ch  7"
const synth_strings_1 = note(`<
  ~ A B C@2 D@2 E F@2 G H I J K L K M@2 N ~ H J O@2 P@5 Q@4 G H I J K L K R@2 S T H K ~ U V@4 W@4 X@7 Y@2 G H I J K L K
  Z@2 S AA H AB@2 U AC@7 AD AE@7 AF ~
>`.pickRestart({
  A: "[a3,d4,f#4,a4,d5,f#5]@6 [e4,g#4,b4,e5,g#5]@9 ~", B: "[a3,c#4,e4,a4,c#5,e5]@6 [a3,d4,f#4,a4,d5,f#5]@9 ~",
  C: "[[a4,c#5,e5]@8 [c#4,g#4]@6 ~@2 [c#4,f#4,a#4,f#5]@15 ~, [a3,c#4,e4]@6 ~@2 c#5@23 ~, ~ g#5 ~@2]/2", // A C#5 F# A
  D: "[[b3,d#4,f#4,b4,d#5,f#5]@6 [f4,g#4,c#5,f5,g#5]@9 ~ [c#4,a#4,c#5,f#5]@6 [b3,d#4,f#4,b4,d#5,f#5]@9 ~, ~@15 a#3@6 ~@11]/2", // B C# F# B
  E: "[a#3,f#4,a#4,c#5,f#5] [c#4,f4,g#4,c#5,f5,g#5]", F: "[[c#4,f#4,a#4,c#5,f#5,a#5]@31 ~]/2", G: "~@4 f6 f#6 c#6 a#5",
  H: "c#6", I: "~@4 f6 f#6 c#6 b5", J: "a#5", K: "f#5", L: "f5", M: "[c#6@31 ~]/2", N: "~@7 c#5@8 ~",
  O: "[~@16 b5@2 a#5@2 b5@2 c#6@9 ~, g#5@23 ~@9]/2",
  P: "[[a3,d4,f#4,a4,d5,f#5]@6 [b3,e4,g#4,b4,g#5]@9 ~ [c#4,e4,c#5]@6 [d4,f#4,d5,f#5]@10 [c#4,e4,a4,c#5,e5]@8 [f4,g#4,g#5]@7 ~ [a#4,a#5]@16 [f#4,b4,d#5]@6 ~ g#4@8 ~, ~@6 e5@16 ~@26 f#5@23 ~@9, ~@16 a3@23 ~@25 b3@5 ~@11, ~@16 a4@15 ~@16 f#4@16 ~@17, ~@16 b3 ~@23 [c#4,c#5]@24 ~@6 [c#4,f4,c#5,f5,g#5]@10]/5", // D E C#m D A Fm A# B …
  Q: "[[a#3,a#4]@5 ~ [b3,d#4,b4,d#5]@10 [a#3,c#4,a#4,c#5]@8 [f4,g#4,g#5]@8 [f#4,a#4,f#5,a#5]@31 ~, [f#4,f#5]@3 ~@5, c#4 ~@23 [c#4,c#5]@39 ~]/4", // A# B A#m Fm F# C#
  R: "[c#6@9 f#5@7]/2", S: "c#5", T: "b5@3 ~ c#6@11 ~", U: "b5@2 a#5@2 b5@2 c#6@9 ~",
  V: "[[a3,d4,f#4,a4,d5,f#5]@6 ~ g#4@8 ~ [c#4,e4,c#5]@6 [d4,f#4,d5,f#5]@10 [c#4,e4,c#5,e5]@8 [f4,g#4,g#5]@8 [f#4,a#4,a#5]@16, ~@3 e5@8 ~@21, ~@6 [b3,e4,b4,g#5]@9 ~ [a3,a4]@23 ~ [c#4,c#5]@24]/4", // D C#m D C#m Fm F# E A …
  W: "[[b3,d#4,f#4,b4]@6 ~ g#4@8 ~ c4 c#4@4 ~ [b3,d#4,b4,d#5]@10 [a#3,c#4,a#4]@7 ~ [f4,g#4,g#5]@7 ~ [f#5,a#5]@15 ~, ~@6 [c#4,f4,f5,g#5]@9 ~ [f#4,f#5]@24 ~@8 [f#4,a#4]@13 ~@3, ~@7 c#5@16 ~@17 c#5@23 ~, ~@16 a#3@5 ~@43]/4", // B A#m Fm F# C# F#
  X: "[[a3,d4,f#4,a4,d5,f#5]@6 ~ g#4@8 ~ [c#4,e4,c#5]@6 [d4,f#4,d5,f#5]@10 [c#4,e4,c#5,e5]@8 [f4,g#4,g#5]@8 [f#4,a#4,a#5]@16 ~ b3@5 ~@10 c4 c#4@5 [d#4,b4]@9 ~ c#4@7 ~ [f4,g#4,c#5]@8, ~@6 e5@16 ~@26 f#5@23 c#5@15 ~@26, ~@6 [b3,e4,b4,g#5]@9 ~ [a3,a4]@23 ~ [c#4,c#5]@24 [d#4,f#4,b4]@5 ~ [c#4,f4,g#4,f5,g#5]@9 ~ [f#4,f#5]@24 ~@8, ~@80 a#3@6 ~@9 a#3@7 ~@10]/7", // D C#m D C#m Fm F# G#m C# …
  Y: "[[a#3,c#4,f#4,a#4,c#5,f#5]@31 ~]/2", Z: "[c#5@19 ~@13]/2", AA: "b4 ~ c#5@6",
  AB: "[a#5@11 ~@5 c#6@16, ~@11 a#5@7 ~@14]/2",
  AC: "[[a3,d4,f#4,a4,d5,f#5]@7 ~ [e4,g#4,g#5]@8 [c#4,e4,c#5]@8 [d4,f#4,d5,f#5]@8 [c#4,e4,c#5,e5]@7 ~ [c#4,g#4]@6 ~@2 c#4@15 ~ [b3,d#4,b4,d#5]@8 [f4,g#4,g#5]@7 ~ [a#3,c#4]@7 ~ [b3,d#4,b4,d#5]@8 [a#3,a#4,c#5]@7 ~ [c#4,f4,g#4]@8, ~@7 e5@17 ~@15 f5@8 f#5@24 ~ c#5@16 ~@24, ~@7 b3@8 ~ [a3,a4]@23 ~@9 f#4@24 ~@8 [f#4,f#5]@24 ~@8]/7", // D E C#m D C#m C#5 B Fm …
  AD: "[f#5,a#5]@15 ~, [f#4,a#4]@13 ~@3", // F#
  AE: "[[a3,d4,f#4,a4,d5,f#5]@8 [b3,e4,g#4,b4,g#5]@8 [a3,c#4,e4,a4]@8 [d4,f#4,d5,f#5]@8 [c#4,e4,c#5,e5]@7 ~ [g#4,c#5,g#5]@7 ~ [f#4,a#4,a#5]@16 [b3,f#4,b4]@7 ~ [c#4,f4,g#4,g#5]@8 a#3@7 ~ [b3,d#4,b4]@7 ~ [c#4,a#4]@7 ~ [c#4,f4,g#4,g#5]@7 ~, ~@8 e5@16 [a3,a4]@15 c#4@24 ~@17 f#4@23 ~@9, ~@47 f#5@24 ~ c#5@16 ~@24, ~@80 f#5@15 ~@17, ~@80 c4 ~@14 a#3@7 ~@10]/7", // D E A D C#m C#5 F# B5 …
  AF: "[c#4,f#4,a#4] ~@7, [c#5,f#5] ~", // F# F#5
})).s("gm_synth_strings_1").gain(0.2)

// chords · synth strings 1 · "Ch  7" · soft notes
const synth_strings_1_soft = note(`<
  ~ A ~ B C D E F ~@19 G H@2 I G ~@19 G J@2 K L@2 ~@2 M ~ N O P ~@17 Q ~ R@2 S T U@2 ~ V W@2 X Y Z ~@2
>`.pickRestart({
  A: "~@6 b3@9 ~", B: "~ f5, ~@4 f4@3 ~", C: "a#3@15 ~", D: "~@7 c#4@8 ~", E: "f#4@3 ~@5", F: "c#4@3 ~@5",
  G: "~@7 f5@8 ~", H: "[~@15 d#4@7 ~@10]/2", I: "~ c#4@5 ~@10", J: "[~@16 d#5@7 ~@9, f#5@23 ~@9]/2", K: "a#4@5 ~@11",
  L: "[c#5@8 c#4@21 ~@3, ~ f5 ~@2]/2", M: "~ f5", N: "d#5@7 ~@9", O: "a#4@5 ~ [b3,d#5]@10",
  P: "[a#4,c#5]@7 ~ [c#4,g#5]@7 ~, ~@7 f5@8 ~", Q: "~@7 b4@9",
  R: "[~@8 f4 ~ f4@4 ~ c4 a#4@15 ~, ~ c#5@3, ~@8 g#5@7 a#3@16 ~]/2", S: "~@8 [c#4,f5]@7 ~", T: "a#4@7 ~@9",
  U: "[c#4@6 ~@2 f5@8 c#4@13 ~@3, ~@8 c#5@23 ~, ~@4 g#5@3 ~@9]/2", V: "c#5 ~",
  W: "[~@9 f4@6 c#5@16 ~, ~@8 f5@7 ~@17]/2", X: "[d#4,d#5] f5", Y: "[c#4,a#4]@7 d#5@8 ~", Z: "[c#5,f#5]@7 ~ [c#5,f5]@8",
})).s("gm_synth_strings_1").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!96 x>").gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct("<[~@14 x!2] [x ~@5 x!3 ~@5 x!2]!96 ~>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~ [~ x ~@3 x ~@2]!96 ~>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@97 x>").gain(0.8)

stack(
  vibraphone, vibraphone_soft, synth_brass_1, bass, piano, synth_strings_1, synth_strings_1_soft, kick, snare, hihat,
  open_hat, crash
)

More by Jason Donovan