Strudelify
Paint It Black cover art

1966 · Aftermath

Paint It Black

The Rolling Stones

KeyE minorTempo151 bpm
0:00/0:00
// Paint It Black — The Rolling Stones
// 151 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(151/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 · "bass"
const bass = note(`<
  ~@6 A@2 B C D E F G@2 E H I J@2 K L M N B C D E F G@2 E H I J@2 K L M N B C D E F G@2 E H I J@2 K L M N O P Q R S T Q
  U H L V@2 K L W X B C D E F G@2 E H I J@2 K L M N B Y Z AA B Y Z AA B Y Z AA B Y Z AB AC AD AE AF AG AH AI AJ AK AL AM
  AN B Y Z AA B Y Z AA B Y Z AA B Y Z AA B Y Z AO ~
>`.pickRestart({
  A: "b1 e2 b1 e2 b1 e2 b1 e2", B: "b1 e2 b1 e2 b1 e2 b1 e2, ~ e3 f#3 g3", C: "b1 e2 b1 e2 b1 e2 b1 f#2, a3 g3 f#3 e3",
  D: "b1 f#2 b1 f#2 b1 g2 b1 f#2, e3 d#3 e3 f#3", E: "e3 f#3 ~ e3 b1@2 f#2@2 b1@2 g2@2 b1@2 f#2@2, b1 f#2 d#3@2 ~@4",
  F: "b1 e2 b1 e2 [b1,f#3] e2 b1 e2, ~@2 e3@2 ~ g3@3", // B5
  G: "[[b1,a3] e2 b1 e2 b1 e2 b1 f#2 b1 f#2 b1 f#2 b1 g2 b1 f#2, ~ g3@2 f#3@2 e3@2 e3@2 d#3@3 e3@2 f#3@2]/2", // B7
  H: "e2 [e2,e4] [d2,d4]!2", I: "[g1,g3]@2 g3!2 [d2,a3]@2 a3!2, ~ g1 ~ d2",
  J: "[[e2,b3] e2 ~ e2 [e2,b3] [e2,a3] g3 e2 e2!2 ~ e2!3 b1 e2, ~ b3@3 ~@3 b3@3 ~@6]/2", // E5 A5
  K: "e2!2 [e2,e4]@2 [d2,d4]@2 [d2,d4]@2", L: "[g1,g3]@2 g3!2 a3 ~@2 a3, ~ g1 d2!2, ~@5 a3@2 ~",
  M: "b3 ~ a1@2 b3 a3 g3 a3, a1 ~ a1!2, ~ b3@3 ~@4", N: "b1!4, b3@3 ~@5", O: "e2 e3 f#3 g3", P: "a3 g3 g3@2 f#3@2 e3@2",
  Q: "e3 d#3 e3 f#3", R: "d#3 e3 ~ d#3 d#3@2 ~@10", S: "~ e3 f#3 g3", T: "a3 g3 f#3 e3", U: "e3 d#3 ~@6",
  V: "[[e2,b3] e2 ~ e2 b3 a3 g3 e2 e2!2 ~ e2!3 ~ e2, ~ b3@3 e2@2 ~ b3@3 ~@6]/2", // E5
  W: "[a1,b3]@2 [a1,b3]@2 b3 a3 g3 b3, ~@2 a1!2", X: "b1!4, b3 ~", Y: "[b1,g3] [e2,a3] b1 e2 b1 e2 b1 e2, ~ g3 f#3 e3",
  Z: "[b1,e3]@4 b1 ~ b2 ~ [b1,e3]@4 e3@2 f#3@2, ~ d#3 ~@2", AA: "e3@2 d#3@2 b1 ~ b2 ~ b1@4 b1 ~ b2 ~, b1 d#3 ~@2",
  AB: "e3 d#3!2 b3 e4!3 d4, b1@4 b1 ~ b2 ~ b1@4 b1 ~ b2 ~", AC: "[b1,e4] [e2,b3] [b1,b3] e2 b1 e2 b1 e2",
  AD: "[b1,e4] e2 b1 [e2,e4] b1 e2 b1 e2, ~@2 e4@4 ~@2 e4 ~@7", // E5 E
  AE: "e4@2 ~@2 b1 ~ b2 ~ b1@4 ~@4, b1 ~@3, ~ b3@2 b3@2 ~@3",
  AF: "e4@2 ~@2 b1 ~ e4@2 b1@4 b1 ~ d4@2, b1@4 ~@2 b2 ~@7 b2 ~, ~@2 e4@4 ~@2 e4 ~@7",
  AG: "[b1,e4] [e2,e4] [b1,e4] [e2,d4] b1 e2 b1 e2, ~@2 e4 ~", AH: "b1 e2 b1 e2 b1 [e2,e4] [b1,e4] [e2,d#4]",
  AI: "d#4 b3!3 [b1,b3]@2 ~@2, b1@4 b1 ~ b2 ~@9", AJ: "b1@4 b1 ~ b3@2 e4@2 e4@2 e4@2 d4@2, ~@6 b2 ~ b1@4 b1 ~ b2 ~",
  AK: "[b1,e4] [e2,b3] [b1,b3] e2 [b1,e4] [e2,b3] [b1,b3] e2", // E5 B E5 B
  AL: "[b1,e4] [e2,b3] [b1,b3] e2 b1 [e2,d4] [b1,e4] [e2,e4]", AM: "[b1,d#4]@4 b1 ~ b2 ~ b1@4 ~@2 d4@2",
  AN: "e4 ~ b3 ~ b1 ~ b2 ~ b1@4 b1 ~ b2 ~, b1 ~@3", AO: "e3@2 d#3@2 b1 ~ b2 ~@9, b1 d#3 ~@2",
})).s("gm_electric_bass_finger").gain(0.62)

// chords · acoustic guitar nylon · "guitar 1"
const acoustic_guitar_nylon = note(`<
  A B C D ~@4 E F G H I F G J K L M@2 N O P Q E F G H I F G J K L M@2 N O P Q E F G H I F G J K L M@2 N O P Q E R G S E
  R G T U V W X@2 Y Z@2 E F G H I F G J K L M@2 N O P Q E AA C AB AC R C AD AE AF AG AH AI@2 AJ@2 AK AL AM AN AO AP AQ
  AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BA BB BC BD BE BF BG BI ~
>`.pickRestart({
  A: "~@2 f#5 g5", B: "a5 g5 f#5 e5", C: "e5 d#5 e5 f#5", D: "c#5 [d#5,e5] [e5,f#5]@6 e5 [c#5,d#5] d#5@6",
  E: "~ e5 f#5 g5", F: "[g5,a5] g5@3 g5@4 f#5@4 e5@4", G: "[e5,f#5] e5@3 d#5@4 e5@4 f#5@4",
  H: "[e5,f#5] e5@3 d#5@4 d#5@8", I: "~ e5@2 f#5@3 g5@2", J: "[e5,f#5] e5@3 d#5@4 d#5@6 c#5 ~",
  K: "~@2 [b4,e5,g5]@2 [a4,d5,f#5]@3 ~", L: "g4@2 [b4,d5] ~ g4 ~@3 d5@6 c#5@2",
  M: "[~@2 b4@2 [b4,e5,g5]@4 [b4,e5,g5]@2 [b4,e5,g5]@4 [b4,e5,g5]@4 [b4,e5,g5]@2 [b4,e5,g5]@2 ~@2 [b4,e5,g5]@2 [b4,e5,g5]@4 e5 ~]/2", // Em
  N: "~@4 [b4,e5,g5]@2 ~@2 [a4,d5,f#5]@4 d5 ~ a4@2", O: "~ g4 [b4,d5] ~ d5@3 c#5",
  P: "a3 ~ a4 ~ [c#5,a5]@4 [c#5,a5]@2 [c#5,a5]@4 ~@2", Q: "~@2 [d#5,b5]@2 [d#5,b5] [d#5,b5]@2 ~",
  R: "g5 g5@3 g5@4 f#5@4 e5@4, ~ a5 ~@14", S: "[e5,f#5] e5@3 d#5@4 d#5@4 d#5@4", T: "e5 e5@3 d#5@12, ~ f#5 ~@14",
  U: "e4@2 [e4,b4,e5,g5]!2 [d4,f#4,a4,d5,f#5]@2 [d4,f#4,a4,d5,f#5] [e4,a4,c#5,f#5]", // Em D F#m7
  V: "[g3,d4,g4]@2 [g3,d4,g4]@2 [d4,f#4,a4,d5,f#5]@3 [a4,c#5,f#5]", // G5 D F#m
  W: "[g3,d4,g4]@2 [c#5,f#5] [d5,g5] [e5,g5]@2 [e5,g5]@2", // G5 F#5 G5 Em
  X: "[[e5,g5]@2 [e5,f#5] [e5,g5] [e5,a5] [e5,g5] [e5,f#5] [e5,g5]@3 [e5,g5]@2 [d5,f#5]@3 c#5]/2", // Em Esus2 Em A5 Em Esus2 Em D
  Y: "[g3,d4,g4]!2 [g3,d4,g4]@2 [a4,d5,f#5]@3 a4", // G5 D
  Z: "[[a3,c#4,e4]!2 [a4,c#5,a5]@2 [a4,c#5,a5] [a4,c#5,a5]@2 [b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5,b5]@2 ~]/2", // A B
  AA: "g5 g5@3 g5@4 f#5@4 g5@4, ~ a5 ~@14", AB: "~@2 e5@4 d#5@4 d#5@4 d#5 e5", AC: "[e4,b4,e5,g5] e5 f#5 g5",
  AD: "e5@4 d#5@4 [b4,d#5]!2 ~ [b4,d#5]!3 ~ [b4,d#5]", AE: "[e4,b4,e5]!4", AF: "[e4,b4,e5,f#5] [e4,b4,e5]!3",
  AG: "[b4,e5] [b4,d#5] [b4,e5] f#5", AH: "e5 d#5 c#5 d#5 [b4,d#5]@2 [b4,d#5]@2",
  AI: "[[b4,e5,g5]@4 [b4,e5,g5]@2 ~@2 [b4,e5,g5]@2 [b4,e5,g5]@2 ~@2 [b4,e5,g5]@4 [b4,e5,g5]@2 [b4,e5,g5]@2 ~@2 [b4,e5,g5]@2 [b4,e5,g5]@2 ~@2 [b4,e5,g5] ~]/2", // Em
  AJ: "[[b4,d#5,b5]!2 [b4,d#5,b5]@2 [b4,d#5,b5] [b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5,b5] [b4,d#5,b5]@2 [b4,d#5,b5] [b4,d#5,b5]@2 ~]/2", // B
  AK: "[b4,e5,g5]@2 [b4,e5,g5]!6", AL: "[b4,e5,g5]!7 [c#5,f#5]", AM: "[b4,d#5]!2 [b4,d#5,b5]!6",
  AN: "[b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5,b5]@2 [b4,d#5]@2 [b4,d#5]@2 [a4,c#5] ~", // B A
  AO: "[e4,b4,e5]@4 [e4,b4,e5]!2 ~ [e4,b4,e5] [e4,b4,e5]@4 [e4,b4,e5]!2 ~ [e4,b4,e5]", AP: "[e4,b4,e5]@2 [e4,b4,e5]!6",
  AQ: "[b4,d#5,b5]!2 ~ [b4,d#5,b5]!3 ~ [b4,d#5,b5]!3 ~ [b4,d#5,b5]!3 ~ [b4,d#5,b5]", // B
  AR: "[b4,d#5,b5]!2 ~ [b4,d#5,b5]!3 ~ [b4,d#5,b5]!3 ~ [b4,d#5,b5]!4 ~", // B
  AS: "[b4,e5,g5]@4 [b4,e5,g5]!2 ~ [b4,e5,g5] [b4,e5,g5]@4 [b4,e5,g5]!2 ~ [b4,e5,g5]", // Em
  AT: "[b4,e5,g5]@4 [b4,e5,g5]!2 ~ [b4,e5,g5]!3 ~ [b4,e5,g5]!3 ~@2", AU: "[b4,d#5,b5]@2 [b4,d#5,b5] [d#5,b5]!5",
  AV: "[d#5,b5]!6 [d#5,b5]@2", AW: "b5@2 c6@2 b5@2 a5@2 b5@2 a5@2 a5@2 a5 g5",
  AX: "g5@2 a5@2 g5@2 e5 ~ c#5!2 d#5!2 e5!4", AY: "e5!4 d#5@2 c#5 d#5 e5!4 d#5@2 c#5@2",
  AZ: "c#5@2 d#5@2 d#5 e5 f#5@2 e5!2 d#5!2 c#5!2 d#5!2", BA: "[b4,e5,g5]!2 [b4,e5,g5]@2 [b4,e5,g5]!4",
  BB: "[b4,e5,g5]!2 [b4,e5,g5]@2 [b4,e5,g5]@2 [b4,e5,g5]@2", // Em
  BC: "[b4,d#5]@2 [b4,d#5]@2 [b4,d#5] ~ [d#5,b5]@4 [d#5,b5]@4 [d#5,b5]@2", // B G#m
  BD: "[d#5,b5]!2 [d#5,b5]@2 [d#5,b5]@2 [d#5,b5]@2", BE: "~ [e5,g5] ~ [e5,g5]@5", BF: "[b4,e5,g5]!8",
  BG: "~ [b4,d#5,b5] ~ [b4,d#5,b5]@2 [b4,d#5,b5]!3", BH: "[b4,d#5,b5]!7 ~", BI: "[b4,d#5,b5]!4 ~@4",
})).s("gm_acoustic_guitar_nylon").gain(0.59).pan(0.6)

// chords · overdriven guitar · "guitar1b"
const overdriven_guitar = note(`<
  A@2 B ~@3 C@4 D@2 C@2 D@2 E F C@2 G H I D C@2 D@2 C@2 D@2 E F C@2 G H I D C@2 D@2 C@2 D@2 E F C@2 G H I D J ~ D K C@2
  D@2 E F C@2 G F I D C@2 D@2 C@2 D@2 E F C@2 G H I D C@2 L M N O P Q N R P M O R P M S T U V N O U V N O W M N R U@2 S
  X P Q N O P M S X P Q N O P Y ~
>`.pickRestart({
  A: "[~@6 e4@4 e4@4 e4@4 e4@4 e4@2 b4 ~@3 b4@4]/2", B: "~ e4@6 ~",
  C: "g4 ~ [e3,b3,e4,g4]@2 g4 ~ [e3,b3,e4,g4]@2 g4 ~ [e3,b3,e4,g4]@2 g4 ~ [e3,b3,e4,g4]@2", // Em
  D: "b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2", // B
  E: "[e3,b3,e4,g4]!2 [d4,a4,d5,f#5]!2", F: "[g3,b3,d4,g4]!2 [d4,a4,d5,f#5]!2",
  G: "g4 ~ [e3,b3,e4,g4]@2 g4 ~@3 [d4,a4,d5,f#5]@4 [d4,a4,d5,f#5]@4", // Em D
  H: "[g3,b3,d4,g4]!2 ~ [d4,a4,d5,f#5], ~@2 [d4,a4,d5,f#5] ~, ~@5 f#4@3", // G D
  I: "a4 ~ [a3,e4,a4,c#5]@2 a4 ~ [a3,e4,a4,c#5]@2 a4 ~ [a3,e4,a4,c#5]@2 a4 ~ [a3,e4,a4,c#5]@2", // A
  J: "g4 ~ [e3,b3,e4,g4]@2 ~@12", // Em
  K: "b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d5]@2", // B Bm
  L: "~@4 b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2 b4 ~ [b3,f#4,b4,d#5]@2", // B
  M: "[b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5] [b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]@4", // B
  N: "[e3,b3,e4,g4]@4 [e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4] [e3,b3,e4,g4]@4 [e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4]", // Em
  O: "[e3,b3,e4,g4]@4 [e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4] [e3,b3,e4,g4]@4 [e3,b3,e4,g4]@4", // Em
  P: "[b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5] [b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5]", // B
  Q: "[b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]", // B
  R: "[e3,b3,e4,g4]@4 [e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]", // Em
  S: "[e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]", // Em
  T: "[e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4]!3 ~@2", // Em
  U: "[b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]", // B
  V: "[b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]!3 ~ [b3,f#4,b4,d#5]!3 ~@2", // B
  W: "[b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]!2 ~ [b3,f#4,b4,d#5]", // B
  X: "[e3,b3,e4,g4]!2 ~ [e3,b3,e4,g4]!3 ~ [e3,b3,e4,g4] [e3,b3,e4,g4]@4 [e3,b3,e4,g4]@4", // Em
  Y: "[b3,f#4,b4,d#5]@4 [b3,f#4,b4,d#5]!2 ~@10", // B
})).s("gm_overdriven_guitar").gain(0.46).pan(0.4)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B C D E F G ~@9 A B C D E F G ~@9 A B C D E F G ~@8 D H C@2 I J C G ~@9 A B C D E F G ~@50
>`.pickRestart({
  A: "~ x!4 ~@3", B: "x!2 ~@2 x!2 ~@2", C: "x!2 ~@2 x ~@3", D: "x", E: "~@2 x ~ x!2 ~@2", F: "x ~@3 x!2 ~@2", G: "x!2",
  H: "~@2 x ~ x ~ x!2", I: "x!2 ~@6", J: "~ x!3",
})).gain(0.6)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A@8 B C@2 D B C@2 ~ A@8 B C@2 D B C@2 ~ A@8 B C@2 D B C@2 ~@8 E ~ C@2 D ~ C@2 ~ A@8 B C@2 D B C@2 ~@36 A ~@3 A ~@3
  A ~@3 A ~
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~ x", D: "~ x ~@2", E: "~@4 x ~ x!2",
})).gain(0.54)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4 A B@11 ~@3 C ~@3 D B@8 ~@3 C ~@3 D B@8 ~@3 C ~@3 D ~@7 D ~@3 E ~@3 F B@8 ~@3 C ~@3 D G B@46 H ~
>`.pickRestart({
  A: "x!5 ~ x ~", B: "x!4", C: "~@2 x!2", D: "x", E: "~@8 x!5 ~ x ~", F: "~ x ~@2", G: "~ x!3", H: "x!2 ~@2",
})).gain(0.54)

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

// drums · high tom
const high_tom = s("ht").struct("<~@23 A ~@15 A ~@15 A ~@7 B ~@7 C ~@15 A ~@49>".pickRestart({
  A: "~@6 x ~ x!5 ~ x ~", B: "~ x ~@2", C: "~@8 x!5 ~ x ~",
})).gain(0.54)

// drums · ride
const ride = s("rd").struct("<~@4 A B@11 ~@3 C ~@4 B@8 ~@3 C ~@4 B@8 ~@3 C ~@20 B@8 ~@3 C ~@53>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~ x ~ x", C: "~@9 x!3 ~@4",
})).gain(0.6)

stack(bass, acoustic_guitar_nylon, overdriven_guitar, kick, snare, hihat, open_hat, mid_tom, crash, high_tom, ride)

More by The Rolling Stones