Strudelify
Spirits In The Material World cover art

1982 · Ghost In the Machine

Spirits In The Material World

The Police

KeyA minorTempo140 bpm
0:00/0:00
// Spirits In The Material World — The Police
// 140 bpm, 4/4, key A minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A C D E F E F E F G A B A B A B A B A B A B A B A C D E F E F E F H@2
  I@2 J K L M L M L M L M L M L M L M L M L M L M L M N D E F E F E F E F E F E F E F E F E F O ~
>`.pickRestart({
  A: "~@2 [b4,c5,e5] ~@3 [e4,a4,c5,e5] ~@3 [e4,a4,c5,e5] ~@3 [d4,g4,c5,d5] ~, ~ e4 ~@6", // Cmaj7 Am Csus2
  B: "~@2 [d4,g4,b4,d5] ~@3 [b3,e4,a4,b4] ~@3 [b3,e4,g4,b4] ~@3 [b3,e4,g4,b4] ~", // G Esus4 Em
  C: "~@2 [d4,b4,d5] ~@3 [b3,e4,a4,b4] ~@3 [b3,e4,g4,b4] ~@5, ~ g4 ~@6", // G Esus4 Em
  D: "[d4,f4,a4]@2 ~@4 [c4,e4,g4] ~ [d4,f4,a4]@2 ~@4 [c4,e4,g4] ~", // Dm C Dm C
  E: "[d4,f4,a4] ~ [e4,g4,b4] ~ [f4,a4,c5] ~ [b4,d5] ~@3 [e4,g4] ~@3 [d4,f4,a4]@2, ~@3 g4 ~ c4 ~@2", // Dm Em F Bm Em Dm
  F: "~@6 [c4,e4,g4] ~ [d4,f4,a4]@2 ~@4 [c4,e4,g4] ~", // C Dm C
  G: "[d4,f4,a4] ~ [e4,g4,b4] ~ [f4,a4,c5] ~ [b4,d5] ~@3 [c4,e4] ~@5, ~@3 g4 ~ g4 ~@2", // Dm Em F Bm C
  H: "[[d4,f4,a4] ~ [e4,g4,b4] ~ [f4,a4,c5] ~ [b4,d5] ~@3 [c4,e4] ~@3 d4@16 b4@2, ~@3 g4 ~ g4 ~@10]/2", I: "c5@7 b4",
  J: "a4@3 g4 f4@2 e4 f4", K: "e4 [e4,b4,c5,e5] ~ [e4,a4,c5,e5] ~ [e4,a4,c5,e5] ~ [d4,g4,c5,d5]",
  L: "~ [d4,g4,b4,d5] ~ [b3,e4,a4,b4] ~ [b3,e4,g4,b4] ~ [b3,b4], ~@14 [e4,g4] ~", // G Esus4 Em B Em
  M: "~ [e4,b4,c5,e5] ~ [e4,a4,c5,e5] ~ [e4,a4,c5,e5] ~ [d4,g4,c5,d5]", // Cmaj7 Am Csus2
  N: "~ [d4,g4,b4,d5] ~ [b3,e4,a4,b4] ~ [b3,e4,g4,b4] ~@2", // G Esus4 Em
  O: "[d4,f4,a4] ~ [e4,g4,b4] ~ [f4,a4,c5] ~ [b4,d5] ~@3 [g4,b4,d5]@2 ~@2 [a4,c5,e5]@2, ~@3 g4 ~@4", // Dm Em F Bm G Am
})).s("gm_synth_brass_1").gain(0.33).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A B A B A B A B A B A B C B A B A B A B C D E F G F G F G H I J A B A B C B A B A B A B C D E F G F G F G K@2
  L@2 M N O A B A B A B A B A B A B C B A B A B A B C D E F G F G F G F G F G P Q R Q R Q R Q S ~
>`.pickRestart({
  A: "~@6 a1@2 c2 ~@2 c2!3 a1@2", B: "g1@2 ~ g1 g1@2 a1@2 e1@4 g1@3 ~", C: "~@6 a1@2 c2 ~ c2!4 a1@2",
  D: "g1@2 ~ g1 g1@2 a1@2 e1@3 ~ g1@2 c2@2", E: "d2@3 ~@3 c2@2 d2@2 ~@4 c2@2", F: "d2@2 e2@2 f2@2 g2@2 ~@2 c2@3 ~ d2@2",
  G: "~@6 c2@2 d2@3 ~@3 c2@2", H: "d2 e2 f2 g2 ~ c2 ~@2", I: "~@6 a1@2 c2@3 c2@3 a1@2", J: "g1@3 g1@3 a1@2 e1@4 g1@3 ~",
  K: "[d2@2 e2@2 f2@2 g2@2 ~@2 c2@2 ~@2 d2@15 ~ d2@2]/2", L: "[f2@7 g2@7 ~ g2]/2", M: "f2@3 e2 d2@2 c2 b1",
  N: "a1@4 a1 ~ a1@2 c2@4 a1@4", O: "g1@3 ~ g1@2 a1@2 e1@4 g1@3 ~", P: "d2@2 e2@2 f2@2 g2@2 ~@2 c1@3 ~ d1@2",
  Q: "~@3 c1 d1 ~@2 c1", R: "d1@2 e1@2 f1@2 g1@2 ~@2 c1@3 ~ d1@2", S: "d1@2 e1@2 f1@2 g1@2 ~@2 g1@3 ~ a1@2",
})).s("gm_acoustic_bass").gain(0.44)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A C D E F E F E F G A B A B A B A B A B A B A B A C D E F E F E F H@2 I
  J K L M N M N O A B N P N M N B N B N B N B N B N Q D E F E F E F E F E F E F E F E F E F R ~
>`.pickRestart({
  A: "~@2 [b3,c4] ~@3 [a3,c4] ~@3 [a3,c4] ~@3 [g3,c4] ~", B: "~@2 [g3,b3] ~@3 [e3,a3] ~@3 [e3,g3] ~@3 [e3,g3] ~",
  C: "~@2 [g3,b3] ~@3 [e3,a3] ~@3 [e3,g3] ~@5", D: "[d3,f3] ~@5 [c3,e3] ~ [d3,f3] ~@5 [c3,e3] ~",
  E: "[d3,f3] ~ [e3,g3] ~ [f3,a3] ~ [g3,b3] ~@3 [c3,e3] ~@3 [d3,f3] ~", F: "~@6 [c3,e3] ~ [d3,f3] ~@5 [c3,e3] ~",
  G: "[d3,f3] ~ [e3,g3] ~ [f3,a3] ~ [g3,b3] ~@3 [c3,e3] ~@5", // Dm Em F G C
  H: "[[d3,f3] ~ [e3,g3] ~ [f3,a3] ~ [g3,b3] ~@3 [c3,e3] ~@3 f3@16 g3@2]/2", I: "a3@13 ~ b3@2", J: "c4@13 ~ b3@2",
  K: "a3@5 ~ b3@2 a3@3 ~ b3@2 c4@2", L: "b3 ~ [b3,c4]@2 ~@2 [a3,c4]@2 ~@2 [a3,c4]@2 ~@2 [g3,c4]@2",
  M: "~@2 [g3,b3]@2 ~@2 [e3,a3]@2 ~@2 [e3,g3]@2 ~@2 [e3,g3] ~", N: "~ [b3,c4] ~ [a3,c4] ~ [a3,c4] ~ [g3,c4]",
  O: "~@2 [g3,b3]@2 ~@2 [e3,a3]@2 ~@2 [e3,g3] ~@3 [e3,g3]@2", // G A5 Em
  P: "~@2 [g3,b3]@2 ~@2 [e3,a3] ~@3 [e3,g3]@2 ~@2 [e3,g3] ~", Q: "~ [g3,b3] ~ [e3,a3] ~ [e3,g3] ~@2",
  R: "[d3,f3] ~ [e3,g3] ~ [f3,g3,a3] ~ [g3,b3] ~@3 [d3,g3] ~@3 [e3,a3]@2", // Dm Em F G G5 A5
})).s("gm_electric_guitar_clean").gain(0.33).pan(0.8)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@9 A B@2 ~ C@2 D ~ E F ~@2 G@3 H@2 I J I J I J I K L ~@2 M N O ~ K P ~@2 Q R S H@2 I J I J I J T@5 ~@8 K U ~@3 V@2 ~
  W@3 ~ X@3 H@2 I J I J I J I J I J I J I J I ~@5
>`.pickRestart({
  A: "~@6 [a3,c4,e4]@2 [a3,c4,e4]@2 [b3,d4,f#4]@3 [a3,c4,e4]@2 ~", // Am Bm Am
  B: "[[c4,e4,g4]@2 [b3,d4,f#4]@3 ~ [a3,c4,e4]@3 [g3,b3,d4]@3 [a3,c4,e4]@3 [e3,a3,c4]@3 ~@14]/2", // C Bm Am G Am
  C: "[~@5 [a3,c4,a4] [b3,d4,b4] [c4,e4,c5]@2 [b3,d4,b4]@2 [a3,c4,a4]@2 [g3,b3,g4]@2 [a3,c4,a4]]/2", // Am Bm C Bm Am G Am
  D: "~ [e3,a3,c4,e4]@3 ~@12", E: "~@10 [a3,c4,e4]@2 ~ [b3,d4,f#4]@3",
  F: "[c4,e4,g4]@3 [b3,d4,f#4]@2 [a3,c4,e4,a4]@3 [g3,b3,d4,g4]@2 ~ [a3,c4,e4,a4]@2 [e3,a3,c4,e4]@2 ~", // C Bm Am G Am
  G: "[~@6 [c4,e4,a4]@2 [c4,e4,a4]@2 [d4,f#4,b4]@4 [e4,g4,c5]@4 [d4,f#4,b4]@4 [c4,e4,a4]@3 [g3,b3,d4,g4]@3 [a3,c4,e4,a4]@2 ~ [a3,c4,e4,a4]@2 ~@15]/3", // Am Bm C Bm Am G Am
  H: "[~@14 [d3,f4,a4]@4 [d3,f4,a4]@3 ~ [d3,f4,a4]@2 [d3,f4,a4]@3 ~@5]/2", // Dm
  I: "[d3,f4,a4] [e3,g4,b4] [f3,a4,c5] [g3,b4,d5]@2 [e3,g4,b4]@2 [d3,f4,a4]", // Dm Em F G Em Dm
  J: "~@2 [d3,f4,a4]@3 ~ [d3,f4,a4]@2 [d3,f4,a4]@3 ~@5", K: "~@7 [a3,c4,e4]",
  L: "[c4,e4,g4]@2 [b3,d4,f#4]@4 [a2,a3,c4,e4]@2 [b2,g3,b3,d4]@4 [c3,a3,c4,e4]@3 ~", M: "~@7 [b3,d4,g4,b4]",
  N: "[c4,e4,a4,c5]@2 [b3,d4,g4,b4]@3 ~ [a3,c4,e4,a4]@3 [g3,b3,d4,g4]@3 [a3,c4,e4,a4]@4", O: "~ [e3,a3,c4,e4]@5 ~@10",
  P: "[c4,e4,g4]@3 [b3,d4,f#4]@3 [a2,a3,c4,e4]@3 [g2,g3,b3,d4]@4 [a2,c4,e4,a4]@2 ~", // C Bm Am G Am
  Q: "~@5 [a3,c4,e4,a4]!2 [b3,d4,f#4,b4]", // Am Bm
  R: "[c4,e4,g4,c5]@2 [b3,d4,f#4,b4]@4 [a3,c4,e4,a4]@3 [g3,b3,d4,g4]@3 [a3,c4,e4,a4]@4", S: "[c3,e3,a3,e4] ~@3",
  T: "[[d3,f4,a4] [e3,g4,b4] [f3,a4,c5] [g3,b4,d5]@2 [e3,g4,b4]@2 d3 ~@7 b4 ~@7 d5 e5@14 ~@2, ~@7 [f4,a4]@31 ~@2, ~@8 c5@11 ~]/5", // Dm Em F G Em F
  U: "[c4,e4,g4] [b3,d4,f#4]@2 [a3,c4,e4] [g3,b3,d4]@2 [a3,c4,e4]@2", // C Bm Am G Am
  V: "[[d4,g4,b4]@2 [e4,a4,c5]@2 [d4,g4,b4]@4 [c4,e4,a4]@4 [b3,d4,g4]@2 [c4,e4,a4]@5 ~@13]/2", // G Am G Am G Am
  W: "[~@10 [e3,a3,c4]@2 [g3,b3,d4]@2 [a3,c4,e4]@4 [g3,b3,d4]@4 [a2,a3,c4,e4]@2 [g2,g3,b3,d4]@4 [a2,c4,e4,a4]@9 ~@11]/3", // Am G Am G Am G Am
  X: "[~@10 [e3,a3,c4]@2 [g3,b3,d4]@2 [a3,c4,e4]@4 [g3,b3,d4]@4 [a3,c4,e4]@4 [b3,d4,g4]@4 [c4,e4,a4]@7 ~@11]/3", // Am G Am G Am G Am
})).s("gm_epiano2").gain(0.19)

// other · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@57 A B@2 C D E F E G E F E F E G E F E G E F E G E F E G H ~@21>".pickRestart({
  A: "b4 ~@3 b4 ~@3 b4 ~@3 b4 ~@3", B: "b4 ~@3 b4 ~@3 b4 ~@3 b4 ~ b4 ~", C: "a4@2 ~@2 a4 ~ g4 ~ f4@3 ~ b4 ~ c5 ~",
  D: "b4 ~@3 b4@2 ~@2 b4@2 ~@2 b4 ~ c5 ~", E: "b4 ~ a4 ~ g4@2 ~@2 g4@2 ~@2 b4 ~ c5 ~",
  F: "b4@2 ~@2 b4 ~ c5 ~ b4@2 ~@2 b4 ~ c5 ~", G: "b4@2 ~@2 b4 ~@3 b4@2 ~@2 b4 ~ c5 ~", H: "b4 ~ a4 ~ g4@2 ~@2 g4@3 ~@5",
})).s("gm_epiano1").gain(0.38).pan(0.2)

// chords · epiano2 · "E.PIANO 2"
const epiano2_2 = note("<~@56 A@2 B C D E ~@44>".pickRestart({
  A: "[~@7 [f3,a3,d4]@8 [b3,e4,g4,b4]]/2", B: "[c4,f4,a4,c5]@7 [g4,b4,d5,e5]", C: "[f4,a4,c5,e5,f5]@7 [d4,g4,b4]",
  D: "[c4,f4,a4]@3 [g3,b3,e4] [f3,a3,d4]@2 [e4,g4] [d4,f4]", E: "[c4,e4]@3 ~",
})).s("gm_epiano2").gain(0.33).pan(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@56 A@5 ~@45>".pickRestart({
  A: "[~@7 [d3,f3,a3]@33]/5", // Dm
})).s("gm_synth_strings_1").gain(0.33).pan(0.6)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A B C B C B A B A B C B C B D B E B C B C B D F G H I H I H I J K L A B C B D B E B C B C B D F G H I H I H I J ~@4
  M N C B C B A B A B C B C B D B E B C B C B D F G H I H I H I H I H I O P Q P Q P Q P R ~
>`.pickRestart({
  A: "~@6 a2@2 c3 ~@2 c3!3 a2@2", B: "g2@2 ~ g2 g2@2 a2@2 e2@4 g2@3 ~", C: "~@6 a2@2 c3@2 ~ c3 ~ c3 a2@2",
  D: "~@6 a2@2 c3 ~ c3!4 a2@2", E: "~@6 a2@2 c3@2 c3!2 ~ c3 a2@2", F: "g2@2 ~ g2 g2@2 a2@2 e2@3 ~ g2@2 c3@2",
  G: "d3@3 ~@3 c3@2 d3@2 ~@4 c3@2", H: "d3@2 e3@2 f3@2 g3@2 ~@2 c3@3 ~ d3@2", I: "~@6 c3@2 d3@3 ~@3 c3@2",
  J: "d3 e3 f3 g3 ~ c3 ~@2", K: "~@6 a2@2 c3@2 ~ c3@3 a2@2", L: "g2@2 ~ g2@3 a2@2 e2@4 g2@3 ~",
  M: "a2@4 a2 ~ a2@2 c3@4 a2@4", N: "g2@3 ~ g2@2 a2@2 e2@4 g2@3 ~", O: "d3@2 e3@2 f3@2 g3@2 ~@2 c2@3 ~ d2@2",
  P: "~@3 c2 d2 ~@2 c2", Q: "d2@2 e2@2 f2@2 g2@2 ~@2 c2@3 ~ d2@2", R: "d2@2 e2@2 f2@2 g2@2 ~@2 g2@3 ~ a2@2",
})).s("gm_electric_guitar_muted").gain(0.22).pan(0.6)

// drums · kick
const kick = s("bd").struct("<A B@23 C D@7 E B@15 C D@8 F@3 G B@23 C D@11 E D@7 H ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "x ~@2 x!2 ~@2 x", E: "x ~@2 x!2 ~@3", F: "x ~@3 x ~@2 x",
  G: "x ~@3 x!2 ~@2", H: "x ~@2 x!3 ~ x",
})).gain(0.55)

// drums · snare
const snare = s("sd").struct("<A ~@23 B C@7 D ~@15 B C@12 ~@23 B C@11 E C@7 F ~>".pickRestart({
  A: "~@6 x!3 ~ x!3 ~@3", B: "~@3 x", C: "~ x ~ x", D: "~@4 x ~@7 x!3 ~", E: "~@4 x ~@5 x ~ x!3 ~",
  F: "~@2 x ~@2 x ~ x",
})).gain(0.55)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C D E F G B H B I J K L F M N O P H Q R Q S T@2 F B F B U V W B I J K L F M N O P H Q R Q S T@2 F B F B U V X Y
  Z B AA AB I AC K AD H AE W B I J K L F M N O P H Q R Q S T@2 F B T@2 F B T@2 F B ~@7 AF ~
>`.pickRestart({
  A: "x ~ x ~ x!4", B: "x!7 ~", C: "x!2 ~ x!5", D: "~ x ~ x ~ x!3", E: "~@2 x!6", F: "x!8", G: "~ x!5 ~ x",
  H: "x!4 ~ x ~ x", I: "x!2 ~ x ~ x ~ x", J: "~ x ~ x!4 ~", K: "x!6 ~ x", L: "~ x ~ x!2 ~ x ~", M: "~ x ~ x!5",
  N: "~@2 x!4 ~ x", O: "~ x!2 ~@3 x ~@3 x ~ x ~@3", P: "x ~ x!4 ~ x", Q: "~@2 x!2 ~ x ~ x", R: "~ x ~ x ~ x!2 ~",
  S: "~ x!2 ~@3 x ~ x ~ x ~@5", T: "x ~ x!5 ~", U: "~ x!7", V: "x!6 ~@2", W: "~ x!3 ~ x ~ x", X: "x ~ x ~ x ~ x!2",
  Y: "x!3 ~ x ~ x!2", Z: "x ~ x ~ x!3 ~", AA: "~ x ~ x ~ x ~ x", AB: "~ x ~ x ~ x ~@2",
  AC: "~@2 x ~ x ~@2 x!2 ~@3 x ~@2 x", AD: "~ x!3 ~ x ~@2", AE: "~@2 x ~ x ~@2 x!2 ~ x ~ x ~ x!2", AF: "~@7 x",
})).gain(0.38)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A ~ B C ~@2 D ~ E ~ F G H I J K D C H E L C E G M N ~@4 O ~ E ~ F G H I J K D C H E L C E G M N ~@4 O ~ P Q R ~ S T
  F U H V E O E ~ F G H I J K D C H E L C E G M N ~@2 M N ~@2 M N ~@11
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~ x ~@2", C: "x!3 ~", D: "x ~@2 x", E: "~@2 x!2", F: "~ x!3", G: "x!2 ~@2", H: "~@3 x",
  I: "x ~ x ~@2 x ~@2", J: "~@9 x ~@6", K: "x ~@3 x!2 ~@10", L: "~ x ~@2 x ~ x ~", M: "~ x ~@5 x", N: "~ x ~@6", O: "x",
  P: "~ x ~ x ~ x ~@2", Q: "~@3 x ~ x ~@2", R: "~ x ~ x ~@3 x", S: "x!4", T: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  U: "x ~@10 x ~@4", V: "x ~@7 x ~@3 x ~@2 x",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@3 x] ~@31 [~@5 x ~@2] ~@73>").gain(0.55)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~@2 B ~@2 A ~ A ~ A ~ A ~@2 C A C ~ D A C E ~ A ~ A ~ A ~ F ~ A ~ A ~ A ~@2 C A C ~ D A C E ~ A ~ A ~ A ~ F ~@3
  A ~ A ~ G ~ A ~ H ~ A ~ A ~ A ~@2 C A C ~ D A C E ~ A ~ A ~ A ~ A ~ A ~ A ~@7 I ~
>`.pickRestart({
  A: "~@7 x", B: "x!2 ~@6", C: "~ x ~@6", D: "x", E: "~@6 x!2", F: "~@3 x", G: "~@3 x ~ x ~ x", H: "~@6 x ~@4 x ~@4",
  I: "~@5 x ~@2",
})).gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@97 A B C D E D@2 F ~>".pickRestart({
  A: "x ~ x!3 ~ x ~", B: "x ~ x!5 ~", C: "x ~ x ~ x!3 ~", D: "x!8", E: "x!5 ~ x!2", F: "x!5 ~@3",
})).gain(0.33)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@97 [~ x ~@3 x ~ x] [~ x ~@5 x] [~ x ~ x ~@3 x] ~ [~@5 x ~@2] ~@4>").gain(0.22)

// drums · splash
const splash = s("cr").struct("<~@38 [~@7 x] ~@3 [~@7 x] ~@63>").gain(0.44)

// drums · triangle
const triangle = s("triangles:30").struct("<~@35 x ~@10 [~ x ~@2] ~@59>").gain(4.76)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@69 x ~@36>").gain(4.76)

stack(
  synth_brass_1, bass, electric_guitar_clean, epiano2, epiano1, epiano2_2, synth_strings_1, electric_guitar_muted, kick,
  snare, hihat, hihat_soft, mid_tom, open_hat, ride, ride_soft, splash, triangle, triangle_2
)

More by The Police