Strudelify
Here Comes the Weekend (live) cover art

1992 · Tourism

Here Comes the Weekend (live)

Roxette

KeyE minorTempo122 bpm
0:00/0:00
// Here Comes the Weekend (live) — Roxette
// 122 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "A.PIANO 1" piano (copy of ch 2 "FINGERDBAS" electric bass finger)
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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 · "FINGERDBAS"
const bass = note(`<
  ~@3 A B C B D E F G H E F G I J@2 K@2 J@2 L M F@2 N O P@2 Q R F@2 N O P S T O P U B C B V E F G H E F G I J@2 K@2 J@2
  L M F@2 N O P@2 Q R F@2 N O P S T O P W X N Q Y X N Z G AA AB AC@2 AD@2 F@2 N O P@2 Q R F@2 N O P S T O P W ~@8
>`.pickRestart({
  A: "~@7 d3", B: "e3@3 d3 c3@3 e3", C: "d3@7 d3", D: "d3@3 d2", E: "e2@3 e2@3 e2 f#2", F: "g2@3 g2@3 g2@2",
  G: "d3@3 d3@3 d3@2", H: "c3@3 c3@3 c3 g2", I: "c3@3 c3@5", J: "c2@3 c3@5", K: "e2@3 e3@5", L: "a2@3 a2!3 c3 d3",
  M: "d2@3 d2 d2@2 e2 d2", N: "e2@3 e2@3 e2@2", O: "e2@3 e2@3 e2 d2", P: "c2@3 c2@3 c2@2", Q: "a1@3 a1@3 a1@2",
  R: "d2@3 d2@2 d2!3", S: "d2@3 d2 d3!4", T: "g2@3 g2@2 g1 b1 d2", U: "d2", V: "d3", W: "[d2,d3]", X: "b1@3 b1@3 b1@2",
  Y: "d2@3 d2@3 d2@2", Z: "c3@3 c3 g2@3 g2", AA: "f2@3 f2!5", AB: "f2!8", AC: "g2!8", AD: "[g1,g2]!8",
})).s("gm_electric_bass_finger").gain(0.56).pan(0.6)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@4 A B A C D E F G D E F G@3 D@2 G@2 H F E@2 D@2 G@2 H F E@2 D@2 G F E D G F A C A C D E F G D E F G@3 D@2 G@2 H F
  E@2 D@2 G@2 H F E@2 D@2 G F E D G F I D H F I D J F K@2 E@6 D@2 G@2 H F E@2 D@2 G F E D G F A C A L A C A L
>`.pickRestart({
  A: "[e3,b3,e4,g4,b4,e5] [c4,e4,g4,b4,e5]", B: "[d4,f#4,d5]", C: "[d4,f#4,a4,d5]", D: "[e3,b3,e4,g4,b4,e5]",
  E: "[g3,d4,g4,b4,g5]", F: "[d4,a4,d5,f#5]", G: "[c4,e4,g4,c5,e5]", H: "[a3,e4,a4,c5,e5]", I: "[b3,f#4,b4,d5,f#5]",
  J: "[c4,e4,g4,c5,e5] [g3,d4,g4,b4,g5]", K: "[f3,c4,f4,a4,c5,f5]", L: "[g3,d4,f#4,b4,g5]",
})).s("gm_acoustic_guitar_steel").gain(0.41)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@7 A@2 B C D@2 E F G H@2 I@2 H J K@3 L M N@2 O@4 L P Q R@2 S@2 T@2 ~@3 A@2 B C D@2 E F G H@2 I@2 H J K@3 L M N@2 U@4
  L P Q R@2 S@2 V@3 W X Y Z AA AB AC AD@3 ~@2 AE@2 L M N@2 O@4 L P Q R@2 S@2 T@2 AF AG AH AI AF AG AH AI
>`.pickRestart({
  A: "[~@7 [e4,g4]@5 ~@4]/2", B: "~ [d4,g4]@2 [d4,g4]@4 ~", C: "~@3 [d4,f#4]@2 ~@3",
  D: "[~@3 c4@2 ~@2 [e4,g4]@5 ~@4]/2", E: "~ [d4,g4]@2 [d4,g4]@3 ~@2", F: "[d4,f#4] [d4,f#4]@2 d4@2 ~@3",
  G: "[c4,e4] ~@2 c4@2 ~@3", H: "~@3 [g3,c4]@2 ~@3", I: "~@3 [g3,b3]@2 ~@3", J: "~@3 [g3,c4]@4 ~",
  K: "[[e4,a4]@4 ~@3 [d4,f#4]@4 ~ e4@2 e4 d4@9]/3", L: "d4@2 c4 b3 d4@3 b3", M: "c4 b3@6 ~",
  N: "[d4@2 c4 b3 d4@2 ~ [c4,d4]@7 ~@2]/2", O: "[~@3 [c4,e4]@2 ~@2 [c4,e4]@5 ~ e4 ~ [d4,f#4]@5 b3@2 c4 d4@9]/4",
  P: "c4 b3@5 ~@2", Q: "d4@2 c4 b3 d4@2 ~@2", R: "[[c4,e4]@5 ~@2 [d4,f#4]@4 ~@5]/2",
  S: "[[g4,b4]@4 ~@3 [b3,e4]@5 ~@4]/2", T: "[[g4,c5]@4 ~@3 [d4,f#4]@4 ~@5]/2",
  U: "[~@3 [c4,e4]@2 ~@2 [c4,e4]@5 ~ e4 ~ d4@5 b3@2 c4 d4@9]/4", // C
  V: "[[g4,c5]@4 ~@3 [d4,f#4]@4 ~@4 [d4,f#4]@4 [f#4,b4]@2 ~@3]/3", W: "~@3 [b3,e4]@2 ~@3", X: "[e4,a4]@3 [e4,a4]@2 ~@3",
  Y: "d4@3 ~@2 [d4,f#4]@3", Z: "~@3 [f#4,b4]@2 ~@3", AA: "[b3,e4]@3 [b3,e4]@2 ~@3", AB: "[e4,g4] ~", AC: "[d4,f#4]",
  AD: "[[c4,f4]@4 ~ [d4,g4]@3]/3", AE: "[[g4,b4]@4 e4@2 e4 d4@9]/2", AF: "~@3 d4 c4@3 e4", AG: "d4",
  AH: "e4@3 d4 c4@3 e4", AI: "d4@3 g3@5",
})).s("gm_piano").gain(0.42).pan(0.6)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@7 A@2 B C D@2 E F G H@2 I@2 H J K@3 L M N@2 O@4 L P Q R@2 S@2 T@2 ~@3 A@2 B C D@2 E F G H@2 I@2 H J K@3 L M N@2 O@4
  L P Q R@2 S@2 U@3 V W X Y Z AA AB AC@3 ~@2 AD@2 L M N@2 O@4 L P Q R@2 S@2 T@2 ~@8
>`.pickRestart({
  A: "[~@7 [e4,g4,b4]@5 ~@4]/2", B: "~ [d4,g4,b4]@2 [d4,g4,b4]@4 ~", C: "~@3 [d4,f#4,a4]@2 ~@3",
  D: "[~@3 [c4,e4]@2 ~@2 [e4,g4,b4]@5 ~@4]/2", E: "~ [d4,g4,b4]@2 [d4,g4,b4]@3 ~@2",
  F: "[d4,f#4,a4] [d4,f#4,a4]@2 [d4,f#4]@2 ~@3", G: "[c4,e4,a4] ~@2 [c4,e4]@2 ~@3", H: "~@3 [g3,c4,e4]@2 ~@3",
  I: "~@3 [g3,b3,e4]@2 ~@3", J: "~@3 [g3,c4,e4]@4 ~",
  K: "[[e4,a4,c5]@4 ~@3 [d4,f#4,a4]@4 ~ [e4,c5]@2 [e4,c5] [d4,b4]@9]/3", // Am D C G
  L: "[d4,b4]@2 [c4,a4] [b3,g4] [d4,b4]@3 [b3,g4]", M: "[c4,a4] [b3,g4]@6 ~",
  N: "[[d4,b4]@2 [c4,a4] [b3,g4] [d4,b4]@2 ~ [c4,d4,g4]@7 ~@2]/2", // G F Em G Csus2
  O: "[~@3 [c4,e4,g4]@2 ~@2 [c4,e4,a4]@5 ~ [e4,c5] ~ [d4,f#4]@5 [b3,g4]@2 [c4,a4] [d4,b4]@9, ~@15 b4@2 ~@15]/4", // C Am C D Em F G
  P: "[c4,a4] [b3,g4]@5 ~@2", Q: "[d4,b4]@2 [c4,a4] [b3,g4] d4@2 ~@2, ~@4 b4 ~@3",
  R: "[[c4,e4,g4]@5 ~@2 [d4,f#4,a4]@4 ~@5]/2", S: "[[g4,b4,d5]@4 ~@3 [b3,e4,g4]@5 ~@4]/2",
  T: "[[g4,c5,e5]@4 ~@3 [d4,f#4,a4]@4 ~@5]/2", // C D
  U: "[[g4,c5,e5]@4 ~@3 [d4,f#4,a4]@4 ~@4 [d4,f#4,b4]@4 [f#4,b4,d5]@2 ~@3]/3", V: "~@3 [b3,e4,g4]@2 ~@3",
  W: "[e4,a4,c5]@3 [e4,a4,c5]@2 ~@3", X: "[d4,f#4]@3 ~@2 [d4,f#4,a4]@3", Y: "~@3 [f#4,b4,d5]@2 ~@3",
  Z: "[b3,e4,g4]@3 [b3,e4,g4]@2 ~@3", AA: "[e4,g4,c5] ~", AB: "[d4,f#4,a4]", AC: "[[c4,f4,a4]@4 ~ [d4,g4,b4]@3]/3",
  AD: "[[g4,b4,d5]@4 [e4,c5]@2 [e4,c5] [d4,b4]@9]/2", // G C G
})).s("gm_rock_organ").gain(0.42).pan(0.4)

// other · piano · "HONKY TONK"
const piano_2 = note(`<
  ~@7 A@2 B C D@2 E F G H I J K L M N@3 O P Q@2 R@4 O S T U@2 V@2 W@2 X ~@2 Y@2 B C D@2 E F G H I J K L M N@3 O P Q@2
  R@4 O S T U@2 V@2 Z@3 ~@8 AA@2 AB AC AD@2 O P Q@2 R@4 O S T U@2 V@2 W@2 AE ~@7
>`.pickRestart({
  A: "[~@5 g4 a4 b4@5 ~ e4 g4 a4]/2", B: "a4 b4@2 b4@4 b4", C: "a4@2 a4 a4@2 a4!2 b4",
  D: "[a4@2 g4@2 g4!2 e4@4 g4@2 a4@2 b4@10 ~@2 e4@2 g4@2 a4@2]/2", E: "a4 b4@2 b4@3 b4 d5",
  F: "a4 a4@2 f#4@2 f#4 a4 b4", G: "b4 g4@2 e4@2 c4 e4 f#4", H: "f#4 e4@2 e4@2 c4 e4 f#4", I: "f#4 e4@2 e4@2 e4 g4 f#4",
  J: "f#4 e4@2 e4@2 b3 f#4!2", K: "f#4 e4@2 e4@2 b3 g4 f#4", L: "f#4@2 e4 e4@2 c4 g4 f#4", M: "f#4 e4@2 e4@4 e4",
  N: "[c5@2 c5@2 b4@2 a4 a4@4 e4 c5@2 c5 b4@9]/3", O: "b4@2 a4 g4 b4@3 g4", P: "a4 g4@6 g4",
  Q: "[b4@2 a4 g4 b4@2 d5 g4@7 a4 g4]/2", R: "[b4@2 a4 g4@2 b4 g4 a4@5 ~ c5 b4 b4@2 a4@3 g4@2 a4 b4@9]/4",
  S: "a4 g4@5 ~ d4", T: "b4@2 a4 g4 b4 d5@2 g4", U: "[g4@5 a4 b4 a4@4 d4 g4 a4 g4@2]/2",
  V: "[d5@4 b4 a4@2 g4@5 g4 a4 g4@2]/2", W: "[e5@4 c5 b4@2 a4@4 a4 b4@2 a4 g4]/2", X: "e4 ~@7",
  Y: "[~@5 g4 a4 b4@2 ~@4 e4 g4 a4]/2", Z: "[e5@4 c5 b4@2 a4@4 a4 b4@2 d5 b4@4 ~@5]/3", AA: "[~@4 c5@2 b4 b4@9]/2",
  AB: "~@8 a4@4 g4@2 g4 e4", AC: "d4", AD: "[d5@4 c5@2 c5 b4@2 ~@7]/2", AE: "e4@3 ~@5",
})).s("gm_piano").gain(0.41).pan(0.4)

// other · accordion
const accordion = note("<~@80 A B C D E B F G ~@32>".pickRestart({
  A: "~@3 d5@2 c5 b4@2", B: "g4@3 g4@2 a4 b4@2", C: "c5@3 c5@2 b4 a4@2", D: "f#4@3 f#4 g4 a4@3", E: "d5@3 d5@2 c5 b4@2",
  F: "c5@4 d5 b4 g4@2", G: "a4",
})).s("gm_accordion").gain(0.41)

// drums · kick
const kick = s("bd").struct("<~@4 A@37 B A@33 B A@3 B A@8 C@6 A@13 B A@3 B ~@8>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x", C: "x!8",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@3 A B@33 C B@3 D B@3 E B@29 F B@3 G B@3 H B@4 ~@5 I B@13 F B@3 J ~@8>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "x ~@10 x!2 ~ x ~", E: "~@4 x ~@6 x!2 ~ x ~", F: "x!8",
  G: "x ~@5 x!2", H: "~@2 x ~@3 x!2", I: "~@10 x!5 ~", J: "x",
})).gain(0.4)

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

// drums · clap
const clap = s("cp").struct("<~@24 [~ x ~ x]!17 ~@21 [~ x ~ x]!17 ~@15 [~ x ~ x]!17 ~@9>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@15 A ~ A ~ A ~@4 B ~ B ~ B ~ B ~ B ~ B ~ B ~@16 A ~ A ~ A ~@4 B ~ B ~ B ~ B ~ B ~ B ~ B ~@19 B ~ B ~ B ~ B ~ B ~ B ~
  B ~@13
>`.pickRestart({
  A: "~@6 x!2", B: "~@2 x!2 ~@12",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@15 A ~ A ~ A ~ A ~ A B@17 C ~@11 A ~ A ~ A ~ A ~ A B@17 C ~@14 B@17 C ~@8
>`.pickRestart({
  A: "~@6 x!2", B: "x!8", C: "x",
})).gain(2.01)

stack(bass, acoustic_guitar_steel, piano, rock_organ, piano_2, accordion, kick, rim, snare, clap, tambourine, cabasa)

More by Roxette