Strudelify
Charmless Man cover art

1995 · The Great Escape

Charmless Man

Blur

KeyA majorTempo118 bpm
0:00/0:00
// Charmless Man — Blur
// 118 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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(`<
  ~@8 A B A B C D E F ~@8 G H G H ~@12 G H G H ~@8 G H G H ~@12 G H G H ~@16 G H G H G H I ~@2 J@3
>`.pickRestart({
  A: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [g#4,c#5,e5] ~ [g#4,c#5,e5] ~ [g#4,c#5,e5] ~ [f#4,c#5,e5] ~", // A C#m F#7
  B: "[f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,c#5]@2, ~@14 a#4 ~", // F# F#5
  C: "[f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4] ~ [d4,f#4,a4] ~", // Bm C# Fm D
  D: "[d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5] ~", // D
  E: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [a4,c#5,e5] ~", // A D A
  F: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // A
  G: "[e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [c#4,f#4,a#4] ~", // A E F#
  H: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~", // F#
  I: "[e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ b4 ~@3", // A E
  J: "[~@11 [a2,e3,a3]@34 ~@3]/3", // A5
})).s("gm_piano").gain(0.3)

// bass · slap bass 2 · "Bass"
const bass = note(`<
  ~ A@2 B C@2 D E F ~@7 G H G I J K L M N O N O A@2 B P@2 A@2 B C@2 D E N O N O G H G I J K L M N O N O A@2 B P@2 A@2 B
  C@2 D E G H G I J K L M A@2 B P@2 A@2 B C@2 D E N O N O N O N Q R S@3
>`.pickRestart({
  A: "a1 ~ a1@2 ~@4 a1 ~ a1 ~ e2@3 ~", B: "a1 ~ a1@2 ~@4 c#2@4 a1@2 b1@2",
  C: "[~@2 f#1@2 a1@2 b1@2 c#2 ~ c#2@2 a1@2 b1@4 f#1@2 a1@2 b1@2 d2@3 ~ d2@2 ~@2]/2", D: "e1@4 e2@3 ~ e1@4 e2@4",
  E: "d2 a2 c3 a2 d2 a2 c3 a2", F: "a1@3 ~@13", G: "a2 ~ a2@2 e2@2 a2@2 g#2 ~ g#2@2 e2@2 g#2@2",
  H: "f#2 ~ f#2 e2 f#2 ~ f#2 e2 f#2 ~ f#2 e2 f#2 e2 f#2 ~", I: "f#2 ~ f#2@2 f#2 ~ f#2@2 c#2 ~ c#2@2 e2 ~ e2 ~",
  J: "b1 ~ b1@2 f#1@2 b1 ~ c#2 ~ c#2 ~ g#1 ~ g#1 ~", K: "d2 ~ d2 ~@2 b1 d2@2 e2 ~ e2@2 c#2@2 e2@2",
  L: "a1@3 ~@5 d2 ~ d2 ~ d2 ~ d2 ~", M: "a1 ~ a1 ~ c#2 ~ e2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  N: "a1 ~ a1@2 e1@2 a1@2 g#1 ~ g#1@2 e2@4", O: "f#1 ~ f#1@2 e1@2 f#1 ~ f#1 ~ f#1@2 e1@2 f#1 ~",
  P: "[~ f#1 a1 b1 c#2@2 a1 b1@3 ~@2 d2@4]/2", Q: "g#1 ~ g#1@3 ~@4 g1 ~ g1@3 ~@2", R: "~@2 f#1 ~@2 f#1@4 ~@4 f1@2 ~",
  S: "[f1@2 ~@3 e1@4 ~@5 a1@24 ~@10]/3",
})).s("gm_slap_bass_2").gain(0.49)

// other · electric guitar clean · "Clean Guitar"
const electric_guitar_clean = note(`<
  ~ A@2 B@3 ~@10 C D C E F G H I ~@4 A@2 J@2 ~ A@2 B@3 ~@6 C D C E F G H I ~@4 A@2 J@2 ~ A@2 B@3 ~@2 C D C E F G K@2 A@2
  J@2 ~ A@2 B@3 ~@14
>`.pickRestart({
  A: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  B: "[a2 ~ a2 ~ a2 ~ e3 f#3 g#3 ~ b3 ~@3 a3@7 ~@3 g#3 ~ b3 ~@3 a3@7 ~@11]/3",
  C: "a2 ~ a2@2 e2@2 a2@2 g#2 ~ g#2@2 e2@2 g#2@2", D: "f#2@3 ~", E: "f#2@6 f#2 ~ f#2@4 ~@4", F: "b1@7 ~ c#2@7 ~",
  G: "d2@3 ~ e2@3 ~", H: "a1 ~ a1@2 ~@4 d2 ~ d2 ~@5", I: "a1 ~ a1 ~@5 a1@2 ~@6",
  J: "[a2 ~ a2 ~ a2 ~ e3 f#3 g#3 ~ b3 ~@3 a3@7 ~@11]/2",
  K: "[[a3,c#4,g4] ~ [a3,c#4,g4] ~ [a3,c#4,g4] ~ [a3,c#4,g4] ~ [f#3,a3,c4,f#4] ~ [f#3,a3,c4,f#4] ~@3 [a3,c#4,g4]@13 ~@5]/2", // A7 F#dim A7
})).s("gm_electric_guitar_clean").gain(0.47)

// other · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  ~ A@2 B ~@2 C D ~@8 E@2 F@2 G H I J ~ K ~ L A@2 B ~@2 A@2 B ~@2 C D ~ K ~ L E@2 F@2 G H I J ~ K ~ L A@2 B ~@2 A@2 B
  ~@2 C D E@2 F@2 G H I J A@2 B ~@2 A@2 B ~@2 C D ~ K ~ L ~ K ~@3 M@3
>`.pickRestart({
  A: "~@2 a4@2 ~@4 e4@3 ~ e3 d#3 d3@2", B: "~@2 a4@5 ~@9", C: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  D: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
  E: "[a2 ~ a2@2 e2@2 a2@2 g#2 ~ g#2@2 a3@2 a#3@4 f4@4 f#4@2 a4@2 c#4@5 ~]/2",
  F: "[a2 ~ a2@2 e2@2 a2@2 g#2 ~ g#2@2 a3@2 a#3@4 f4@4 f#4@2 a4@2 c#4@4 d3@2]/2",
  G: "[f#3,b3]@2 ~ e3 [g#3,c#4]@2 ~ f#3", H: "[a3,d4] ~ [b3,e4] ~, ~@3 g#3@2 ~@3", I: "a2@5 ~@3 d3@5 ~@3",
  J: "a2@13 ~@3", K: "~@2 a#3 b3 a#3@2 c#3@2 a#3@7 ~", L: "~@2 a#3 b3 a#3@2 c#3@2 a#3@6 ~@2",
  M: "[~@3 b3@4 ~@4 [e3,a3]@25 ~@12]/3", // A5
})).s("gm_overdriven_guitar").gain(0.45)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar_2 = note(`<
  ~ A@2 B@3 C D ~@8 E@2 F@2 G H I J K@4 A@2 L@3 A@2 B@3 C D K@4 E@2 F@2 G H I J K@4 A@2 L@3 A@2 B@3 C D E@2 F@2 G H I J
  A@2 L@3 A@2 B@3 C D M@4 N@3 O P@3 ~
>`.pickRestart({
  A: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  B: "[a2 ~ a2 ~ a2 ~ a2 [a#2,b2] c#3 e3 [b3,e4]@2 ~@2 [a3,d4]@4 d4 c#4 d4 c#4 a3@2 g#3@2 b3@2 ~@6 d4 c#4 d4 c#4 a3@2 e4@2 ~@2 e4@2 ~@2, ~@5 a3 ~@2]/3", // Bmaj7 E5 D5
  C: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // E
  D: "[d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // D
  E: "[[a2,a3]@8 [g#2,g#3]@5 ~ [f#2,f#3,a#3,c#4]@17 ~, [e3,c#4]@13 ~@19]/2", // A G# F# C#m
  F: "[[a2,a3]@8 [g#2,g#3]@5 ~ [f#2,f#3,a#3,c#4]@14 ~@4, [e3,c#4]@13 ~@19]/2", // A G# F# C#m
  G: "~@4 [f#3,b3,d4]@2 ~@6 [g#3,c#4,e4]@3 ~", H: "~@4 [a3,d4,f#4]@3 ~@5 [b3,e4,g#4]@3 ~",
  I: "a3@3 c#4@3 a3@2 f#4@3 d5@3 f#4 ~", J: "~@3 c#5@10 ~@3, e4@13 ~@3",
  K: "[~@4 a3@4 [g#2,g#3]@7 [f#3,a#3]@17 ~@4 a3@4 [g#2,g#3]@8 [f#2,f#3,a#3]@14 ~@2, a2@8 ~@7 f#2@14 ~@3 a2@8 ~@24, ~ e3@7 ~@9 e3@7 ~@8, ~@2 c#4@15 ~ c#4@13 ~]/4", // G# F# G# F#
  L: "[a2 ~ a2 ~ a2 ~ a2 [a#2,b2] c#3 e3 [b3,e4]@2 ~@2 [a3,d4]@4 d4 c#4 d4 c#4 a3@2 g#3@2 b3@2 ~@2 a3@6 ~@2 d3 c#3 a2 ~ e2@2 g#2@2 e2@2]/3", // Bmaj7 E5 D5
  M: "[~@4 a3@4 [g#2,g#3]@7 ~ f#3@16 ~@4 a3@4 [g#2,g#3]@8 [f#2,f#3,a#3]@14 ~@2, a2@8 ~@7 a#3@18 ~ e3@14 ~@16, ~@2 e3@13 f#2@14 ~@3 a2@8 ~@24, ~@2 c#4@15 ~ c#4@13 ~]/4", // G# F#
  N: "[~@4 a3@4 [g#2,g#3]@7 ~ f#3@16 a2@7 ~ g#2@7 ~, a2@8 ~@7 a#3@18 ~@15, ~@2 e3@13 f#2@14 ~@19, ~@2 c#4@15 ~@7]/3", // G#
  O: "g2@7 ~@2 f#2@7", P: "[~@2 f2@8 ~@3 e2@5 ~ e2@5 ~@3 a2@21]/3",
})).s("gm_overdriven_guitar").gain(0.31)

// other · trombone · "Brass"
const trombone = note("<~@67 A B C D E F G H@2 ~@18 I J K@4>".pickRestart({
  A: "~@12 [a3,a4] ~ [b3,b4] ~", B: "[c#4,c#5]@6 ~@2 [b3,b4]@4 [c#4,c#5] ~ [a#3,a#4] ~", C: "~ [f#3,f#4]@5 ~@2",
  D: "[c#4,c#5]@7 ~ [b3,b4]@4 [c#4,c#5]@2 a#4@2, ~@14 a#3 ~", E: "~@2 [f#3,f#4] ~@3 [f#3,f#4]@8 ~@2",
  F: "[f#3,f#4] ~ [f#3,f#4] ~ [f#3,f#4] [f3,f4] [f#3,f#4] ~ [g#3,g#4] ~ [g#3,g#4] ~ [g#3,g#4] [f#3,f#4] [g#3,g#4] ~", // F# F F# G# F# G#
  G: "[a3,a4]@5 ~ [b3,b4]@4 ~@2 [a3,a4] ~ [b3,b4] ~", // A B A B
  H: "[[c#4,c#5]@5 ~ [c#4,c#5] ~ [b3,b4] ~ [c#4,c#5] ~@3 [c#4,c#5]@7 ~@11]/2", I: "a4@7 ~ g#4@7 ~", J: "g4@7 ~ f#4@8",
  K: "[~@2 f4@9 ~@2 e4@5 ~ e4@6 ~@2 a3@29 ~@8]/4",
})).s("gm_trombone").gain(0.5)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@5 A ~ B ~@15 C ~@13 A ~ B ~@11 C ~@13 A ~ B ~@7 C ~@9 A ~ B ~@9 D ~@2>".pickRestart({
  A: "~@2 x!2", B: "x!8", C: "~@13 x!2 ~", D: "~@7 x ~@8",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<A ~@15 B@7 C B@4 ~@12 B@11 C B@4 ~@12 B@7 C ~@12 B@7 D E ~@3>".pickRestart({
  A: "x!4", B: "x!8", C: "x!4 ~@4", D: "x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2", E: "x",
})).gain(0.39)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 [~@3 x] ~@27 [~@3 x] ~@23 [~@3 x] ~@24>").gain(0.44)

// drums · open hat
const open_hat = s("oh").struct("<~@23 [~ x] ~@27 [~ x] ~@23 [~ x] ~@24>").gain(0.39)

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

// drums · ride
const ride = s("rd").struct(`<
  ~ A@3 B ~@23 A@3 B ~ A@3 B ~@19 A@3 B ~ A@3 B ~@11 A@3 B ~ A@3 B ~@11 C D ~@2
>`.pickRestart({
  A: "x!3 ~", B: "~ x!3", C: "~@2 x ~@5 x ~@4 x ~@2", D: "~ x ~@2",
})).gain(0.34)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@4 A ~@26 A ~@4 A ~@22 A ~@4 A ~@14 A ~@4 A ~@15>".pickRestart({
  A: "x",
})).gain(0.15)

stack(
  piano, bass, electric_guitar_clean, overdriven_guitar, overdriven_guitar_2, trombone, kick, snare, low_tom, hihat,
  mid_tom, open_hat, crash, ride, ride_soft
)

More by Blur