Strudelify
Paint cover art

1988 · Look Sharp!

Paint

Roxette

KeyB♭ majorTempo123 bpm
0:00/0:00
// Paint — Roxette
// 123 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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 · "A.PIANO 1"
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G H I J K H L M N@2 O@2 P@8 Q@2 R@2 S H I T U H V M N@2 O@2 P@8 W@8 X@2 Y@2 Z@2 AA@2 AB@2
  AC@2 AD@2 AE@2 AF@2 AG@4 AH@2 AI@2 AJ@2 AK@2 AL@2 AM AN AO@2
>`.pickRestart({
  A: "[g2@2 g2@2 g2 c2 d2 eb2@2 eb2@2 eb2@2 eb2!3]/2", B: "[c2@2 c3@2 c2!2 c3 bb2@2 bb2@2 f2@3 ~@2]/2",
  C: "[[f4,g4,bb4] ~@2 [f4,g4,c5] g2 c2 d2 ~ [f4,g4,bb4] eb2@2 [f4,g4,c5] ~ eb2!3, g2@2 g2@2 ~@3 eb2@2 ~@2 eb2@2 ~@3]/2", // Gm7 Fsus2 Gm7 Fsus2
  D: "[[f4,g4,bb4]@2 ~@4 [f4,g4,c5]@2 c2@2 c2@2 c3@2 ~@2 [d4,f4,bb4]@2 bb2@4 [c4,f4,a4]@2 ~@2 bb4 a4 g4 d4 bb3 a3, c2@2 c3@2 ~@3 bb2@2 ~@2 f2@3 ~@2]/2", // Gm7 Fsus2 Bb F
  E: "[g3 f4 f4@2 g4@2 d4@2 [f2,f4]@2 f4@2 g4@2 c2@4 c3@2 [c2,g4,bb4,f5]@4 c2@2 f2@2 g2@2 bb2@2, g2@2 g2@2 ~ f2@2 f4 ~@4 [g4,bb4,e5]@2 ~@2]/2", // F Csus4 Edim
  F: "[~ f4 f4@2 g4@2 d4@2 [f2,f4]@2 f4@2 g4@2 c2@4 c2@2 [c2,g4,bb4,f5]@4 [g4,bb4,e5]@2 f3@2 g3@2 f3@2, g2@2 g2@2 ~ f2@2 f4 ~@4 c2@2 g2@2]/2", // F Csus4 Edim
  G: "[g2,g3]@2 g3 f3 g3 ~ c2 [d2,f3], ~ g2!2 ~, ~@5 g3@2 ~", H: "g3!2 bb3 ~@2 g3 bb3!2, eb2!4, ~@3 g3@2 ~@3",
  I: "[bb2,d4]@2 d4!6, ~ bb2!3", J: "c4 ~@3 g2!2 g3 f3, f2!2 ~ f2, ~ c4@2 c4@3 ~@2",
  K: "g3!2 [g2,g3]@2 [g2,g3]@2 [c2,g3] [d2,f3], g2 ~@3", L: "[bb2,d4]@2 d4!2 [bb2,d4]@2 [d2,d4] [eb2,d4], ~ bb2 ~@2",
  M: "[f2,bb3,c4]@2 c4 ~ g2 [f2,f3] f3!2, ~ f2 ~ f2, ~@3 [a3,c4]@2 ~@3", // Fsus4 F Am
  N: "[~@2 g2@2 [f2,f4] f4 g4 f4@2 g3 d4 f4 c2 f2 [g2,c4] [bb2,bb3], [g2,bb3]@2 ~@3 f2@2 c2@3 c2@2 ~@4, ~ g3@4 ~@7 d4@2 ~@2]/2", // F C5 Bb Gm
  O: "[~ bb3 ~ bb3 [f2,c4] bb3 c4 bb3 c4 [c2,bb3] ~ bb3 ~ bb3 c4 bb3, [g2,c4]@2 [g2,c4]@2 ~ f2@2 c2@2 ~ [c2,c4]@2 [c2,c4]@2 ~@2]/2", // F5 C7 C5 C
  P: "[c3@2 c3@2 c3@2 g4 ~ f2@2 f2@2 ~ bb3 c4 ~ bb2@2 bb2@2 bb2@2 d4 ~@7 c4 ~ c3@2 c3@2 ~ c4 g4 ~ f2@2 f2@2 ~ bb3 c4 ~ bb2@2 bb2@2 ~ c4 d4 ~@7 [eb2,c4]@2, [eb3,g3] [f3,a3] [f3,bb3] g3 [eb3,g3] [f3,a3] [f3,bb3] g3, c4@6 c3@2 ~@4 f2@2 f2@2 ~@6 bb2@2 bb3@5 bb3@3 ~@24 bb3@5 bb3@3, ~@7 c4@5 ~@3 d4@7 ~ d4@2 eb4@2 c4@2 ~@2 c4@5 ~@3 c4@5 ~@3 d4@5 ~@3 eb4@2 d4@2 c4@2 ~@3, ~@12 eb2!4 ~@2 c3!2 ~@2 f2!2 ~@2 bb2!2 eb2!3 ~]/8", // Cm Eb F Bb5 Eb F Bb5
  Q: "[[f4,g4,bb4] ~@2 [f4,g4,c5] g2 c2 d2 ~ [f4,g4,bb4] eb2@2 [f4,g4,c5] ~ eb2!2 d2, g3 ~, g2@2 g2@2 ~@3 eb2@2 ~@2 eb2@2 ~@3]/2", // Gm7 Fsus2 Gm7 Fsus2
  R: "[[f4,g4,bb4] ~@2 [f4,g4,c5] c2!2 c3 ~ [d4,f4,bb4] bb2!2 [f2,c4,f4,a4] ~ f3!3, c2@2 c3@2 ~@3 bb2@2 ~@3 f2@2 ~@2]/2", // Gm7 Fsus2 Bb F
  S: "[g2,g3]@2 g3 f3 g3!2 [c2,g3] [d2,f3], ~ g2!2 ~", T: "c4 ~@3 g2 [g2,f3] g3 f3, f2!2 ~ f2, ~ c4@2 c4@2 ~@3",
  U: "g3!2 [g2,g3]@2 g3 f3 c2 d2, g2 ~ g2 g3", V: "[bb2,d4]@2 d4!4 [d2,d4] [eb2,d4], ~ bb2!2 ~",
  W: "[c3@2 c3@2 ~ c4 g4 ~ f2@2 f2@2 ~ bb3 c4 ~ bb2@2 bb2@2 bb2@2 d4 ~@2 d4 eb4 ~@3 c4 ~ c3@2 c3@2 ~ c4 g4 ~ f2@2 f2@2 ~ bb3 c4 ~ bb2@2 bb2@2 ~ c4 d4 ~@7 [eb2,c4]@2, eb3 [f3,a3] [f3,bb3] g3 [eb3,g3] [f3,a3] [f3,bb3] g3, g3@4 c3@2 c3@2 ~@4 f2@2 f2@2 ~@6 bb2@2 bb3@5 bb3@3 ~@24 bb3@5 bb3@3, ~@7 c4@5 ~@3 d4@7 ~ d4@2 ~@2 c4@2 ~@2 c4@5 ~@3 c4@5 ~@3 d4@5 ~@3 eb4@2 d4@2 c4@2 ~@3, ~@12 eb2!4 ~@2 c3!2 ~@2 f2!2 ~@2 bb2!2 eb2!3 ~]/8", // Cm F Bb5 Eb F Bb5
  X: "[g2@2 g2@2 f2 f2@2 c2@2 c2 [c2,g4,bb4,f5]@2 c2!2 f2@2, d4@4 ~@2 [g4,bb4,e5] ~]/2", // Csus4 Edim
  Y: "[g2@2 g2@2 f2 f2@2 ~@2 c6 [c2,g4,bb4,f5]@2 c2 f2 [g2,g4,g5]@2, ~@7 c2@3 ~@2 [g4,bb4,e5]@2 ~@2]/2", // Csus4 G Edim
  Z: "[c5 g4 c4 bb4 [bb2,f4] [bb2,c4]@2 c4 a4 c4 [f2,bb4]@2 f2 bb2 c3 eb3, c3@2 c3@2 ~@3 f2@3 ~@2 a4@2 f4@2]/2", // Bb5 Bbsus2 Bb5
  AA: "[c5 g4 c4 bb4 [bb2,f4] [bb2,c4]@2 c4 a4 [f2,c4] [f2,f4]@2 [f2,f4]@4, c3@2 c3@2 ~@3 f2@2 ~@7]/2", // Bb5 Bbsus2 F5 F
  AB: "[ab4@6 c5 ~@6 ab4!2 c5, [f3,c4,f4] [f3,d4,f4], ~@7 bb4@5 ~@4]/2", // F5 Dm
  AC: "[bb4@6 bb4 ~@2 c5@2 ab4@2 g4 ab4!2, [g3,bb3,eb4] [ab3,c4,eb4], ~@7 bb4@2 ~@7]/2", // Eb Ab
  AD: "[~ g4 ab3@2 c4@2 ~@4 f4@2 c5@2 ~@4 c4@2 f4@2 ~@4 g4@2 ab4@2 c5@2, f3@8 ~@3 d4@5, ~ f4@3 ~@3 bb4@5 ~@4, ~@3 ab3@5 bb3@8]/2",
  AE: "[~ bb3 eb4 ~@3 bb4 ~@2 c5@2 ~@2 d2 eb2 e2, [eb3,g4]@8 [ab3,c4]@5 ~@3, bb4@6 ~ bb4@2 ~@2 c5@5, ~@3 bb3@5 eb4@8]/2", // Eb Ab
  AF: "[f2@2 f2@2 f2@2 c5 ~ bb2@2 bb2@2 ~ eb4 f4 ab4, [ab3,c4] [f3,d4], f4@3 f2 ~@2 bb2!2, ~@7 f4@5 ~@4]/2", // Ab Dm
  AG: "[eb2@2 eb2@2 eb2@2 g4 ~@7 f4 ~ f2@2 f2@2 ~ f4 c5 ~ bb2@2 bb2@2 ~ eb4 f4 ab4, [bb3,eb4] eb3 [ab3,c4] [f3,d4], g4@6 eb2@2 eb4@5 eb4@3 ~@16, ~@7 g4@2 ab4@2 f4@2 ~@2 f4@5 ~@3 f4@5 ~@4, ~@4 ab2!4 ~@2 f2!2 ~@2 bb2!2]/4", // Eb5 Ab Dm
  AH: "[eb2@2 eb2@2 ~ f4 g4 ~@7 [ab2,f4]@2, [bb3,eb4] eb3, g4@4 eb2@2 eb2@2 eb4@5 eb4@3, ~@7 ab4@2 g4@2 f4@2 ~@3, ~@4 ab2!3 ~]/2", // Db Eb5
  AI: "[f2@2 f2@2 ~ c5 g4 ~@3 bb2@2 ~ bb4 g4 c5, ab3 [d4,f4], c4@2 f2!2 bb2 ~ bb2!2, ~@7 bb4@3 ~@6, ~@9 c5@3 ~@4]/2", // Dm
  AJ: "[eb2@2 eb2@2 eb2@2 bb4 ~@2 bb4 c5 ~@2 g4 ab4!2, [eb4,g4] [c4,eb4], bb4@3 eb2 ab2!4, ~@7 bb4@2 ~@2 ab4@2 ~@3]/2", // Eb Cm
  AK: "[~ g4 ~@2 f2@4 ~@2 f4@2 c5@2 ~@2 bb2@4 bb2@4 ~@2 g4@2 ab4@2 c5@2, c4 [d4,f4], f2 ~ f2!2 ~@2 bb2!2, ~ f4@3 ~@3 bb4@5 ~@4]/2", // Dm
  AL: "[eb2@2 eb2@2 ~ f4 g4 ~@7 [ab2,f4]@2, eb4 c4, [g4,bb4]@4 eb2@2 eb2@2 eb4@5 eb4@3, ~@7 ab4@2 g4@2 f4@2 ~@3, ~@4 ab2!3 ~]/2", // Db Gm
  AM: "f2 ~@2 f2, ab3, g4@3 f4@2 c4@3, ~ f2!2 ~", AN: "bb2 ~ bb2 [bb2,f4,f5], [d4,bb4,d5]@3 [eb4,eb5]@3 ~@2, ~ bb2 ~@2",
  AO: "[eb2@2 eb2@2 ~ bb4!2 ~@6 g4 [ab2,g4]@2, [g4,eb5,g5]@5 ~@2 bb4@2 ab4@2 ab4@2 ~@3, ~@2 eb2!2 [c4,eb4]@4, ~@4 ab2!3 ~]/2", // Abmaj7 Cm
})).s("gm_piano").gain(0.41)

// bass · slap bass 2 · "SLAPBASS 2"
const bass = note(`<
  ~ A@2 B@2 A@2 B@2 C@2 D@2 E F G H E F I J K@2 L@2 M N G F M N G F O@2 P@2 E F G H E F I J K@2 L@2 M N G F M N G F M N
  G F M N G F Q@2 R@2 S@2 T@2 ~@4 U V W X N G F Y N G F Y N G F Y N G F Y N G F Y
>`.pickRestart({
  A: "[g2@2 g2@2 g2 c2 d2 eb2@2 eb2@2 eb2@2 eb2!3]/2", B: "[c2@2 c3@2 c2!2 c3 bb2@2 bb2@2 f2@3 ~@2]/2",
  C: "[g2@2 g2@2 f2 f2@2 c2@2 c3 c2@2 c2 f2 g2 bb2]/2", D: "[g2@2 g2@2 f2 f2@2 c2@2 c2 c2@2 c2@2 g2@2]/2",
  E: "g2@2 g2@2 g2@2 c2 d2", F: "eb2!4", G: "bb2!4", H: "f2@2 f2@2 g2!2 f2@2", I: "bb2@2 bb2@2 bb2@2 d2 eb2",
  J: "f2@2 f2@2 g2 f2 f2@2", K: "[g2@2 g2@2 f2 f2@2 c2@3 c2@2 c2 f2 g2 bb2]/2",
  L: "[g2@2 g2@2 f2 f2@2 c2@2 c2 c2@2 c2@2 ~@2]/2", M: "c3!4", N: "f2!4",
  O: "[g2@2 g2@2 g2 c2 d2 eb2@2 eb2@2 eb2@2 eb2!2 d2]/2", P: "[c2@2 c3@2 c2!2 c3 bb2@2 bb2!2 f2 f2@2 ~@2]/2",
  Q: "[g2@2 g2@2 f2 f2@2 c2@2 c2 c2@2 c2!2 f2@2]/2", R: "[g2@2 g2@2 f2 f2@2 c2@3 c2@2 c2 f2 g2@2]/2",
  S: "[c3@2 c3@2 bb2 bb2@2 f2@3 f2@2 f2 bb2 c3 eb3]/2", T: "[c3@2 c3@2 bb2 bb2@2 f2@2 f2 f2@2 f2@4]/2",
  U: "~ ab3 c4 ab3@5", V: "~ c4 f4 d4@5", W: "~ bb3 eb4 bb3@5", X: "~@5 d2 eb2 e2", Y: "ab2!4",
})).s("gm_slap_bass_2").gain(0.41).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@5 A@3 B ~@8 C@3 D ~@12 A@3 B ~@64>".pickRestart({
  A: "[f4,g4,bb4] ~@2 [f4,g4,c5] ~@4", B: "[d4,f4,bb4] ~@2 [c4,f4,a4] ~@4", C: "bb4 ~@5 c5 ~@9", D: "bb4 ~@5 a4 ~@9",
})).s("gm_string_ensemble_1").gain(0.41).pan(0.4)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note("<~@9 A ~ A ~@9 A ~ A ~@77>".pickRestart({
  A: "~ f4 f4@2 g4@2 d4@2 f4@2 f4@2 g4@2 f4@2",
})).s("gm_distortion_guitar").gain(0.41)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@8 A B C ~ D ~@53 C ~ E ~@32>".pickRestart({
  A: "~@10 bb4 a4 g4 d4 bb3 a3", B: "g3 ~@15", C: "~ [g4,bb4,f5] [g4,bb4,e5] ~", D: "~@2 [g4,bb4,f5]@2 [g4,bb4,e5] ~@3",
  E: "~ c6 [g4,bb4,f5]@2 [g4,bb4,e5]@2 [g4,g5]@2", // Gm7 Edim G
})).s("gm_brass_section").gain(0.51).pan(0.6)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A@2 B@2 A@2 B@2 C@4 D E F G D E F G C@4 H G F E H G F E A@2 B@2 D E F G D E F G C@4 H G F E H G F E H G F E H G F E
  C@4 I@4 J K L M J K L M G F E N G F E N G F E N G F E N G F E N
>`.pickRestart({
  A: "[g2@7 eb2@9]/2", B: "[c2@7 bb2@4 f2@5]/2", C: "[g2@4 f2@3 c2@9]/2", D: "g2", E: "eb2", F: "bb2", G: "f2", H: "c3",
  I: "[c3@4 bb2@3 f2@9]/2", J: "f3", K: "bb3", L: "eb3", M: "ab3", N: "ab2",
})).s("gm_acoustic_guitar_steel").gain(0.41).pan(0.4)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@69
  [c5 g4 c4 bb4 f4 c4@2 c4]
  [a4 c4 bb4@2 a4@2 f4@2]
  [c5 g4 c4 bb4 f4 c4@2 c4]
  [a4 c4 f4@2 f4@4]
  ~@28
>`).s("gm_electric_guitar_jazz").gain(0.41)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<~@25 A B C D A B C D ~@68>".pickRestart({
  A: "[eb3,g3]", B: "[f3,a3]", C: "[f3,bb3]", D: "[g3,bb3]",
})).s("gm_pad_halo").gain(0.41)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A C A B A B A B D E A B A B A B A B A B A F A B A B A B A B A B A B A B A B A B A B A B
  A B A B A G A B A B A B A H I@7 B ~@20
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x ~ x ~ x!4", D: "x ~@3 x ~@3 x ~@3 x ~@2 x", E: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~@3",
  F: "x ~@3 x ~@3 x ~ x!5 ~", G: "x!2 ~@2", H: "x!3 ~", I: "x ~ x ~ x!2 ~@2",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 [x!5 ~@3] ~@52>").gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~@7 x] ~@84>").gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@4 x!4] x ~@51>").gain(0.41)

// drums · crash
const crash = s("cr").struct("<~ A ~@23 A ~@7 A ~@15 A ~@31 A ~@19>".pickRestart({
  A: "x",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@25 [~ x ~ x]!7 [~@2 x ~@3 x!2] [~ x ~ x]!3 ~@41 [~ x ~ x]!3 [~ x ~@2] ~@20>")
  .gain(0.41)

// drums · shaker
const shaker = s("sh").struct("<~@77 [~ x ~ x]!3 [~ x ~@2] ~@20>").gain(0.51)

// drums · claves
const claves = s("clave:2").struct("<~@12 [~@2 x!2 ~@12] ~@88>").gain(2.01)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@12 [x!4 ~@12] ~@88>").gain(0.59)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@12 [x!2 ~@14] ~@88>").gain(0.59)

// drums · triangle
const triangle = s("triangles:30").struct("<~ A B A B A@7 B A@11 ~@4 A@20 ~@25 C@8 ~@20>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x!3 ~ x", C: "x!2 ~@2 x ~ x ~",
})).gain(2.68)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@48 [x!3 ~@13] ~@52>").gain(2.68)

stack(
  piano, bass, string_ensemble_1, distortion_guitar, brass_section, acoustic_guitar_steel, electric_guitar_jazz,
  pad_halo, kick, snare, hihat, mid_tom, open_hat, high_tom, crash, tambourine, shaker, claves, woodblocks,
  woodblocks_2, triangle, triangle_2
)

More by Roxette