Strudelify
Escape (Pina Colada Song) cover art

Escape (Pina Colada Song)

Rupert Holmes

KeyC majorTempo139 bpm
0:00/0:00
// Escape (Pina Colada Song) — Rupert Holmes
// 139 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 162 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): #Chrs.Gtr, #Muted Gt.
setcpm(139/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.

// chords · piano · "#A.Piano"
const piano = note(`<
  ~@2 A B C D A B C E A F C G A F C G A F C G A F C H A B C D A B C D A B C D A B C E ~@8 A F C G A F C G A F C G A F C
  H A B C D A B C D A B C D A B C E ~@8 A F C G A F C G A F C G A F C H A B C D A B C D 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 E
>`.pickRestart({
  A: "[f1,f2,f3,a3,c4] ~@2 [a1,a2,f3,a3,c4,e4]@2 ~ [g1,g2,g3,b3,d4] ~", B: "[f1,f2,f3,a3,c4] ~@3 [g1,g2,a3,c4,d4,f4]@4",
  C: "[c1,c2,g3,c4,e4] ~@2 [e1,e2,b3,c4,e4,g4]@2 ~ [d1,d2,a3,d4,f4] ~", // C Cmaj7 Dm
  D: "[c1,c2,g3,c4,e4] ~@3 [e1,e2,a#3,d4,e4,g4]@4", E: "[c1,c2,g3,c4,e4] ~@7",
  F: "[f1,f2,f3,a3,c4] ~@3 [g1,g2,f3,a3,c4,d4]@4", G: "[c1,c2,g3,c4,e4] ~@3 [e1,e2,g3,a#3,d4,e4]@4",
  H: "[c1,c2,g3,c4,e4]@2 ~@6 e2 ~@7", // C
})).s("gm_piano").gain(0.35).pan(0.6)

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

// bass · electric bass finger · "#Fing.Bas" · soft notes
const bass_soft = note(`<
  ~@2 A B C D A B C ~ E B C D E B C D E B C D E B C D A B C D A B C ~ A B C D A B C ~ E B C D E B C ~ E B C D E B C D E
  B C D E B C D A B C D A B C ~ A B C D A B C ~ E B C D E B C ~ E B C D E B C D E B C D E B C D A B C D A B C ~ A B C D
  A B C ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~
>`.pickRestart({
  A: "~@2 f1 ~@13", B: "~@6 f1 ~@9", C: "~@2 c2 ~ c2 ~@11", D: "~@6 e1 ~@9", E: "~@2 f1 ~ f1 ~@11",
})).s("gm_electric_bass_finger").gain(0.2)

// chords · drawbar organ · "#60's Org"
const drawbar_organ = note(`<
  ~@105 A@2 B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2
  E
>`.pickRestart({
  A: "[~@8 [e5,g5]@8 [f5,a5]@2 ~@4 [f5,a5,c6]@5 ~ [d5,g5,b5]@3 ~, ~@4 c6@5 ~@7]/2", // Em F G
  B: "[[c5,f5,a5]@3 ~@5 [f5,a5]@8 [e5,g5]@2 ~@4 [e5,g5,b5,c6]@5 ~ [f5,a5,c6]@3 ~, ~@4 c6@5 ~@7]/2", // F Em Cmaj7 F
  C: "[e5,g5,c6]@3 ~@5 [e5,g5,a#5]@8", D: "[f5,a5,c6]@2 ~@4 [f5,a5,c6]@5 ~ [d5,g5,b5]@3 ~", E: "[e5,g5,c6]@3 ~@13",
})).s("gm_drawbar_organ").gain(0.08).pan(0.7)

// chords · electric guitar clean · "#Chrs.Gtr"
const electric_guitar_clean = note(`<
  ~@7 A ~@20 B ~@2 A ~@2 C D ~@3 A ~@28 B ~@2 A ~@2 C D ~@3 A ~@28 B ~@2 A ~@2 C D ~@3 A ~@4 B ~@2 A ~@2 C D ~@3 A ~@4 B
  ~@2 A ~@2 C D ~@3 A ~@4 B ~@2 A ~@2
>`.pickRestart({
  A: "~@4 a3 ~ [a3,c4,f4]@2 ~@8", B: "~@3 e5 ~@4", C: "~@5 a4 ~@2", D: "~@12 [a3,c4]@2 [g3,a3,a#3] f3",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.4)

// chords · electric guitar clean · "#Chrs.Gtr" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@7 A ~@23 A ~@3 B ~@3 A ~@31 A ~@3 B ~@3 A ~@31 A ~@3 B ~@3 A ~@7 A ~@3 B ~@3 A ~@7 A ~@3 B ~@3 A ~@7 A ~@2
>`.pickRestart({
  A: "~@4 c4 ~@11", B: "~@14 b3 ~",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.4)

// other · distortion guitar · "Dist.Gtr."
const distortion_guitar = note(`<
  ~@41 A B@2 C@2 D E F G ~@31 A B@2 C@2 D E F G ~@31 A B@2 C@2 D H I@2 B@2 C@2 D H J@2 B@2 C@2 D H I@2 B@2 C@2 D H J@2
  B@2 C@2 D H K@2
>`.pickRestart({
  A: "~@2 a4 d5", B: "[g5@23 ~ e5@6 a#4 [g#4,a4]]/2", C: "[g4@23 ~ a4@2 c5@2 a5@4]/2", D: "g5", E: "~ e5 e5@2",
  F: "c5@12 b4 [g#4,a4,a#4] [f4,f#4,g4] [c#4,d4,d#4,e4]", G: "c4 ~@7", H: "~@4 e5@3 ~ e5@4 e5@4",
  I: "[g5@21 ~@3 a5@4 e5@4]/2", J: "[g5@21 ~@3 a4@4 d5@4]/2", K: "[g5@21 ~@11]/2",
})).s("gm_distortion_guitar").gain(0.57)

// other · lead 3 calliope · "#P.PanLea"
const lead_3_calliope = note("<~@42 A@2 B@2 C@2 D ~@33 A@2 B@2 C@2 D ~@73>".pickRestart({
  A: "[g5@3 f5]/2", B: "[e5@21 ~@11]/2", C: "[~ g5@9 f5@6]/2", D: "e5",
})).s("gm_lead_3_calliope").gain(0.18)

// other · string ensemble 2 · "#W.String"
const string_ensemble_2 = note("<~@45 A@4 ~@36 A@4 ~@73>".pickRestart({
  A: "[~@15 g6@49]/4",
})).s("gm_string_ensemble_2").gain(0.36)

// chords · electric guitar muted · "#M.Dist.G"
const electric_guitar_muted = note(`<
  ~@2 A B C D A B C E F G F H F G F I F G F J F G F K A B C D A B C D A B C D A B C E F G F J F G F K F G F H F G F I F
  G F J F G F K A B C D A B C D A B C D A B C E F G F J F G F K F G F H F G F I F G F J F G F K 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
>`.pickRestart({
  A: "[a3,c4,f4] ~@3 f4 ~ [c4,f4,a4]@2 ~@2 f4 ~ [b3,d4,g4] ~@3", B: "[a3,c4,f4] ~@3 [a3,c4,f4]@4",
  C: "[c4,e4,g4] ~@3 g4 ~ [c4,g4,b4]@2 ~@2 f4 ~ [d4,f4,a4] ~@3", D: "[c4,e4,g4] ~@3 [d4,g4,a#4]@4", E: "[c4,e4,g4] ~@7",
  F: "~@2 c4 ~ c4 ~ c4 ~ c4@4 a3@2 g3 ~", G: "c4 ~@7", H: "c4 ~", I: "c3 ~", J: "[d4,g4] ~", K: "c3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.4)

// chords · electric guitar muted · "#M.Dist.G" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@2 A ~ B ~ A ~ B ~@17 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@25 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@25 A ~ B ~ A ~ B ~ A ~ B ~ A
  ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~
>`.pickRestart({
  A: "~@2 [a3,c4] ~ c4 ~@5 c4 ~@5", B: "~@2 [c4,e4] ~ e4 ~@5 c4 ~@5",
})).s("gm_electric_guitar_muted").gain(0.18).pan(0.4)

// chords · epiano2 · "#St.FM.EP"
const epiano2 = note("<~@42 A B C D A E F G ~@32 A B C D A E F G ~@72>".pickRestart({
  A: "[f3,c4,f4,a4]@5 ~ [a3,d4,g4,b4]@5 ~ [g3,f4,a4,c5]@3 ~", B: "[f3,c4,f4,a4]@7 ~ [g3,a3,c4,d4,f4]@8, g4 ~@15",
  C: "[c3,g3,c4,e4]@5 ~ [e3,a3,c4,f4]@5 ~ [d3,b3,c4,g4]@3 ~", D: "[c3,g3,c4,e4] ~ [e2,g3,a#3,d4,e4]@2",
  E: "[f3,c4,f4,a4]@7 ~ [g3,c4,d4,f4,a4]@8, g4 ~@15", F: "[c3,g3,c4,e4]@5 ~ [e3,a3,c4,f4]@5 ~ [d3,b3,c4,g4]@2 ~@2",
  G: "[c3,g3,c4,e4] ~@7", // C
})).s("gm_epiano2").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C B C B C D E B F B F B F B F B F B F B F C G B C B C B H D E B C B C B C D E B I B F B J D E C F B F B H B H K
  C K H B F C ~ B C B L B F D G B C B C B C D E B J B F B J D E B F B F B F B F B F B F B F C G B C B C B H D E B C B C
  B C D M B C B C B H D A B C B C B N D E B C B C B C D E B C B C B N D E B C B C B C D E
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "x ~@2 x ~@2 x ~", C: "x ~@2 x ~@4", D: "x ~@2 x ~@3 x", E: "~@7 x", F: "x!2 ~@2",
  G: "~ x ~ x ~ x ~ x", H: "x ~ x ~@2 x ~@2", I: "x ~@6 x", J: "x ~ x ~@4 x", K: "x ~@2 x ~ x ~@2", L: "x ~ x!2 ~@4",
  M: "~ x", N: "x ~@2 x ~ x ~ x",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@3 A ~ A ~ A ~@19 A ~ A ~@5 A ~ A ~@29 A ~@7 A ~ A ~@29 A ~ A ~@5 A ~ A ~@5 A ~@7 A ~ A ~@5 A ~ A ~@5 A ~ A ~@5 A ~ A
  ~@4
>`.pickRestart({
  A: "~ x ~@2",
})).gain(0.16)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@3 A B C ~ D B ~@2 A B A ~ D B@2 ~ A B A ~ D B ~@2 A B E ~ A B ~@2 E B A B ~ B ~@2 B@4 D B ~@2 A B A D B@4 A B A ~
  B@2 ~@2 A B ~@2 A B ~@2 E B ~ B ~ B ~@2 B@4 D B ~@2 A B A B D B@2 ~ B@2 A ~ D B ~@2 A B E B A B ~@2 E B A B ~ B ~@2 A
  B E B A B ~@2 E B E B@3 ~@2 E B A B ~ B ~@2 E B E B@3 ~@2 E B A B ~ B ~
>`.pickRestart({
  A: "~@2 x ~@11 x!2", B: "~ x ~@6", C: "~@2 x ~@9 x!4", D: "~ x ~@5 x", E: "~@14 x!2",
})).gain(0.16)

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~@15 A ~@7 B ~@7 C ~@3 D ~@3 B ~@7 D A ~@14 C ~@15 D ~@7 D ~@7 A ~@7 B ~@7 C ~@3 D ~@11 B ~@3 D ~@3 C ~@3 D ~@3 C
  ~@3 D ~@3 C ~@3 D ~@3 C
>`.pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~@5 x!2 ~", D: "~ x",
})).gain(0.4)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  A B ~@6 C D ~@14 C E ~@7 F ~@5 B C G ~@6 A D ~@14 C F ~@7 E ~@5 B C D ~@6 A D ~@14 C E ~@7 F ~@5 B C ~@7 C E ~@7 F ~@5
  B ~ F ~@7 F ~@5 B ~ F
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@6", C: "~@5 x!2 ~", D: "~@5 x ~@2", E: "~@2 x!2", F: "~ x!4 ~@3", G: "~@4 x!2 ~@2",
})).gain(0.48)

// … 16 more lines

More by Rupert Holmes