Strudelify

Invisible Sun

The Police

KeyC minorTempo130 bpm
0:00/0:00
// Invisible Sun — The Police
// 130 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · electric guitar clean
const electric_guitar_clean = note("<~@2 A B A B A ~@56 C D E F G H I J K L M@2 K L K N@4 ~@16>".pickRestart({
  A: "[eb4,g4,bb4]", B: "[eb4,g4,d5]", C: "~@2 bb4 bb4@2 bb4!3, [eb4,g4]", D: "[g4,c5] g4@2 g4@3 ~@2, eb4",
  E: "~ bb4!2 bb4@2 bb4!2 c5, [eb4,g4]", F: "g4 g4@2 g4@2 ~@3, eb4", G: "~@2 bb4!6, [eb4,g4]",
  H: "[g4,c5]@2 g4 g4@2 ~@3, eb4", I: "g4!2 bb4!6, eb4", J: "a4!2 [e4,bb4]@2, [e4,b4]@2 ab4 ~",
  K: "~ d4 b4!2 b4@2 a4 g4", L: "g4!3 a4@3 ~@2", M: "[~ d4 b4!2 b4@2 g4 g4@2 g4@2 f4@3 ~@2]/2", N: "[a4 b4 g4@14]/4",
})).s("gm_electric_guitar_clean").gain(0.41)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@16 A B C D A B C D A B C E A B F G H I J@2 H I H K L M N O P Q R S H I J@2 H I H T@4 U@3 V ~@35
>`.pickRestart({
  A: "~@2 bb4!5 c5, [eb4,g4]", B: "[g4,c5] g4!2 g4@3 ~@2, eb4", C: "~ bb4!6 c5, [eb4,g4]", D: "g4@2 g4 g4@3 ~@2, eb4",
  E: "g4 g4@2 g4@3 ~@2, eb4", F: "~ bb4!7, [eb4,g4]", G: "a4!2 a4@2 [e4,bb4]@4, [e4,b4]@2 ab4 ~",
  H: "~ d4 b4!2 b4@2 a4 g4", I: "g4!3 a4@3 ~@2", J: "[~ d4 b4!2 b4@2 g4 g4@2 g4@2 f4@3 ~@2]/2", K: "a4 b4 g4@2",
  L: "~@2 bb4!2 bb4@2 bb4!2, [eb4,g4]", M: "[g4,c5] g4@2 g4@2 ~@3, eb4", N: "bb4!3 bb4@2 bb4@2 c5, [eb4,g4]",
  O: "g4!4 ~@4, eb4", P: "~ bb4!2 bb4@2 bb4@2 c5, [eb4,g4]", Q: "g4 g4@3 g4@2 ~@2, eb4",
  R: "bb4!2 bb4@2 bb4!2 bb4@2, [eb4,g4]", S: "a4!2 [e4,bb4]@2, [e4,b4]@2 ab4 ~", T: "[a4 b4 g4@14]/4",
  U: "[~@2 f5@2 eb5@2 g5@2 f5 g5 f5@4 f5@4 f5@4 g5@2 f5@2 ~@2 f5@2 eb5@6 eb5@2 f5@2 eb5@2 f5@2 ~ eb5 f5@2, ~@13 eb5@2 ~@7 f5 ~]/3",
  V: "eb5 db5 eb5 ~ db5@4",
})).s("gm_overdriven_guitar").gain(0.41)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@7 A B A B A B A B ~@44 A C A D ~@19 A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~ g4 c5 d5@2 c5 d5 c5", B: "~ bb4 eb5 f5@2 eb5@3", C: "~ bb4 eb5 f5 ~@4", D: "~ bb4 ~ f5@2 eb5@3",
})).s("gm_overdriven_guitar").gain(0.2)

// bass · electric bass finger
const bass = note(`<
  A@3 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 B C D E@8 A B A B A B C D E@8 A B A B A B A@2 B A B A B C D
  E@8 A B A B A B A B A B A B A ~@6
>`.pickRestart({
  A: "eb2!8", B: "c2!8", C: "bb1!8", D: "a1!8",
  E: "[g1 d2 f2 d2 f2@2 g2 g1@2 d2 f2 d2 f2 d2 c2 g1@2 d2 f2 d2 f2@2 g2 g1@2 d2 f2 d2 f2 d2 c2 g1@2 d2 f2 d2 f2@2 g2 g1@2 d2 f2 d2 f2 d2 c2 g1@2 d2 f2 d2 f2@2 g2 g1@2 d2 f2 d2 f2 e2 c2!2]/8",
})).s("gm_electric_bass_finger").gain(0.36)

// bass · electric bass finger · soft notes
const bass_soft = note("<~@92 [c2!8] [eb2!8] [c2!8] [eb2!8] [c2!8] [eb2!8]>").s("gm_electric_bass_finger").gain(0.15)

// drums · rim
const rim = s("rim").struct("<~@32 [~@2 x!2 ~@2 x!2]!8 ~@8 [~@2 x!2 ~@2 x!2]!8 ~@15 [~@2 x!2 ~@2 x!2]!8 ~@19>")
  .gain(0.36)

// drums · kick
const kick = s("bd").struct("<~@2 A@30 ~@8 A@8 ~@8 A@15 ~@8 A@13 ~@6>".pickRestart({
  A: "x!2",
})).gain(0.41)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@92 [x!2]!6>").gain(0.2)

stack(electric_guitar_clean, overdriven_guitar, overdriven_guitar_soft, bass, bass_soft, rim, kick, kick_soft)

More by The Police