Strudelify
Caribbean Queen cover art

1984 · Suddenly

Caribbean Queen

Billy Ocean

KeyC majorTempo111 bpm
0:00/0:00
// Caribbean Queen — Ocean Billy
// 111 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(111/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 · "ACOU BASS"
const bass = note(`<
  ~ A B C D E@20 F G H I J K E@18 H G H G H G E@2 F G H I J K E@2 F G H I J K E@18 F G H I J K E@2 F G H I J K E@2 A B C
  D A B C D L
>`.pickRestart({
  A: "d3@2 ~@4 a2 ~ c3@2 d3 ~ d3@2 c3@2", B: "d3@2 ~@4 a2 c3 d3 ~ d3@2 c3@2 d3@2", C: "a2 ~ a2 ~ a2@2 a#2@2 ~@6 f2 a2",
  D: "a#2 ~ a#2 ~ a#2@2 c3@2 ~@8", E: "d3@2 c3@2 a2@2 a#2@2 c3 ~ c3@2 a2@2 c3@2",
  F: "d3 ~ d3@2 c3@2 a2@2 d3 ~ d3@2 a2@2 d3@2", G: "c3 ~ c3@2 a2@2 g2@2 c3 ~ c3@2 g2@2 c3@2",
  H: "a#2 ~ a#2@2 g2@2 f2@2 a#2 ~ a#2@2 f2@2 a#2@2", I: "a2 ~ a2@2 g2@2 f2@2 a2 ~ a2@2 c3@2 d3@2",
  J: "g2 ~ g2@2 e2@2 d2@2 g2 ~ g2@2 a2@4", K: "a#2 ~ a#2@2 f2@2 a#2@2 c3 ~ c3@2 a2@2 c3@2", L: "d3 ~@7",
})).s("gm_acoustic_bass").gain(0.44)

// bass · slap bass 1 · "SLAPBASS 1"
const bass_2 = note("<~@3 [~@10 a#2 ~@5] ~@103 [~@10 a#2 ~@5] ~@3 [~@10 a#2 ~@5] ~@2>").s("gm_slap_bass_1").gain(0.74)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<~ A@2 ~@102 A@2 ~@2 A@2 ~@3>".pickRestart({
  A: "[[a3,d4,f4,a4]@5 ~ [g3,c4,e4,g4]@26]/2", // Dm C
})).s("gm_epiano1").gain(0.48)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@2 A B C D@20 E F G H I J D@18 G K G L G L D@2 E F G H I J D@2 E F G H I J D@18 E F G H I J D@2 E F G H I J D@2 ~ A B
  C ~ A B C ~
>`.pickRestart({
  A: "~@6 [c4,e4] [d4,f4] [e4,g4] ~ [d4,f4] ~ [c4,e4]@2 [d4,f4] ~", // C Dm Em Dm C Dm
  B: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [a3,d4,f4] ~@9", // C Dm
  C: "[a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [c4,e4,g4] ~@9", D: "[f3,a3,c4] ~@5 [e3,g3,c4] ~@9",
  E: "[a3,d4,f4,a4] ~@5 [a3,d4,f4,a4] ~@9", F: "[g3,c4,e4,g4] ~@5 [e4,g4]@2 ~@8, ~@6 [g3,c4] ~@9",
  G: "[f3,a#3,d4,f4] ~@5 [f3,a#3,d4,f4] ~@9", H: "[f3,a3,c4,f4] ~@5 [f3,a3,c4,f4] ~@9",
  I: "[g3,a#3,d4,f4] ~@5 [g3,a#3,d4,f4] ~@5 [e3,a3,e4] ~@3, ~@6 c4 ~", J: "[f3,a#3,d4,f4] ~@5 [g3,c4,e4,g4] ~@9",
  K: "[e3,g3,e4] ~@5 [e3,g3,c4,e4] ~@9, c4 ~@7", L: "[e3,g3,c4,e4] ~@5 [e3,g3,c4,e4] ~@9",
})).s("gm_epiano2").gain(0.4)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~@3 A B C@20 D E F G H I C@18 F J F K F K C@2 D E F G H I C@2 D E F G H I C@18 D E F G H I C@2 D E F G H I C@2 ~@2 A B
  ~@2 A B ~
>`.pickRestart({
  A: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [a3,d4,f4] ~@9", // C Dm
  B: "[a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [c4,e4,g4] ~@9", C: "[d4,f4,a4] ~@5 [c4,e4,g4] ~@9",
  D: "[a3,d4,f4,a4] ~@5 [a3,d4,f4,a4] ~@9", E: "[g3,c4,e4,g4] ~@5 [e4,g4]@2 ~@8, ~@6 [g3,c4] ~@9",
  F: "[f3,a#3,d4,f4] ~@5 [f3,a#3,d4,f4] ~@9", G: "[f3,a3,c4,f4] ~@5 [f3,a3,c4,f4] ~@9",
  H: "[g3,a#3,d4,f4] ~@5 [g3,a#3,d4,f4] ~@5 [e3,a3,e4] ~@3, ~@6 c4 ~", I: "[f3,a#3,d4,f4] ~@5 [g3,c4,e4,g4] ~@9",
  J: "[e3,g3,e4] ~@5 [e3,g3,c4,e4] ~@9, c4 ~@7", K: "[e3,g3,c4,e4] ~@5 [e3,g3,c4,e4] ~@9",
})).s("gm_pizzicato_strings").gain(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~ A B ~ C ~@20 D E F ~ G@2 ~ H ~@16 I J K L M N O ~ D E F ~ G@2 ~ H D E F ~ G@2 ~ H ~@9 P ~ Q ~@4 D E F ~ G@2 ~ H D E
  F ~ G@2 ~ H A B ~ C A B ~ R A
>`.pickRestart({
  A: "[d5,d6] ~@7", // D
  B: "[d5,d6] [c5,c6] [a4,a5] [g4,g5] [c5,c6] [a4,a5] [g4,g5] [f4,f5] ~@2 [a4,a5] ~ [g4,g5] [f4,f5] [d4,d5] ~", // D C A G C A G F …
  C: "~@10 [g4,g5] [a4,a5] [g4,g5] [f4,f5] [d4,d5] ~", D: "~@4 [a4,d5,a5,d6] ~ [f4,a4,f5,a5] ~@9",
  E: "~@8 [g4,c5,g5,c6]@2 [a4,d5,a5,d6] ~@5", F: "~@2 [f4,a4,f5,a5] ~ [a4,d5,a5,d6] ~ [d4,f4,d5,f5] ~@9",
  G: "[[a#3,d4,a#4,d5]@2 [c4,e4,c5,e5] [d4,f4,d5,f5]@3 [e4,g4,e5,g5] [f4,a4,f5,a5]@4 [e4,g4,e5,g5]@3 ~@2]/2", // A# C Dm Em F Em
  H: "~@12 [g5,g6] [f5,f6] [d5,d6] ~", I: "[a#3,d4,f4]", J: "[c4,e4,g4]@15 ~", K: "[a#3,d4,f4,a#4]@15 ~",
  L: "[c4,e4,g4,c5]@15 ~", M: "[a#3,d4,f4,d5]", N: "[c4,e4,g4,e5]@15 ~", O: "[d4,f4,a4,d5] ~",
  P: "~@10 [f4,a4,f5,a5] ~ [a4,c5,a5,c6]@2 ~@2", Q: "~@10 [a4,d5,a5,d6]!2 [f4,a4,f5,a5]@2 ~@2",
  R: "[d5,d6] [c5,c6] [a4,a5] [g4,g5] [c5,c6] [a4,a5] [g4,g5] [f4,f5] [a4,a5] [g4,g5] [f4,f5] [d4,d5] [g4,g5] [f4,f5] [d4,d5] [c4,c5]", // D C A G C A G F …
})).s("gm_string_ensemble_2").gain(0.33)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@5 A@2 B@2 ~@23 C@2 ~@10 D@2 ~@9 E F ~@57>".pickRestart({
  A: "[~@14 g4@13 e4 f4 ~ f4@2]/2", B: "[d4@14 ~ g5@7 f5@2 d5@8]/2", C: "[~@6 g3 a3 c4 ~ c4 ~ c4 ~ d4@5 ~@13]/2",
  D: "[~@6 g4@4 g4@2 f4 g4 f4@12 ~@6]/2", E: "d#5@3 ~@3 d5@9 ~", F: "d#5@3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.64)

// chords · glockenspiel · "GLOCKENSPL"
const glockenspiel = note("<~@48 A B C@4 ~@60>".pickRestart({
  A: "~@3 f5 e5 f5 c5 a4", B: "a#4@15 ~", C: "[~ a#4, ~@7 [d5,f5]@9, ~@15 c5@17]/2",
})).s("gm_glockenspiel").gain(0.16)

// other · piccolo
const piccolo = note("<~@48 A B A C A C D@2 ~@58>".pickRestart({
  A: "~@5 f4 e4 c4", B: "a#3 ~", C: "d4", D: "[~@5 f4 e4 d4@5 ~@4]/2",
})).s("gm_piccolo").gain(0.36)

// other · alto sax
const alto_sax = note("<~@73 A@2 B@2 C@3 D E F E G@2 H I J ~@2 K@3 L@2 ~@16 M N>".pickRestart({
  A: "[f5@3 ~ g5@3 ~ e5@2 c5@3 ~ c5@9 ~@3 a4!2 c5@2 d5@2, ~@8 d#5 ~@23]/2",
  B: "[f5@3 ~ g5@3 ~ e5@2 c5@2 c5@2 d5@10 ~@6 a4!2, ~@8 d#5 ~@23]/2",
  C: "[c5@2 a4!2 a4@2 a4!2 g4@2 a4 ~ f4@9 ~ f4@2 a4 g4 f4@2 d4@2 e4@4 c4@4 d4@2 a3@6 g3@2, ~@30 d#4 ~@7 c#4 ~@9]/3",
  D: "a3 c4 ~ c4 c4@5 ~@5 a4!2", E: "g4@2 a4!2 a4@2 a4!2 g4@2 a4!3 ~ a4!2", F: "a4 c5 ~ c5 c5@2 ~@8 a4!2",
  G: "[a4 [d5,f5] ~ [d5,f5] [d5,f5]@2 [c5,e5]@2 ~@5 g5@9 ~@2 f5@2 ~@2 d5@4]/2", H: "c5 d5 ~ a4@5 g4 a4 ~ f4@3 d4@2",
  I: "~@2 d5 c5 d5 c5 a4 g4 c5 a4 g4 f4 a4 g4 f4 d4", J: "g4 f4 d4 c4 f4 d4 c4@2 d5@7 ~, ~@8 c#5 ~@7",
  K: "[~@5 f4 g4 a4@3 g4@2 f4 e4@2 d4@4 ~@5]/3", L: "[~@2 e4@2 f4@2 g4@4 f4@2 [e4,f4] e4 d4@6 ~@12]/2",
  M: "d6 c6 a5 g5 c6 a5 g5 f5 a5 g5 f5 d5 g5 f5 d5 c5", N: "d6 ~@7",
})).s("gm_alto_sax").gain(0.5)

// drums · kick
const kick = s("bd").struct("<A B C D@2 C@100 B C D@2 B C D@2 E>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "x ~@3 x ~@2 x", C: "x!2", D: "x ~@7 x ~@2 x ~@4", E: "x",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<[~ x!3 ~@4 x!4 ~@4] [~ x ~ x]!112 x>").gain(0.64)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!112 x>").gain(0.56)

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

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!112 ~>").gain(0.48)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@11 A ~@7 A ~@5 A ~ A ~@7 A ~@7 A ~@5 A ~ A ~@7 A ~@23 A ~@7 A ~@7 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · shaker
const shaker = s("sh").struct("<~@35 [~@3 x!5]!2 ~@77>").gain(0.48)

stack(
  bass, bass_2, epiano1, epiano2, pizzicato_strings, string_ensemble_2, electric_guitar_muted, glockenspiel, piccolo,
  alto_sax, kick, snare, clap, low_tom, hihat, mid_tom, crash, shaker
)

More by Billy Ocean