Strudelify

1984

Somebody's Watching Me

Rockwell

KeyC♯ minorTempo122 bpm
0:00/0:00
// Somebody's Watching Me — Rockwell
// 122 bpm, 4/4, key C# minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "syn bass" synth bass 1 (copy of ch 2 "bass" fretless bass)
// note: Full arrangement: all 98 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 · fretless bass · "bass"
const bass = note(`<
  ~@3 A ~ B C ~ D E D F D F D F D F G H I F G J K F D F D F D F D L G F I M G F K N G F I F G F K N D F D F D F O L D F
  D F D F D P Q ~@8 A ~ R C ~ D E D F D F D F D L D F D F S L D T
>`.pickRestart({
  A: "~@4 c#2@2 b1 a1", B: "~@4 g#1 ~ a1 ~ b1@4 a1 ~ g#1 ~", C: "~@5 c#2 b1 a1",
  D: "c#2@2 c#3 ~@3 c#2@2 c#3@4 b2@2 a2@2", E: "a1@2 a2 ~@3 a1@2 b2@4 g#2@2 b2@2",
  F: "a1@2 a2 ~@3 a1@2 b2@4 a2@2 g#2@2", G: "c#2@2 c#3 ~@3 c#2@2 c#3@4 b2@4", H: "a1@2 a2 ~@3 a1@2 a2@4 g#2@4",
  I: "c#2@2 c#3 ~@3 c#2@2 c#3@4 e3@4", J: "a1@2 a2 ~@3 a1 ~ a2@4 g#2@4", K: "c#2@2 c#3 ~@3 c#2@2 c#3@3 ~ e3@4",
  L: "a1@2 a2 ~ a2 ~ a2@2 b2@4 a2@2 g#2@2", M: "a1@2 a2 ~@3 a1@2 b2@3 ~ a2@2 g#2@2",
  N: "a1@2 a2 ~@3 a1@2 b2@4 a2@2 g#2 ~", O: "c#2 ~ c#3 ~@3 c#2@2 c#3@4 b2@2 a2@2",
  P: "a1 ~ a2 ~@3 a1 ~ b2@4 a2@2 g#2@2", Q: "c#2@2 c#3 ~@13", R: "~@4 g#1@2 a1 ~ b1@4 a1@2 g#1 ~",
  S: "g#1@2 g#2@2 a1@2 a2@2 b1@2 b2@2 c#2@2 c#3 ~", T: "a1@2 a2 ~ a2 ~ a2@2 b2@4 a2@2 ~@2",
})).s("gm_fretless_bass").gain(0.6)

// other · drawbar organ · "dwb organ"
const drawbar_organ = note(`<
  ~@15 A B ~@6 A B ~@4 C D C E F ~ G B H I G J ~@2 G J H K G J ~@9 L M N@2 O@3 P ~@32
>`.pickRestart({
  A: "~@10 c#5 e5 g#5 ~ e5@2", B: "c#5 ~@7", C: "~@2 a5 ~@13", D: "~@2 g#5 ~@13", E: "~@2 b5 ~@13", F: "~ g#5 ~@6",
  G: "~@10 c#5 e5 g#5 ~ e5 ~", H: "~@6 f#5 e5", I: "g#5 ~@5 g#5 a5", J: "c#5 ~@15", K: "g#5@2 ~@10 g#5@2 a5 ~",
  L: "~@2 b5@2 a5@2 g#5@6 f#5 ~ e5 ~, ~@2 a#5 ~@13", M: "f#5@3 g#5 ~@4 g#5 f#5 ~ f#5 f#5@2 e5 ~",
  N: "[~@2 e5@2 f#5@2 g#5@2 a5@2 b5@2 a5@2 g#5@10 f#5@3 ~@5]/2",
  O: "[~@3 [b5,c#6] b5 a5 g#5@2 f#5@2 e5@2 f#5@2 e5@4 d#5@2 c#5@2 d#5@2 e5@4 d#5@2 c#5@12 b4 c#5 d#5@2 c#5@2]/3", // Bsus2
  P: "b4 a4@3 g#4@2 f#4@2",
})).s("gm_drawbar_organ").gain(0.6).pan(0.2)

// other · lead 3 calliope · "calliope"
const lead_3_calliope = note(`<
  ~@26 A B@2 C D E@2 C ~@16 A B@2 C D E@2 C ~@24 A B@2 C D E@2 C A B@2 C D E@2 F
>`.pickRestart({
  A: "~@2 c#5@2 e5@3 ~ f#5@4 c#5@4", B: "[~@2 c#5@2 e5@4 b5@4 a5@2 g#5@11 ~@7]/2", C: "~@4 b4 c#5 e5 c#5",
  D: "~ c#5 e5@2 f#5@2 c#5@2", E: "[~ c#5 e5@2 b5@2 a5 g#5@5 ~@4]/2", F: "~@4 b4 c#5 e5 ~",
})).s("gm_lead_3_calliope").gain(0.55)

// other · kalimba
const kalimba = note(`<
  ~@18 A B C D E F G H ~@2 I J ~@2 I J A B C D E F G K A B C D E F G H ~@2 I J ~@2 I L ~@40
>`.pickRestart({
  A: "~@2 g#5@2 f#5@2 e5 ~ f#5 ~ e5 g#5@5", B: "~@2 c#5 ~ c#5 ~ b4 ~ c#5 ~ b4 e5@4 ~",
  C: "~@2 g#5 ~ f#5 ~ e5 ~ f#5 ~ e5 g#5@4 ~", D: "~@2 c#5 ~ c#5 ~ b4 ~ c#5 ~ b4 e5@3 c#5 ~",
  E: "~@2 g#5 ~ f#5 ~ e5 ~ f#5 ~ e5 f#5@3 c#5 ~", F: "~@2 c#5 ~ c#5 ~ b4 ~ c#5 ~ b4 c#5@3 e5 ~",
  G: "g#5 ~ g#5 ~ f#5 ~ e5 ~ f#5 ~ e5 f#5@4 ~", H: "~@2 c#5 ~ c#5 ~ c#5 ~ b4@4 a4@2 g#4 ~", I: "~@5 g#5 f#5 e5",
  J: "f#5@2 c#5 ~ c#5@3 ~@9", K: "~@2 c#5 ~ c#5 ~ c#5 ~ b4@4 b4@2 c#5 ~", L: "f#5@2 c#5 ~ c#5@2 ~@10",
})).s("gm_kalimba").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A B A B A C A B A B A B A C A B A B A B A D A B A B A B A C A B A B A B A D A B A B A B A D A B A B A B A C A
  B A B A B A D A B A B A B A D A B A B A B A D A B A B A B A C A B A B A B A D
>`.pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x", D: "x ~@4 x ~@2",
})).gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!23 [~ x ~@2] [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!47 [~ x ~@2] [~ x ~ x]!8>")
  .gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 D A B@2 C A B@2 C A B@2 C A B@2 D A B@2 C A B@2 D A B@2 C A B@2 C A
  B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 E A B@2 C A B@2 D
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!6 ~ x", D: "x!6 ~@2", E: "x!4 ~@4",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@6 A B ~@2 A B ~@2 A B ~@3 B ~@2 A B ~@3 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 ~@6 A B ~@2 A
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@2 x ~@23 x ~@63 x ~@7>").gain(0.8)

stack(bass, drawbar_organ, lead_3_calliope, kalimba, kick, snare, clap, hihat, open_hat, crash)

More by Rockwell