Strudelify

It's Only Love

Bryan Adams

KeyF majorTempo100 bpm
0:00/0:00
// It's Only Love — Bryan Adams
// 100 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 acoustic guitar steel (copy of ch 1 "Its Only Love" overdriven guitar)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar · "Its Only Love"
const overdriven_guitar = note(`<
  ~ A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D E F@2 D E F G@2 A B C@2 A B C@2 A
  B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2
>`.pickRestart({
  A: "[d3,a3,d4,e4]@2 ~ [c3,g3,d4,g4]@4 ~", B: "[a2,e3,a3,d4,e4]@4 ~@2 [bb2,f3,bb3,d4]@4 c3 d3 f3@2 d3 c3",
  C: "[f2,c3,f3,a3,c4,f4]@3 [f2,c3,f3,a3,c4,f4] ~ [f2,c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 ~@6", // F
  D: "[c3,g3,c4]@3 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4]@2", E: "[d3,a3,d4]@3 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@2",
  F: "[c4,f4] [d4,f4]!2 [d4,f4,bb4] ~ [d4,f4] [c4,f4] [d4,f4]!2 [d4,f4,bb4]@2 ~@5", // F5 Dm Bb Dm F5 Dm Bb
  G: "[[d4,f4]@3 [d4,f4,bb4]@2 [d4,f4,bb4]@3 [d4,f4,bb4]@12 ~@12]/2", // Dm Bb
})).s("gm_overdriven_guitar").gain(0.48).pan(0)

// bass · electric bass finger
const bass = note(`<
  ~@4 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D F G H I J K L I M ~@4 A B C D E B C D E B
  C D E B C D E B C D E B C D E B C D@2
>`.pickRestart({
  A: "~@7 c2", B: "d2@3 c2@5", C: "a1@6 bb1@4 c2 d2 f2@2 d2 c2", D: "f1@3 f1!3 e1@2 f1@2 ~@6",
  E: "f1@3 f1!3 e1@2 f1@2 ~ f1 a1@2 c2@2", F: "f1@3 f1!3 e1@2 f1@2 f1@2 a1@2 c2@2", G: "c2@3 c2!5", H: "d2@3 d2!5",
  I: "bb1!8", J: "g1!7 bb1", K: "c2!8", L: "d2!8", M: "c2@3 c2@2 c2@3 c2@8",
})).s("gm_electric_bass_finger").gain(0.57).pan(0.4)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@5 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D E F G D E F H ~@5 A B C@2 A B C@2 A B
  C@2 A B C@2 A B C@2 A B C@2 A B C@2
>`.pickRestart({
  A: "[a4,d5,f5]@2 ~ [g4,c5,e5]@4 ~", B: "[a4,c5,e5]@2 ~ [bb4,d5,f5]@2 ~@3",
  C: "[a4,c5,f5]@3 ~@3 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@6", D: "[c5,e5,g5]", E: "[a4,d5,f5]", F: "[bb4,d5,f5]",
  G: "[bb4,d5,f5,g5]@3 [bb4,d5]", H: "[g4,bb4,d5,f5]",
})).s("gm_drawbar_organ").gain(0.64).pan(0.6)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@40 [~@10 x ~ x!3 ~] ~@40 [x ~@2 x ~ x!2 ~ x ~@7]>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@4 [~@3 x] ~@48 [~@3 x] ~@28>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@40 [~ x] ~@41>").gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ B C ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ D
  E
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x ~ x ~@2 x ~@7", D: "x ~@6 x", E: "x ~@2 x!2 ~@3",
})).gain(0.48)

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

// drums · tambourine
const tambourine = s("tb").struct("<[x!4]!4 [x!3 ~] ~@44 [x!4]!4 [x!3 ~] ~@28>").gain(0.48)

stack(overdriven_guitar, bass, drawbar_organ, kick, snare, low_tom, hihat, mid_tom, crash, ride, tambourine)

More by Bryan Adams