Strudelify
Silver Blue cover art

Tourism 30th Anniversary Edition

Silver Blue

Roxette

KeyC majorTempo96 bpm
0:00/0:00
// Silver Blue — Roxette
// 96 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/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 · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A@4 B@4 C D E F C D G D C D E F C D G D H I G J H I G J E K@3 C ~@2 L C D E F M@2 G D C D E F C D G D H I G J H I
  G J@2 I G J H I G J N ~@4 H I G J H I G J H I O J H I P@2
>`.pickRestart({
  A: "[~ g4 ~ a#4 g4@2 f4@2, c4@31 ~, ~ f4 ~@2]/4", B: "[~ g4 ~ a#4 g4@2 f4@2, c4@57 ~@7, ~ f4 ~@2]/4", C: "[g4,c5,e5]",
  D: "[g4,b4,d5]", E: "[a4,c5,e5]", F: "[f4,a4,c5]@3 [g4,b4,d5]", G: "[f4,a4,c5]", H: "[a4,c5,e5] [g4,b4,d5]",
  I: "[f4,a4,c5] [g4,c5,e5]", J: "[g4,c5,e5] [g4,b4,d5]", K: "[[f4,a4,c5]@35 ~@5 [g4,b4,d5]@8]/3", L: "~@3 [g4,b4,d5]",
  M: "[g4 [g4,b4,d5], [c5,e5]]/2", N: "[a4,c5,e5]@15 ~", O: "[f4,a4,c5]@15 ~", P: "[[f4,a4,c5]@5 ~@3]/2",
})).s("gm_synth_strings_1").gain(0.16)

// other · pad new age
const pad_new_age = note("<~@26 A B C ~ A D C ~@25 A E F@2 A D C ~@3 G@2 A D ~@6 H A D ~@14>".pickRestart({
  A: "e4 d4", B: "c4@8 e4@7 ~", C: "~@4 a4 b4 c5 g4", D: "c4@8 e4@5 ~@3", E: "c4@4 e4@3 ~",
  F: "[~@4 a4 b4 c5 g4@2 ~@7]/2", G: "[~@8 a4@2 b4@2 c5@2 g4@5 ~@13]/2", H: "~@14 c4 d4",
})).s("gm_pad_new_age").gain(0.48)

// chords · vibraphone
const vibraphone = note("<~@34 A@2 ~@30 B@2 C ~@26>".pickRestart({
  A: "[~@31 c5, ~@6 c5@4 c5@3 d5@17 f5@2, ~@7 d5@2 d5@3 g5@10 f5 g5 c6@2 f5@2 c6@4, ~@8 g5@3 g4@21, ~@14 c5@11 g5@2 c5@2 g5@3]/2",
  B: "[~@15 f5, ~@6 c5@4 c5@3 d5@16 g5@3, ~@7 d5@2 d5@3 g5@10 f5 g5 c6@2 f5@2 c6@4, ~@8 g5@3 g4@21, ~@14 c5@11 g5@2 c5@5]/2",
  C: "c5 ~@15",
})).s("gm_vibraphone").gain(0.44)

// chords · overdriven guitar
const overdriven_guitar = note("<~@79 A B C D A B E F G H E F I B J@2>".pickRestart({
  A: "[a3,c4,e4]@7 ~ [g3,b3,d4]@6 ~@2", B: "[f3,a3,c4]@3 ~ [g3,c4,e4]@3 ~", C: "[f3,a3,c4]@7 ~",
  D: "[g3,c4,e4]@5 ~@3 [g3,b3,d4]@7 ~", E: "[f3,a3,c4]@13 ~@3", F: "[g3,c4,e4]@3 ~ [g3,b3,d4]@3 ~",
  G: "[a3,c4,e4]@6 ~@2 [g3,b3,d4]@7 ~", H: "[f3,a3,c4]@6 ~@2 [g3,c4,e4]@5 ~@3", I: "[a3,c4,e4]@3 ~ [g3,b3,d4]@3 ~",
  J: "[[f3,a3,c4]@15 ~]/2", // F
})).s("gm_overdriven_guitar").gain(0.37)

// other · melodic tom
const melodic_tom = note(`<
  A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 C B D B D B D B D@2 B D@2 B D@2 B D@2 B D@2 B
  D@2 B D@2 B D@2 B D@2 B D@2 B D@2 B D@2 B D@2 B D@2 B D@2 B D@2 B D ~@2
>`.pickRestart({
  A: "g2@2 ~ g2 ~@2 e2 ~ g2 ~ e2 ~ a2@2 ~@2", B: "g2 ~@2 g2 ~@2 e2 ~ g2 ~ e2 ~ a2 ~@3",
  C: "g2 ~@2 g2 ~@2 e2 ~ g2 ~ e2 ~ a2@2 ~@2", D: "g2 ~@2 g2 ~@2 e2 ~ g2 ~ e2 ~ a2!4",
})).s("gm_melodic_tom").gain(0.8)

// bass · fretless bass
const bass = note(`<
  ~@2 A@4 B@4 C D E F C D G H C D I J K L M N O P Q R O P S R T Q U V W@3 X C D E Y C D Z N AA N I AB C N S N O P S R O
  P S R O P G R O P S R AC AD N AE@2 O P AF R O P AG R O AH AI R O P AJ ~
>`.pickRestart({
  A: "[~@2 g2@2 ~@2 a#2@2 g2@4 f2@2 c2 a#1, c2@27 ~@5, ~ f2 ~@2]/4",
  B: "[~@8 g2@8 ~@8 a#2@8 g2@16 f2@8 c2 ~@3 a#1@3 ~, c2@7 ~, ~ f2 ~@2]/4", C: "c2@2 ~ c2@3 c2@10",
  D: "g1@2 ~ g1@3 g1@10", E: "a1@2 ~ a1@3 a1@10", F: "f1@2 ~ f1@3 f1@6 g1@4", G: "f1@2 ~ f1@3 f1@10", H: "g1@11 ~ g1@4",
  I: "a1@3 a1@3 a1@10", J: "f1@2 ~ f1@2 f1@7 g1@4", K: "c2@7 c2", L: "g1@3 g1@3 g1@10", M: "f1@7 ~", N: "g1",
  O: "a1 g1", P: "f1 c2", Q: "f1@15 ~", R: "c2 g1", S: "f1", T: "a1", U: "f1@2 ~ f1@13",
  V: "f1@2 ~ f1@3 f1@2 g1@2 ~ g1@3 g1@2", W: "[c2@11 ~@5]/3", X: "~@4 b1 c2 d2@2", Y: "f1@2 ~ f1@3 f1@6 g1@2 ~@2",
  Z: "f1@7 f1@9", AA: "c2@3 c2@3 c2@10", AB: "f1@3 g1", AC: "a1@13 ~@3", AD: "e1", AE: "[d1@29 ~@3]/2",
  AF: "f1@3 f1@3 f1@10", AG: "f1@13 ~@3", AH: "f1@4 c2@3 ~", AI: "f1@7 ~@9", AJ: "f1@9 ~@7",
})).s("gm_fretless_bass").gain(0.75)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A
  B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 ~@2
>`.pickRestart({
  A: "x ~@2 x ~@4 x ~@3 x ~@3", B: "x!4",
})).gain(0.53)

stack(synth_strings_1, pad_new_age, vibraphone, overdriven_guitar, melodic_tom, bass, tambourine)

More by Roxette