Strudelify

Escape (The Pina Colada Song)

Rupert Holmes

KeyC majorTempo142 bpm
0:00/0:00
// Escape (The Pina Colada Song) — Rupert Holmes
// 142 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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.

// bass · electric bass pick · "base"
const bass = note(`<
  ~ A B C D A B C E 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 B C D A B C E 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 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 D A
  B C D A B C D A B C E
>`.pickRestart({
  A: "f1 ~@2 a1@3 g1@2", B: "f1 ~@3 g1@4", C: "c2 ~@2 e2@3 d2@2", D: "c2 ~@3 e1@4", E: "c2 ~@7",
})).s("gm_electric_bass_pick").gain(0.72)

// chords · piano · "main rythym"
const piano = note(`<
  ~ A B C D A B C E 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 B C D A B C E 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 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 D A
  B C D A B C D A B C E
>`.pickRestart({
  A: "[f3,a3,c4] ~@2 [f3,c4,e4]@3 [f3,b3,d4]@2", B: "[f3,a3,c4] ~@3 [f3,a3,d4]@4",
  C: "[c3,e3,g3] ~@2 [c3,g3,b3]@3 [c3,f3,a3]@2", D: "[c3,e3,g3] ~@3 [g3,a#3,d4]@4", E: "[c3,e3,g3] ~@7",
})).s("gm_piano").gain(0.72)

// other · string ensemble 2 · "strings"
const string_ensemble_2 = note(`<
  ~ A B C D A B C E A B C E A B C E A B C E A B C F A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B
  C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E A
  B C E A B C E A B C E
>`.pickRestart({
  A: "f3@3 a3@3 g3@2", B: "f3 g3", C: "c4@3 e4@3 d4@2", D: "c4 e3", E: "c4 ~@3", F: "e3 ~@3 e3@4",
})).s("gm_string_ensemble_2").gain(0.72)

// other · synth brass 1 · "guitar"
const synth_brass_1 = note("<~@40 A B@2 C@2 D@2 E ~@32 A B@2 C@2 D@2 E ~@41>".pickRestart({
  A: "~@4 [g3,g4] [a3,a4] [c4,c5] [d4,d5]", B: "[[g4,g5]@6 [f4,f5] [e4,e5]]/2",
  C: "[[g3,g4]@12 [g3,g4] [c4,c5] [g4,g5] a5]/2", D: "[[g4,g5]@9 ~ [f4,f5] [e4,e5] [f4,f5]@2 [e4,e5]@2]/2",
  E: "[c4,c5]", // C
})).s("gm_synth_brass_1").gain(0.56)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@24 A ~@3 A ~@3 A ~@3 A ~@7 A ~@23 A ~@15 A ~@18 A ~@2 A ~@3 A ~@3 A ~@7 A ~@4 A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@23 B ~@3 B ~@3 B ~@3 B ~@7 B ~@23 B ~@15 B ~@18 B ~@2 B ~@3 B ~@3 B ~@7 B ~@4 B ~
>`.pickRestart({
  A: "~@8 x ~ x!3 ~@3", B: "~@4 x!3 ~",
})).gain(0.72)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  A ~@23 A ~@3 A ~@3 A ~@3 A ~@7 A ~@23 A ~@15 A ~@18 A ~@2 A ~@3 A ~@3 A ~@7 A ~@4 A ~
>`.pickRestart({
  A: "~ x!3 ~@4",
})).gain(0.72)

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

stack(bass, piano, string_ensemble_2, synth_brass_1, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash)

More by Rupert Holmes