Strudelify

Come Undone

Robbie Williams

KeyB majorTempo89 bpm
0:00/0:00
// Come Undone — Robbie Williams
// 89 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(89/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 · electric bass finger
const bass = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D E D F G E G E G E H I J K J K L@2 M@2 N@2 O P D E D F G E G E G Q H I G R S T G@2
  S T U@2 G E G E G Q H V G E G E G Q H V G E G E G E G E G E G E G E G W ~
>`.pickRestart({
  A: "b1/2", B: "e1/2", C: "[e1@7 e1]/2", D: "f#1@2 f#1 ~ f#1@2 f#1 ~ f#1@2 f#1@2 f#1@2 f#1 ~",
  E: "e1@2 e1@2 e1@2 e1@2 e1 ~ e1@2 e1@2 e1@2", F: "e1@2 e1@2 e1@2 e1@2 e2@2 e2@2 e2@2 e2!2",
  G: "b1@2 b1 ~ b1@2 b1 ~ b1@2 b1@2 b1@2 b1 ~", H: "c#2@2 c#2 ~ c#2@2 c#2 ~ c#2@2 c#2@2 c#2@2 c#2 ~",
  I: "e2@2 e2@2 e2@2 e2@2 e2 ~ e2@2 e2@2 e2@2", J: "b1", K: "e1", L: "[b1@13 b1 b1@2]/2", M: "[e1@31 ~]/2",
  N: "[b1@7 b1]/2", O: "e1@15 ~", P: "e1!4 e1@2 e1!2", Q: "e1@2 e1@2 e1@2 e1@2 e1 ~ e1@2 g#1@2 b1@2",
  R: "b1@2 b1 ~ b1@2 b1 ~ b2@2 b2@2 b2@2 b2@2", S: "a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1@2 a1@2 a1@2",
  T: "g#1@2 g#1 ~ g#1@2 g#1@2 g#1@2 g#1@2 g#1@2 g#1@2", U: "f#1!8", V: "e2!5 e1 e2 e1",
  W: "e1@2 e1@2 e1@2 e1@2 e1 ~ e1@2 ~@4",
})).s("gm_electric_bass_finger").gain(0.66)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~ A@2 B@2 C@2 B@2 D@2 E@2 F@2 E@2 ~@12 G H I H D@2 E@2 F@2 E@2 ~@55>".pickRestart({
  A: "[~@2 d#4@7 f#3 d#4 f#3 d#4 f#3 ~ f#3, b2@17 ~@15, ~@2 f#3@15 ~@11 d#4@4]/2", B: "[~@4 b3@2 e4@25 ~, g#3]/2",
  C: "[d#4 ~ d#4@7 ~ d#4 b3 d#4 b3 ~ b3, b2@9 ~@7, ~@2 b3@15 ~ b3@4 ~@6 d#4@4]/2", D: "[[f#3,d#4]@31 ~]/2",
  E: "[g#3,e4]/2", F: "[d#4@9 ~ d#4 c#4@2 e4 ~ f#3, f#3@8 ~ f#3@5 d#4@2]/2",
  G: "~@2 d#4@3 e4 ~ f#3, f#3@7 ~, ~ b3@4 ~ d#4@2", H: "~@3 e4@5, g#3",
  I: "~@2 d#4@3 ~@2 f#3, f#3@3 d#4, ~@2 b3@7 ~ b3@4 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.48).pan(0.3)

// chords · electric guitar clean
const electric_guitar_clean = note("<~ A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 ~@16 C@2 D@2 C@2 D@2 ~@55>".pickRestart({
  A: "[[b2,f#3,d#4]@31 ~]/2", B: "[[e3,g#3,e4]@31 ~]/2", C: "[b2,f#3,d#4]/2", D: "[e3,g#3,e4]/2",
})).s("gm_electric_guitar_clean").gain(0.59).pan(0.7)

// chords · piano
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G H I@2 J K L M N O P O P Q R Q S T U V G W X@2 Y@2 Z@2 J K L M N O P O P Q R Q AA AB AC AD
  AE@2 AC AD AF AG N O P O P Q R Q N O P O P Q R Q N O P O N O P O N O P O N O P AH ~
>`.pickRestart({
  A: "[d#4@10 ~ d#4@2 e4 ~ b3, f#3, b3@7 d#4]/2", B: "[[e3,g#3]@7 [g#3,b3,e4]@4 [e4,g#4,b4]@3 [g#4,b4,e5]@2]/2",
  C: "[[b3,d#4]@4 ~@2 d#4@11 ~ d#4@4 ~@4 e4@2 d#4@2 b3 ~, f#3, ~@2 b3@9 b3@3 ~@2]/2", // B
  D: "[[g#3,b3,e4]@7 [e4,g#4,b4]@4 ~ [b4,e5]@4, ~@23 [g#5,b5]@9]/2", E: "[[f#3,b3,d#4]@6 ~ c#4, ~@3 f#3, ~@13 b3@3]/2",
  F: "[[b3,e4]@2 ~ e4@5 ~ e4 ~ [e4,b4]@3 a#4 b4, g#3@7 ~, ~@4 b3@11 ~ b3@16, ~@5 g#4@2 e4]/2", G: "[f#3,b3,d#4]",
  H: "~@2 d#4 c#4@3 ~ c#4, f#3, ~@2 b3@9 ~ b3@4",
  I: "[g#3 ~@2 e4@2 ~@9 e4 b3, e3, b3@4 b3@5 ~ b3@19 ~@3, ~@2 g#3@29 ~, ~@12 e4@2 b4@17 ~]/2",
  J: "[c#4,f#4]@5 [c#4,a#4]@2 f#4, a#3", K: "[b3,e4]@2 e4 b3 e4 ~ f#4 g#4, g#3, ~@5 b3@3",
  L: "[f#4,a#4] c#4 ~ c#4 [f#4,a#4] c#4 [f#4,a#4] c#4, c#4 ~@3 [f#4,a#4]@4 ~@8", // F#
  M: "[b3,e4,g#4] b3 [e4,g#4] ~ g#4 f#4 [e4,g#4] [e4,b4], ~@6 b3@5 ~ b3@4, ~@2 e4 ~", // E E5
  N: "[b3,d#4] f#3 [b3,d#4] f#3 ~@2 [b3,e4] d#4, ~@2 [b3,d#4] ~, ~@5 f#3@2 ~", // B E5 B
  O: "[b3,e4] g#3 [b3,e4] g#3 [b3,e4] g#3 [b3,c#4] g#3", P: "[b3,d#4] f#3 [b3,d#4] f#3 [b3,d#4] f#3 [b3,d#4] f#3",
  Q: "[b3,e4] g#3 [b3,e4] g#3 [b3,e4] g#3 [b3,e4] g#3", R: "[c#4,e4] g#3 [c#4,e4] g#3 [c#4,e4] g#3 [c#4,e4] g#3",
  S: "b3@6 d#5@5 e5 f#5 e5 d#5 ~, ~@3 [f#4,b4]@5", T: "[g#4,b4]@11 ~ g#4 a#4 b4 ~, e4@15 ~",
  U: "~@6 f#5@6 e5 [e5,f#5] d#5@2, b4, [f#4,d#5]@11 ~@5", // Esus2 D#m
  V: "[g#4,b4]@7 ~ f#4 g#4 ~@2 f#4 e4 b3@2, e4@6 ~ e4@3 b4@5 ~, ~@11 g#4@4 ~", // G#m
  W: "~@2 b3@2 c#4@2 d#4@6 b3@3 ~, f#3@15 ~, ~@3 f#4@5", X: "[~@22 g#4 a#4 b4@3 a#4@3 g#4@2, [e3,g#3]]/2",
  Y: "[~@4 f#5@9 ~ f#5 ~ f#5@16, f#4, b4@13 ~@2 b4@17]/2",
  Z: "[[e4,b4,e5]@24 ~@2 b5 f#5 ~@2 b4 e4, ~@24 e4@5 f#5@2 ~, ~@25 b4@3 b5@3 ~]/2", // E5
  AA: "[b2,f#3,d#4]@7 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~", // B B5 B
  AB: "[b2,f#3,d#4] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~ [b2,f#3,d#4] ~", // B
  AC: "c#4@2 a3@2 c#4@2 a3@4 a3@2 ~@2 [a3,e4] ~, e4@5 ~ [c#4,e4]@6 c#4@4, a3 ~@15", // A5 C#m
  AD: "g#3 ~ g#3@2 ~@2 e4@4 ~@2 b3@2 [g#3,e4] ~, [b3,e4]@2 b3@3 ~@3, ~@6 g#3@3 ~ g#3@4 ~@2", // C#m E5
  AE: "[f#3@2 ~@4 b3@3 ~ b3@2 f#3@2 b3@2 ~@2 b3@2 ~@2 b3@2 ~@2 b3@2 ~@2 f#3@2, d#4@4 f#3@7 ~@5 f#3@7 ~ f#3@5 b3@2 ~, b3 ~ b3@4 d#4@13 ~ d#4@6 ~@2 d#4@4]/2",
  AF: "[c#4,f#4]@4 a#3 ~ a#3@3 ~ a#3 ~ a#3@2 [a#3,c#4,f#4]@2, a#3@3 ~@3 [c#4,f#4]@6 ~@4", // F#5 F# F#5
  AG: "~@2 [c#4,f#4]@2 a#3 ~ [a#3,c#4,f#4]@4 a#3 ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~, ~@2 a#3 ~@13", // F#5 F#
  AH: "[b3,e4] g#3 [b3,e4] g#3 [b3,e4] g#3 ~@2", // E5
})).s("gm_piano").gain(0.63).pan(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A@2 B@2 C@2 D@2 ~@8 E F G H I J I J I K L M ~@12 E F G H I J I J I K L M N@2 O P Q R S T U V I J I J I K L M I J I J
  I K L M I J I J I J I J I J I J I J I J ~
>`.pickRestart({
  A: "b2/2", B: "[~@11 e4@2 d#4@2 b3, e3]/2", C: "[d#4@6 c#4@2 b3@3 e4@2 d#4@2 b3, b2]/2", D: "[[e3,e4,g#4]@7 d#3]/2",
  E: "c#4", F: "b3@6 c#4 d#4", G: "c#4@5 d#4@3", H: "b3@2 c#4@2 g#4 b4@2 g#4", I: "f#5", J: "e5",
  K: "[e5,g#5]@2 [d#5,f#5]!2", L: "[c#4,e4,e5] [d#4,f#4]", M: "[e4,g#4]@15 ~",
  N: "[b5@19 ~@7 [d#4,d#5] [e4,e5] [f#4,f#5] [d#4,d#5] [e4,e5] [f#4,f#5]]/2", O: "[c#5,c#6] [b4,b5] [a4,a5]@2",
  P: "[g#4,g#5]@2 [a4,a5]@2 [g#4,g#5] [f#4,f#5] [e4,e5]@2", Q: "[d#4,d#5] [c#4,c#5] [b3,b4]@6",
  R: "[d#4,d#5] [e4,e5] [f#4,f#5] [g#4,g#5]", S: "[c#5,c#6] [b4,b5] [a4,a5] [c#5,c#6]",
  T: "[g#4,g#5] [f#4,f#5] [e4,e5] [g#4,g#5]", U: "[f#4,f#5] [g#4,g#5]", V: "[a#4,a#5]@2 [b4,b5] [c#5,c#6]",
})).s("gm_string_ensemble_1").gain(0.55).pan(0.7)

// chords · synth strings 1
const synth_strings_1 = note("<~ A@8 B@8 C D C D E@8 F@4 B@8 C D C D E@8 G@2 H@4 I@2 J@2 E@16 K@16 ~>".pickRestart({
  A: "[[f#3,d#4] [g#3,e4], b3@63 ~]/4", B: "[[f#3,d#4] [g#3,e4], b3]/4", C: "[a#3,c#4,f#4]", D: "[g#3,b3,e4]",
  E: "[[d#4,f#4] [e4,g#4] [d#4,f#4] [e4,g#4] [d#4,f#4] ~ c#4 b3, b3@3 ~, ~@5 [e4,g#4]@3]/8", // D#m E D#m E D#m E
  F: "[[f#3,d#4] [g#3,e4] [f#3,d#4] [g#3,e4], b3]/4", G: "[f#3,b3,d#4]/2",
  H: "[[c#4,a4] g#4 [d#4,f#4]@2, e4 ~, ~ b3@3]/4", I: "[[c#4,a4] [b3,g#4], e4]/2", J: "[a#3,c#4,f#4]/2",
  K: "[[d#4,f#4] [e4,g#4] [d#4,f#4] [e4,g#4], b3]/4", // D#m E D#m E
})).s("gm_synth_strings_1").gain(0.43)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@17 A B A B C D C D C D E F ~@12 A B A B C D C D C D E F C@2 G D C H G D I J C D C D C D E F C D C D C D E F C D C D
  C D C D C D C D C D C K ~
>`.pickRestart({
  A: "[c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~", // F#5
  B: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  C: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // B5
  D: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  E: "[c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] ~", // C#5
  F: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3]@3 ~", // E5
  G: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // A5
  H: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ b2 f#3 [b2,f#3] ~", // B5
  I: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~", // F#5
  J: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3]@2 [f#2,c#3]@2", // F#5
  K: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~@5", // E5
})).s("gm_electric_guitar_muted").gain(0.52).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@21 A ~ A ~ A ~@2 B ~@16 A ~ A ~ A ~@2 B ~@5 C ~@4 A ~ A ~ A ~@2 B A ~ A ~ A ~@2 B A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@2 d#4!2 ~@2 d#4!2", B: "~@7 [e3,b3,e4]", C: "~@12 f#3@3 ~",
})).s("gm_overdriven_guitar").gain(0.57).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note("<~@63 A@2 B@2 C@2 D E ~@25>".pickRestart({
  A: "[~@4 b4@4 f#4@2 e4@2 d#4@2 ~@4 b4@5 ~ e4@2 d#4 ~ [c#4,f#4]@2 d#4 ~, f#4@8 ~@6 e4@9 ~@9]/2", // F#5
  B: "[~@2 b4@2 ~@2 b4@2 d#4@2 c#4@2 d#4@2 c#4@4 f#3@2 f#3 ~ f#3 ~ f#3@2 g#3@2 b3@2 g#3 ~, d#4!2 ~@6]/2",
  C: "[~@2 b4@2 f#4 e4 d#4 ~@2 b4!2 c#5 d#5 c#5 b4 c#5, f#4@8 ~@6 e4@9 ~@9]/2",
  D: "[g#4,c#5]@2 [f#4,b4] [g#4,c#5] [c#5,e5] [b4,d#5] [g#4,c#5] [f#4,b4]", E: "f#4 g#4!6 f#4",
})).s("gm_distortion_guitar").gain(0.63).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~ A@19 B C@7 D B@11 E C@3 F C@7 F C G C@7 H C@7 H C@7 H C@7 H C@7 H ~>".pickRestart({
  A: "x ~@4 x ~@2", B: "x ~@3 x!2 ~@2", C: "x!2 ~ x!3 ~ x", D: "x!2 ~@2 x!2 ~@2", E: "x", F: "x!2 ~ x!3 ~@2",
  G: "x!2 ~@2 x!3 ~", H: "x!2 ~ x!2 ~@3",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~ A@19 B C@7 D C@11 E C@3 F C@7 F C G C@7 H C@7 I C@7 I C@7 I C@7 J ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@4 x ~@2 x ~ x ~@2 x ~@3", D: "~@4 x ~ x ~@5 x!4",
  E: "~@4 x ~@2 x ~@2 x ~ x!4", F: "~@4 x ~@2 x ~ x ~@2 x ~ x ~", G: "~@4 x ~ x ~@2 x!7", H: "~@4 x ~@2 x ~@2 x!6",
  I: "~@4 x ~@2 x ~@2 x ~ x!3 ~", J: "~@4 x ~@2 x ~@2 x ~@5",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<A B@27 C ~@16 B@9 C ~@8 B@31 D ~>".pickRestart({
  A: "x!4", B: "x!8", C: "x!3 ~@5", D: "x!6 ~@2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@28 [~@3 x!3 ~@2] ~@25 [~@3 x ~@4] ~@41>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@21 A ~@5 A ~ A ~@3 A ~@3 A ~ A ~@5 A ~@5 A@2 ~@2 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@29 [x!8]!11 [x!5 ~@3] [x!8]!4 ~@10 [x!8]!7 [x!5 ~@3] ~@33>").gain(0.72)

stack(
  bass, electric_guitar_jazz, electric_guitar_clean, piano, string_ensemble_1, synth_strings_1, electric_guitar_muted,
  overdriven_guitar, distortion_guitar, kick, snare, hihat, open_hat, crash, ride
)

More by Robbie Williams