Strudelify
Better Man cover art

Sing When You're Winning

Better Man

Robbie Williams

KeyD majorTempo124 bpm
0:00/0:00
// Better Man — Robbie Williams
// 124 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 5 acoustic guitar steel (copy of ch 3 "Jim Marshall" acoustic guitar steel)
// note: Full arrangement: all 124 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 30.
setcpm(124/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 · electric guitar clean
const electric_guitar_clean = note(`<
  A@2 B C A@2 B C D@2 E F D@2 E F G H I J@2 K L K L K L K M@2 N@2 O@2 P@2 A@2 B C A@2 B C A@2 B C ~@76
>`.pickRestart({
  A: "~@3 d4@2 d4 a3 e2, f#2 ~, ~@3 a3@3 ~@2", B: "~@3 e4@2 e4 b3 e2, g#2 ~, ~@3 b3@3 ~@2",
  C: "~ b3 e4 b3 e4 b3 e4 b3, g#2 ~", D: "f#2@3 d4@2 d4 a3 e2, ~@3 f#2@4 ~, ~@3 a3@3 ~@2",
  E: "g#2@3 e4@2 e4 b3 e2, ~@3 [g#2,b3]@3 ~@2", F: "~ b3 e4 b3 e4 b3 e4 b3, g#2@3 g#2@5",
  G: "a2@3 f4@2 f4 c4 [a2,f4], ~@3 [a2,c4]@3 ~@2", H: "d4 g4 d4 g4@2 g4 d4 [b2,g4], b2@3 [b2,d4]@3 ~@2",
  I: "c4 f4 c4 f4@2 f4 c4 [a2,f4], a2@3 [a2,c4]@3 ~@2", J: "[d4 g4 d4 [b2,d4,g4]@13, b2@3 ~@13]/2",
  K: "~ d4@2 d3 ~@3 d4, [d3,a3]@3 ~ d4@2 d3@2, ~@5 a3@2 ~", L: "~@3 a2 ~@3 g2, a2 e3 g2 d3, ~ a3@2 ~@2 g3@2 ~",
  M: "[a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@5", N: "[d3,a3,d4]@3 d4@2 ~@2 d3, ~@3 [d3,a3]@3 a3@2, ~@5 d4@2 ~",
  O: "[a2,e3,a3,c#4]@3 c#4@2 c#4 a3 e3, ~@3 e3@4 ~, ~@3 [a2,a3]@3 a2@2", // A
  P: "[g2,b2,d3,g3,b3,g4]@3 [g2,b2,d3,g3,b3,g4]@5", // G
})).s("gm_electric_guitar_clean").gain(0.17)

// chords · church organ
const church_organ = note(`<
  ~@4 A@2 B@2 A@2 B@2 A@2 B@2 C D C E@2 F G F G F G F H@2 I@2 H@2 J@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C E@2 F G F G
  F G F G F G F G F G F K@2 F@2 K@2 L M@3 F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F N@4
  ~
>`.pickRestart({
  A: "[a4,e5,a5]/2", B: "[g#4,d#5,g#5]/2", C: "[a4,e5,a5]", D: "[g4,d5,g5]", E: "[g4,d5,g5]/2", F: "[d4,a4,d5]",
  G: "[a3,e4,a4] [g3,d4,g4]", H: "[a3,e4,a4]/2", I: "[d4,a4,d5]/2", J: "[g3,d4,g4]/2", K: "[a3,e4,a4]",
  L: "[g3,d4,g4]@7 ~", M: "[g3,d4,g4]", N: "[[a3,e4,a4]@12 [g3,d4,g4]@14 [d4,a4,d5]@35 ~@3]/4",
})).s("gm_church_organ").gain(0.25)

// bass · fretless bass
const bass = note("<~@21 A B A B A B A C@2 D@2 C@2 E@2 ~@88>".pickRestart({
  A: "d1", B: "a1 g1", C: "a1@3 a1@5", D: "d1@3 d1@5", E: "g1@3 g1@5",
})).s("gm_fretless_bass").gain(0.15)

// chords · acoustic guitar steel · "Jim Marshall"
const acoustic_guitar_steel = note(`<
  ~@47 A B@2 C@2 D E F G E H I H I H I H I H I H I H I H J@2 K@2 J@2 L M N O H I H I H I H I H I H I H I H I H I H I H I
  H I H I H I H I H I H I H I H P@4 ~
>`.pickRestart({
  A: "~ [g#2,d3,b3,e4]!7", B: "[f#2,d3,a3,d4]@3 [f#2,d3,a3,d4]@2 [f#2,d3,a3,d4] [f#2,d3,a3,d4]@2",
  C: "[g#2,d3,b3,e4]@3 [g#2,d3,b3,e4]@2 [g#2,d3,b3,e4] [g#2,d3,b3,e4]@2", // E7
  D: "[a2,d3,c4,f4]@3 [a2,d3,c4,f4]@2 [a2,d3,c4,f4]!3", E: "[b2,d3,d4,g4]!3 [b2,d3,d4,g4]@2 [b2,d3,d4,g4]!3",
  F: "[a2,d3,c4,f4]@3 [a2,d3,c4,f4]@2 [a2,d3,c4,f4]@2 [a2,d3,c4,f4]", // Dm7
  G: "[b2,d3,d4,g4]@3 [b2,d3,d4,g4]@2 [b2,d3,d4,g4]!3", // G
  H: "[d3,a3,d4,f#4]@3 [d3,a3,d4,f#4]@2 ~@2 a2, ~@5 [d3,a3,d4,e4]@3", // D Dsus2
  I: "[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]!2 [g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]!2", // A G
  J: "[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]", // A
  K: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]", // D
  L: "[g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4] ~", // G
  M: "[g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@2", // G
  N: "[g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]!2", // G
  O: "[g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4] [g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]!3", // G
  P: "[[a2,e3,a3,c#4]@5 [a2,e3,a3,c#4]@3 ~ [a2,e3,a3,c#4]@3 [g2,b2,d3,g3,d4,g4]@7 [g2,b2,d3,g3,d4,g4]@3 ~ [g2,b2,d3,g3,d4,g4]@3 [d3,a3,d4,f#4]@28 ~@10]/4", // A G D
})).s("gm_acoustic_guitar_steel").gain(0.8)

// bass · electric bass finger
const bass_2 = note(`<
  ~@47 A B@2 C@2 D E F G E H I H I H I H I H I H I H I H F J K@2 F J L M N O H I H I H I H I H I H I H I H I H I H I H I
  H I H I H I H I H I H I H I H P@2 Q@3
>`.pickRestart({
  A: "g#1!8", B: "f#1@3 f#1@2 f#1 f#1@2", C: "g#1@3 g#1@2 g#1 g#1@2", D: "a1@3 a1@2 a1!3", E: "b1!3 b1@2 b1!3",
  F: "a1@3 a1@2 a1@2 a1", G: "b1@3 b1@2 b1!3", H: "d1@3 d2@2 d1@2 d2", I: "a1!2 g1!2", J: "a1@2 a1 a1@2 a1@2 a1",
  K: "d1@2 d1 d1@2 d1@2 d1", L: "g1@3 g1@3 g1 ~", M: "g1@3 g1@3 g1@2", N: "g1@3 g1@3 g1!2", O: "g1@2 g1 g1@2 g1!3",
  P: "[a1@5 a1@7 g1@7 g1@7 d1@6]/2", Q: "[~ f#1@7 a1@7 d2@21 ~@12]/3",
})).s("gm_electric_bass_finger").gain(0.8)

// other · overdriven guitar
const overdriven_guitar = note("<~@102 A B C@2 ~@15 D@2 ~>".pickRestart({
  A: "~@2 [d4,d5] [f#4,f#5]@2 [f#4,f#5]@2 [f#4,f#5]", B: "[f#4,f#5]@2 [f#4,f#5]!2 [e4,e5]@2 [e4,e5]!2",
  C: "[[d4,d5]@3 [d4,d5]@2 [d4,d5]!2 [d4,d5]@2 [d4,d5]!2 [a3,a4]@5]/2", D: "[~ d3@7 d5@21 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@47 A B@4 C B@2 D E B@15 E F B@4 G@2 E H B@7 I B@7 J B@21 K L ~@3>".pickRestart({
  A: "x!8", B: "x ~@2 x ~ x ~ x", C: "x ~@2 x ~@3 x", D: "~ x!2 ~@2 x ~ x", E: "x ~ x!2 ~ x ~ x", F: "x ~ x!2 ~ x ~@2",
  G: "x ~ x!2 ~ x!2 ~", H: "x ~@3 x ~ x ~@3 x ~@3 x!2", I: "x ~@3 x ~ x ~@4 x ~@2 x!2", J: "~ x ~@2 x!2 ~ x",
  K: "x ~ x ~@2 x ~@3 x ~@6", L: "x ~@2 x ~ x ~ x ~@2 x ~@5",
})).gain(0.79)

// drums · snare
const snare = s("sd").struct(`<
  ~@47 A B C B@2 ~@2 A D E B@15 A F B@4 A ~ G H B@7 H B@7 I B@7 J B@13 A K ~@3
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x", D: "x ~@2 x ~@2 x ~", E: "~@2 x ~@5 x ~@2 x!3 ~@2",
  F: "~ x ~@2 x ~ x ~", G: "~@3 x ~@2 x ~", H: "~@2 x ~@5 x ~@3 x!2 ~@2", I: "x ~@5 x!2 ~@4 x!2 ~@2",
  J: "~@2 x ~ x ~@3 x ~@2 x!2 ~@3", K: "~@3 x ~ x ~@10",
})).gain(0.79)

// drums · low tom
const low_tom = s("lt").struct("<~@47 [~ x!5 ~@2] ~@8 [~@7 x] ~@22 [~@3 x] ~@44>").gain(0.79)

// drums · open hat
const open_hat = s("oh").struct("<~@48 [x!8]!30 [x!4 ~@4] ~ [~@5 x!3] [x!8]!38 ~@5>").gain(0.79)

// drums · crash
const crash = s("cr").struct(`<
  ~@48 A ~ A ~ B@3 ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C A ~ A ~ B@2 D E A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ C F G ~@3
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~@2 x", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~@3", F: "x ~@4 x ~@6 x ~@3",
  G: "~@5 x ~@2",
})).gain(0.79)

stack(
  electric_guitar_clean, church_organ, bass, acoustic_guitar_steel, bass_2, overdriven_guitar, kick, snare, low_tom,
  open_hat, crash
)

More by Robbie Williams