Strudelify

Cry to Me

The Rolling Stones

KeyC majorTempo80 bpm
0:00/0:00
// Cry to Me — The Rolling Stones
// 80 bpm, 12/8, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 45 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/6)

// 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 · "Guitar"
const electric_guitar_clean = note(`<
  A B@2 C D E F G H B@2 I D J K G H L M N O P M P O Q R C D E F G H S T U V U W U W U W X ~
>`.pickRestart({
  A: "~@3 e4 c4 b3 c4@6",
  B: "[b3@12 [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]@8 [c3,g3,c4,e4] ~@3 d4@2 d4@12]/2", // C
  C: "~ e4 c4 ~", D: "~@5 c3 f3@2 e3@2 e3@2 c3@6 ~@6", E: "~@3 e3@2 d3 c3@3 ~@3", F: "g4@3 ~@3 g4@3 ~@3 g4@2 b3@6 ~@4",
  G: "[c3,g3,c4,e4]@6 [f3,a3,c4,f4]@6 [c3,g3,c4,e4]@6 [c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~", // C F C
  H: "~@11 d3, g2, ~ d3@9 g3@2, ~@2 g3@5 b3 g3 b3@3, ~@3 b3 d4 b3 d4@6", I: "~@4 c4 e4 g4@2 e4@2 d4@2 c4@6 ~@6",
  J: "~@4 c3 ~ e3@2 e3@2 d3@2 c3@6 ~@6", K: "g4@8 ~@2 g4 ~ g4@2 b3@6 ~@4",
  L: "b3@12 [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~", // C
  M: "[f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~ [f3,a3,c4,f4] ~", // F
  N: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~@3 [c3,e3,g3,c4] ~", // C
  O: "[g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~", // G
  P: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~@3 [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~", // C
  Q: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~@11", // C
  R: "~@6 [c3,g3,c4,e4] ~@3 d4@2 d4@12", S: "~ [c4,e4]@10 ~@13, [c3,g3]@11 ~@13",
  T: "g4@3 ~@3 g4@3 ~ g4 ~ g4 d4 b3@6 ~@4", U: "g3 c4 e4 ~ e4 ~ g3 c4 e4 ~ e4 ~ g3 c4 e4 ~ e4 ~ g3 c4 e4 ~ e4 ~",
  V: "g4@3 ~@3 b4@3 ~ g4 ~ g4 d4 b3@6 ~@4",
  W: "[d3,g3]!3 [c#3,f#3]!3 [c3,f3]!3 [b2,e3]!3 [a#2,d#3]!3 [a2,d3]!3 [g#2,c#3]!3 [g2,c3]!3", // G5 F#5 F5 E5 D#5 D5 C#5 C5
  X: "g3 c4 e4 ~ e4 ~ g3 c4 e4 ~ e4 ~ g3 c4 e4 ~ e4 ~@7",
})).s("gm_electric_guitar_clean").gain(0.28).pan(1)

// chords · electric guitar clean · "Rhythm Guitar"
const electric_guitar_clean_2 = note(`<
  A B@2 C D E F G F B@2 C D E F G F H D E F H D E F I B C D E F G F B F B F B J B J B K L ~
>`.pickRestart({
  A: "~@3 e3@2 ~@6 b3, ~@5 d3@7, ~ g3, ~@4 b3 d4, ~@3 g4",
  B: "~@11 g3, c3!2, ~@2 g3@3 g3@3 g3@3 ~, ~ e4@2 e4, ~@2 c4@3 c4",
  C: "~@8 g3 c4 a3 g3, c3@2 c3 ~, ~@2 g3@3 g3@3 ~@4, ~@3 e4@5 ~@4, ~ c4 ~",
  D: "~@11 a3, f3!2, ~@2 a3@3 a3@3 a3@3 ~, ~ f4@2 f4, ~@2 c4@3 c4",
  E: "~@6 e4 f4 ~@8 g3@2 c4@2 a3@2 g3@2, c3@2 c3 ~, ~@2 g3@3 g3@3 ~@4, ~ c4 ~",
  F: "~@11 b3, g3!2, ~@2 b3@3 b3@3 b3@3 ~, ~ g4@2 g4, ~@2 d4@3 d4",
  G: "~@2 c4 ~@2 a3 ~@5 g3, g3@3 f4@3 ~@2 g3@3 ~, ~@2 c4 c3@3, ~@3 e4, ~@5 c4",
  H: "~@8 g3 c3 d3 e3, c3@2 c3 ~, ~@2 g3@3 g3@3 ~@4, ~@3 e4@5 ~@4, ~ c4 ~",
  I: "~@10 g3@2 c3 ~@11, c3 ~, ~@2 g3@3 ~@7, ~@6 e4@7 ~@11, ~@8 c4@5 ~@11",
  J: "~@6 [g3,b3,d4,g4] ~@5 [g3,b3,d4,g4] ~@5 [g3,b3,d4,g4] ~@5", // G
  K: "g3 ~@5 [g3,b3,d4,g4] ~@5 [g3,b3,d4,g4] ~@5 [g3,b3,d4,g4] ~@5", // G
  L: "~@8 g3@3 ~, c3!2, ~@2 g3@3 g3@3 ~@4, ~ e4@2 ~, ~@2 c4@3 ~",
})).s("gm_electric_guitar_clean").gain(0.52).pan(0)

// chords · electric guitar clean · "Rhythm Guitar" · soft notes · G
const electric_guitar_clean_3 = note(`<
  ~@38
  [[g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~]
  ~
  [[g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~]
  ~
  [[b3,d4,g4] ~ [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~ [g3,b3,d4,g4] ~]
  ~@2
>`).s("gm_electric_guitar_clean").gain(0.33).pan(0)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@2 A B C D E F G H A B C D E F G H I J K J I J K L A B C D E F G H G H G H G H G H G M ~
>`.pickRestart({
  A: "c2@2 c2 c2@2 c2 c2@2 c2 c2@2 c2", B: "c2@2 c2 c2@2 c2 c2@2 c2!2 d2 e2", C: "f2@2 f2 f2@2 f2 f2@2 f2!2 e2 d2",
  D: "c2@2 c2 c2@2 c2 c2@2 c2!2 e2 f2", E: "g2@2 g2 g2@2 g2 g2@2 g2!2 e2 d2", F: "c2@2 e2 f2@2 d2 c2@2 c2!2 d2 f2",
  G: "g2@2 g2 g2@2 g2 g2@2 g2!2 f2 d2", H: "c2@2 c2 c2@2 c2 c2@2 c2!4", I: "f2!10 e2 d2", J: "c2!10 d2 e2",
  K: "g2!10 e2 d2", L: "c2@4 c2@2 c2@4 c2@2 c2 ~@11", M: "c2@2 c2 c2@2 c2 c2@2 c2 ~@3",
})).s("gm_electric_bass_pick").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  [~@6 x ~ x ~@2 x]
  [x ~ x ~@2 x!2 ~ x ~@2 x]!24
  [x ~ x ~@2 x!2 ~@5]
  [x ~ x ~@2 x!2 ~ x ~@2 x]!17
  [x ~ x ~@2 x!2 ~ x ~@3]
  ~
>`).gain(0.62)

// drums · snare
const snare = s("sd").struct("<[~@3 x] [~ x ~ x]!16 [~@3 x ~@5 x!3] [~ x ~ x]!7 [~ x ~@2] [~ x ~ x]!18 ~>").gain(0.7)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@11 x",
})).gain(0.62)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@5 x",
})).gain(0.62)

// drums · open hat
const open_hat = s("oh").struct("<[~@11 x]!17 ~ [~@11 x]!7 ~ [~@11 x]!17 ~@2>").gain(0.62)

// drums · crash
const crash = s("cr").struct("<~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@7 A ~@2 A ~ A ~ A ~ B@10 ~>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.62)

stack(
  electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3, bass, kick, snare, low_tom, hihat, mid_tom,
  open_hat, crash
)

More by The Rolling Stones