Strudelify

Loves Me Like a Rock

Paul Simon

KeyG majorTempo144 bpm
0:00/0:00
// Loves Me Like a Rock — Simon Paul
// 144 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 · acoustic bass · "G.MIDI Acoustic Bs"
const bass = note(`<
  ~@2 A B C D E B C B F G C E C B H G E I A J H B K L C B M D E B C B H G C E N B F G N I A J F B O L C B C D P B C B H
  G C E C B H G E I A J H B K L C B M D E B N B F G C E C B H G E I A J H B K L C B M D E D
>`.pickRestart({
  A: "g2 ~ d2 g2", B: "g2 ~ d2 ~", C: "g2 ~ d2 e2", D: "g2 ~@3", E: "g2 ~ d2 f#2", F: "c2 ~ g2 b2", G: "c2 ~ g2 ~",
  H: "c2 ~ g2 e2", I: "d2 ~ a2 ~", J: "e2 ~ e2 d2", K: "c2 ~ g2 d2", L: "f2 ~ c2 ~", M: "g2 ~ d2 b2", N: "g2 ~ d2 b1",
  O: "c2 ~ g2!2", P: "g2 ~ d2 a2",
})).s("gm_acoustic_bass").gain(0.45)

// chords · piano · "G.MIDI Acou Grand Piano"
const piano = note(`<
  ~@30 A@4 B@2 A@4 C D E F G H I E J K A@2 L@2 A@4 M@2 A@2 N@2 B@2 E O G P I Q I R A@2 L@2 ~@24 L@2
>`.pickRestart({
  A: "[[b3,d4]@2 ~@2 [g3,b3]@2 ~@2 [g3,b3,d4] ~@3 [c4,e4]@2 ~@2 [b3,d4] ~@3 b3@2 ~ g3 [b3,d4] ~@3 [c4,e4]@3 g3, g3 ~@3 d4 ~@6 g3@3 ~ g3@2 ~@2 g3@2 ~@6 g3@2 ~@3, ~@20 d4 ~@11]/2", // Bm G C Bm C
  B: "[[c4,e4,g4] ~@3 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 [e4,g4] ~@2 [c4,e4,g4] ~@2 c4@2 [e4,g4] ~@3, ~@3 c4@2 ~@2 c4@2 ~@2 c4@2 ~@2 c4@2 ~@2 c4@2 ~@11, ~@4 g4 ~@3 g4 ~@3 g4 ~@3 g4 ~@15]/2", // C Em C Em
  C: "[c4,e4,g4] ~@3 e4@2 ~ [c4,e4]@2 ~@3 [e4,g4] ~@3, ~@3 c4@2 ~@6 c4@2 ~@3, ~@4 g4 ~@2 g4 ~@8", // C Em
  D: "[c4,e4,g4] ~@3 e4@2 ~ [c4,g4] ~@4 [e4,g4] ~@3, ~@3 c4@2 ~@6 c4@2 ~@3, ~@4 g4 ~@2 e4@2 ~@7", // C C5 Em
  E: "[d4,g4,b4] ~@3 g4@2 ~@2 g4@2 ~@2 g4@2 ~ d4, ~@3 d4@2 ~@2 d4@2 ~@2 d4@2 ~@3, ~@4 b4 ~@3 b4 ~@3 b4 ~@3", // G
  F: "~@4 f#4@2 ~ [f#4,a4]@3 ~@2 f#4@2 ~ [f#4,a4], ~@3 d4@6 ~@2 d4@5, ~@4 a4 ~@7 a4 ~@3", // F#m
  G: "[d4,g4,b4] ~@3 g4@2 ~ [d4,g4]@2 ~@3 [g4,b4] ~@3, ~@3 d4@2 ~@6 d4@2 ~@3, ~@4 b4 ~@2 b4 ~@8", // G G5 G
  H: "[b3,e4,g4] ~@3 e4@2 ~ b3 [b3,e4,g4] ~@2 b3 [d4,f#4,a4] ~@2 d4, ~@3 b3@2 ~@11, ~@4 g4 ~@11", // Em D
  I: "~@4 e4@2 ~ [e4,g4]@3 ~@2 e4@2 ~ [e4,g4], ~@3 c4@6 ~@2 c4@5, ~@4 g4 ~@7 g4 ~@3", // Em
  J: "[c4,e4,g4] ~@3 e4@2 ~@2 e4@2 ~@2 e4@2 ~ c4, ~@3 c4@2 ~@2 c4@2 ~@2 c4@2 ~@3, ~@4 g4 ~@3 g4 ~@3 g4 ~@3", // C
  K: "[c4,f4,a4] ~@3 f4@2 ~ [c4,f4,a4] ~@4 e4@2 ~ [e4,g4], ~@3 c4@2 ~@6 c4@5, ~@4 a4 ~@7 g4 ~@3", // F Em
  L: "[[d4,g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4,d5]@3 ~@13, ~@3 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@4 ~@13]/2", // G
  M: "[~@4 e4@2 ~ [e4,g4]@3 ~@2 e4@2 ~ [e4,g4]@3 ~@2 g4 ~@2 e4@3 ~@2 [e4,g4]@3 ~, ~@3 c4@6 ~@2 c4@6 ~@2 c4@2 c4@4 ~@2 c4@4 ~, ~@4 g4 ~@7 g4 ~@7 e4@2 g4@3 ~@7]/2", // Em
  N: "[[d4,g4,b4] ~@3 g4@2 ~@2 g4@2 ~@2 g4@2 ~@2 g4@2 ~@2 [g4,b4] ~@2 [d4,g4,b4] ~@2 d4@2 [g4,b4] ~@3, ~@3 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@11, ~@4 b4 ~@3 b4 ~@3 b4 ~@3 b4 ~@15]/2", // G
  O: "[d4,f#4,a4] ~@3 f#4@2 ~@2 f#4@2 ~@2 f#4@2 ~ d4, ~@3 d4@2 ~@2 d4@2 ~@2 d4@2 ~@3, ~@4 a4 ~@3 a4 ~@3 a4 ~@3", // D
  P: "~@4 e4@2 ~ [e4,g4] [b3,e4,g4] ~@2 b3 [d4,f#4,a4] ~@2 d4, ~@3 b3@5 ~@8, ~@4 g4 ~@11", // Em D
  Q: "~@4 g4@2 ~ [g4,b4]@3 ~@2 g4@2 ~ [g4,b4], ~@3 d4@6 ~@2 d4@5, ~@4 b4 ~@7 b4 ~@3", // G
  R: "[c4,f4,a4] ~@3 f4@2 ~ [c4,f4,a4] [c4,e4,g4] ~@3 e4@2 ~ c4, ~@3 c4@2 ~@6 c4@2 ~@3, ~@4 a4 ~@7 g4 ~@3", // F C
})).s("gm_piano").gain(0.24)

// chords · acoustic guitar steel · "G.MIDI Steel Str.Gt"
const acoustic_guitar_steel = note(`<
  ~@2 A@2 B C A@4 D@2 A@4 D@2 B E B F D B D G A@2 B C A@4 D@2 A@4 D@2 B E B F D B D G A@2 B C A@4 D@2 A@4 D@2 B E B F D
  B D G A@2 B C A@2 B@2 D@2 A@2 B@2 D@2 B E B F D B D G A@2 B C B C
>`.pickRestart({
  A: "~@4 [d3,b3,d4,g4]@3 [d3,b3,d4,g4] ~@4 [c3,c4,e4,g4]@3 [d3,b3,d4,g4], [g2,g3]!2", // G C G
  B: "~@4 [d3,b3,d4,g4]@3 [d3,b3,d4,g4] ~@4 [d3,b3,d4,g4]@3 [d3,b3,d4,g4], [g2,g3]!2", C: "[g2,d3,g3,b3,d4,g4] ~@3",
  D: "~@4 [g3,e4,g4,c5]@3 [g3,e4,g4,c5] ~@4 [g3,e4,g4,c5]@3 [g3,e4,g4,c5], [c3,c4]!2", // C
  E: "~@4 [a3,f#4,a4,d5]@3 [a3,f#4,a4,d5] ~@4 [a3,f#4,a4,d5]@3 [a3,f#4,a4,d5], [d3,d4]!2", // D
  F: "~@4 [b3,g4,b4,e5]@3 [b3,g4,b4,e5] [e3,e4]@4 [d3,a3,d4,f#4,a4,d5]@3 [a3,f#4,a4,d5], [e3,e4] ~", // Em E D E
  G: "~@4 [c4,a4,c5,f5]@3 [c4,a4,c5,f5] ~@4 [g3,e4,g4,c5]@3 [g3,e4,g4,c5], [f3,f4] [c3,c4]", // F C F C
})).s("gm_acoustic_guitar_steel").gain(0.24)

// bass · baritone sax · "G.MIDI Baritone Sax"
const bass_2 = note(`<
  ~@30 A B A B C@2 A B A B D E A F G H D A D I J@2 A ~ A B A B D E A B A B D E A K A H D A D I J@2 A ~@25 L@2
>`.pickRestart({
  A: "g2@3 ~@13", B: "~@15 d2", C: "c2/2", D: "c2@3 ~@13", E: "~@15 g2", F: "d2@3 ~@12 a2", G: "g2",
  H: "e2@3 ~@5 e2@3 ~ d2@3 ~", I: "f2@3 ~@5 c2@3 ~@5", J: "g2/2", K: "d2@3 ~@13", L: "[g2@5 ~@3]/2",
})).s("gm_baritone_sax").gain(0.24)

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

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@102>").gain(0.42)

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

// drums · clap
const clap = s("cp").struct("<~@30 [~ x ~ x]!23 x [~ x ~ x]!23 x ~@24 [~ x ~ x] x>").gain(0.36)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@30 [~@7 x ~@8]!23 ~ [~@7 x ~@8]!23 ~@25 [~@7 x ~@8] ~>").gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@52 [~@15 x] ~@51>").gain(0.54)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@3 B A@5 C A D A@2 E A@3 F A@7 F B A@8 C E A@2 F A@4 F A@2 D G F B A@2 C H F@2 A@4 D F A@11 B A F A@4 D A@2 F A@3
  G A@2 G A@2 F A@3 B A B
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x", C: "x ~@2 x!2 ~@2 x!2 ~@3 x ~@2 x", D: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x",
  E: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", F: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3", G: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@2 x",
  H: "x ~@3 x ~@3 x ~@2 x!2 ~@2 x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A ~@7 A ~@15 A ~@7 A ~@15 A ~@23 A ~@7 A ~@10>".pickRestart({
  A: "~@15 x",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~@5 B ~ C ~@2 D ~@3 A ~@7 A@2 ~@8 B D ~@2 A ~@4 A ~@2 C E A ~@3 B F A@2 ~@4 C A ~@13 A ~@4 C ~@2 A ~@3 E ~@2 E
  ~@2 A ~@3 A ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@11 x ~@4", C: "~@3 x ~@12", D: "~@7 x ~@7 x", E: "~@7 x ~@8", F: "~@3 x ~@3 x ~@8",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@13 A ~@14 B ~@23 A ~@8 A ~@7 B ~@6 B ~@23 B ~@3>".pickRestart({
  A: "~@11 x ~@4", B: "~@15 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@53 x ~@23 x ~@25 x>").gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@5 A ~@23 A B@23 ~ B@23 ~@24 A B ~>".pickRestart({
  A: "x", B: "x!4",
})).gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<~@30 [x!4]!23 x [x!4]!23 x ~@24 [x!4] x>").gain(0.36)

stack(
  bass, piano, acoustic_guitar_steel, bass_2, kick, rim, snare, clap, clap_soft, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash, ride, tambourine
)

More by Paul Simon