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, A@4 for four bars: 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 E ~@4 H I G J H I G J H I G J H I N@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: "[[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 B E@2 A D C ~@3 F@2 A D ~@6 G 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: "[~@4 a4 b4 c5 g4@2 ~@7]/2",
  F: "[~@8 a4@2 b4@2 c5@2 g4@5 ~@13]/2", G: "~@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 D F B E D A B G@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]@3 ~ [g3,b3,d4]@3 ~", E: "[f3,a3,c4]@13 ~@3", F: "[a3,c4,e4]@6 ~@2 [g3,b3,d4]@7 ~",
  G: "[[f3,a3,c4]@15 ~]/2", // F
})).s("gm_overdriven_guitar").gain(0.37)

// other · melodic tom
const melodic_tom = note(`<
  A@38 B A B A B 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
>`.pickRestart({
  A: "g2 ~@2 g2 ~@2 e2 ~ g2 ~ e2 ~ a2 ~@3", B: "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 E I J D K L M N O P M N Q P R O S T U@3 V C D E W C D X L C L E Y C L Q L M N Q P M N
  Q P M N G P M N Q P Z AA L AB@2 M N G P M N AC P M AD AE P M N AF ~
>`.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: "f1@2 ~ f1@2 f1@7 g1@4", J: "c2@7 c2", K: "f1@7 ~", L: "g1", M: "a1 g1", N: "f1 c2", O: "f1@15 ~", P: "c2 g1",
  Q: "f1", R: "a1", S: "f1@2 ~ f1@13", T: "f1@2 ~ f1@3 f1@2 g1@2 ~ g1@3 g1@2", U: "[c2@11 ~@5]/3", V: "~@4 b1 c2 d2@2",
  W: "f1@2 ~ f1@3 f1@6 g1@2 ~@2", X: "f1@7 f1@9", Y: "f1@3 g1", Z: "a1@13 ~@3", AA: "e1", AB: "[d1@29 ~@3]/2",
  AC: "f1@13 ~@3", AD: "f1@4 c2@3 ~", AE: "f1@7 ~@9", AF: "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