Strudelify
Caribbean Blue cover art

1991 · Shepherd Moons

Caribbean Blue

Enya

KeyA minorTempo169 bpm
0:00/0:00
// Caribbean Blue — Enya
// 169 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "CLAVINET" clavinet (copy of ch 2 "SLAPBASS 2" slap bass 2)
// note: Full arrangement: all 164 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(169/3)

// 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 · slap bass 2 · "SLAPBASS 2"
const bass = note(`<
  A B C D A C B E A B C D A F G H I J K H J I L H I J K H M N@2 O P Q@2 O P R@2 O S T@2 O U V@2 W@2 H I J K H J I L H X
  J K H M Y H I J K H J I L H I J K H J Y Z AA AB AC H AD AE AF AG AH AF AC H AD AE AF AH@2 AF AI AG AE AF AJ AG AF AE
  AK AG AE AF AJ AG AF AE AK AG AE AF AJ AG AF AE AK AG AE AF AJ AG AF AE AK AG AE AF AJ AG AF AE AK AL AE AF AJ AG AF
  AE AK AG AE AF AJ AG AF AE AK AG AE AF AJ AG AM AN@3
>`.pickRestart({
  A: "~@5 [e3,a3]@5 ~ [e3,a3]@5, a2", B: "~@5 [e3,g#3]@5 ~ [e3,g#3]@5, c#3", C: "~@5 [f#3,b3]@5 ~ [f#3,b3]@5, b2",
  D: "~@5 [c#3,a3]@5 ~ [c#3,a3]@5, f#2", E: "~@5 [d#3,g#3]@5 ~ [d#3,g#3]@5, g#2",
  F: "~@5 [d#3,f#3]@5 ~ [d#3,f#3]@5, b2", G: "[e2,e3,g#3,b3]", H: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3",
  I: "c#3@3 e3@2 g#3@3 e3@3 g#3@2 e3@3", J: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3", K: "f#2@3 c#3@2 a3@3 c#3@3 a3@2 c#3@3",
  L: "g#2@3 g#3@2 b2@3 g#3@3 c#3@2 g#3@3", M: "b2@3 f#3@2 b3@3 f#3@3 b2@5",
  N: "[e4@3 e3@2 g#3@3 b3@3 e4@2 e3@3 g#3@3 b3@2 e4@3 g#4@3 b4@2 e5@3, e2]/2",
  O: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, d#4", P: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, c#4",
  Q: "[e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3 e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3, b3]/2",
  R: "[a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3 a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3, c#4]/2",
  S: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, e4@11 d#4@5",
  T: "[e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3 e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3, e4@21 f#4@5 ~ e4@5]/2",
  U: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, e4",
  V: "[a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3 a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3, c#4@21 d#4@5 ~ e4@5]/2",
  W: "[b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3 b2@3 f#3@2 b3@3 ~@8, d#4@3 ~]/2", X: "c#3@3 e3@2 g#3@3 e3@3 g#3@2 [e3,g#3]@3",
  Y: "e2@3 b2@2 e3@3 b2@3 e3@2 b2@3", Z: "e2@3 b2@2 e3@3 g#3@3 b3@2 e4@3", AA: "f3@3 a3@2 c4@3 a3@3 c4@2 a3@3",
  AB: "c3@3 e3@2 g3@3 e3@3 g3@2 e3@3", AC: "e3@3 g3@2 b3@3 g3@3 b3@2 g3@3", AD: "g2@3 d3@2 b3@3 d3@3 b3@2 d3@3",
  AE: "d3@3 f3@2 a3@3 f3@3 a3@2 f3@3", AF: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3", AG: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 f3@3",
  AH: "b2@3 g3@2 b3@3 g3@3 b3@2 g3@3", AI: "c3@3 g3@2 c4@3 ~@8", AJ: "g2@3 d3@2 a#3@3 d3@3 a#3@2 d3@3",
  AK: "a2@3 a3@2 c3@3 a3@3 d3@2 a3@3", AL: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 [f3,a#3]@3", AM: "c3@3 g3@3 c4@3 g3@3 c4@4",
  AN: "[g3@4 f2@31 ~@13]/3",
})).s("gm_slap_bass_2").gain(0.06)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I B J D E K L M N O P Q R S T U N O V Q W X@2 Y Z AA@2 Y Z AB@2 Y AC AD@2 Y AE AF@2 AG@2 AH N O P Q R
  AI@2 M AJ O P Q AK AL AM S AN AO AP AQ AR AS AT S AU AO AP AV AW@2 AX AY AZ BA BB BC BD BE BF BG BH BI BB BC BJ BK BF
  BL@2 BM BN BO BP BQ BR BS BT BU BN BO BP BQ BV BW@2 BX BS BY BZ CA CB CC CD BX BS BY BZ CE CF CG@2 BX BS BY BZ CA CH
  CC CD CI BS BY BZ CE CF CJ@2 BX BS BY BZ CK CB CC CD BX BS BY BZ CE CL@4
>`.pickRestart({
  A: "~@5 [e3,a3]@5 ~ [e3,a3]@5, a2, ~ c#4@5 ~@2", B: "~@5 [e3,g#3]@5 ~ [e3,g#3]@5, [c#3,c#4]",
  C: "~@5 [f#3,b3]@5 ~ [f#3,b3,d#4]@5, b2, e4@11 ~@5", D: "~@5 [c#3,a3]@5 ~ [c#3,a3]@5, [f#2,f#4]",
  E: "e4@2 d#4@3 c#4@3 ~@3 [e3,a3]@5, a2, ~@5 [e3,a3]@5 ~@6, ~ b3", // A5
  F: "~@5 [f#3,b3]@5 ~ d#4@2 e4@3, b2, ~ c#4@10 [f#3,b3]@5", G: "~@5 [e3,g#3]@5 ~ [e3,g#3,e4]@5, c#3, d#4@11 ~@5",
  H: "~@5 [d#3,g#3]@5 ~ [d#3,g#3]@5, g#2, d#4@3 ~", I: "~@5 [e3,a3]@5 ~ [e3,a3]@5, a2, c#4@13 ~@3",
  J: "~@5 [f#3,b3]@5 ~ [f#3,b3]@5, b2, e4@5 d#4@3", K: "~@5 [d#3,f#3]@5 ~ [d#3,f#3]@5, [b2,c#4]", L: "[e2,e3,g#3,b3]",
  M: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, e4@11 c#4@5", N: "c#3@3 e3@2 g#3@3 e3@3 g#3@2 e3@3, e4@11 c#4@5",
  O: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, e4@11 f#4@5", P: "f#2@3 c#3@2 a3@3 c#3@3 a3@2 c#3@3, c#4@11 b3@5",
  Q: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, c#4@11 e4@5", R: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, d#4@11 e4@5",
  S: "c#3@3 e3@2 g#3@3 e3@3 g#3@2 e3@3, c#4", T: "g#2@3 g#3@2 b2@3 g#3@3 c#3@2 g#3@3, ~@11 c#4@5",
  U: "a2@3 e3@2 a3@3 e3@2 ~ a3@2 e3@3, e4@5 c#4@3", V: "f#2@3 c#3@2 a3@3 c#3@3 a3@2 c#3@3, c#4@10 ~ b3@5",
  W: "b2@3 f#3@2 b3@3 f#3@2 ~ b2@5, d#4@5 e4@2 ~",
  X: "[e4 ~@2 e3@2 g#3@3 b3@3 ~@2 e3@3 g#3@3 b3@2 ~@3 g#4@3 b4@2 e5@3, e2, ~ e4@10 e4@10 e4@11]/2",
  Y: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, d#4", Z: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, c#4",
  AA: "[e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3 e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3, b3]/2",
  AB: "[a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3 a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3, c#4]/2",
  AC: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, e4@11 d#4@5",
  AD: "[e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3 e2@3 b2@2 g#3@3 b2@3 g#3@2 b2@3, e4@21 f#4@5 ~ e4@5]/2",
  AE: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, e4",
  AF: "[a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3 a#2@3 f#3@2 a#3@3 f#3@3 a#3@2 f#3@3, c#4@21 d#4@5 ~ e4@5]/2",
  AG: "[b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3 b2@3 f#3@2 b3@3 ~@3 c#4@5, d#4@3 ~]/2",
  AH: "~@3 e3@2 a3@3 e3@3 a3@2 e3@3, a2@3 ~@13, ~ e4@10 c#4@5",
  AI: "[c#3@3 e3@2 g#3@3 e3@3 g#3@2 e3@3 g#2@3 g#3@2 b2@3 g#3@3 c#3@2 g#3@3, c#4@23 ~@4 c#4@5]/2",
  AJ: "c#3@3 e3@2 g#3@3 e3@3 g#3@2 [e3,g#3]@3, e4@11 c#4@5", AK: "b2@3 f#3@2 b3@3 f#3@3 [b2,e4]@5, d#4@11 ~@5",
  AL: "e2@3 b2@2 e3@3 b2@3 e3@2 b2@3, e4@13 ~@3", AM: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, c#4@13 ~@3",
  AN: "~@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, b2@3 ~@8 d#4@5, ~ e4@11 ~@4", AO: "f#2@3 c#3@2 a3@3 c#3@3 a3@2 c#3@3, f#4",
  AP: "[a2,e4]@3 [e3,d#4]@2 [a3,c#4]@3 e3@3 a3@2 e3@3, ~ b3", // A5 Emaj7 A
  AQ: "b2@3 f#3@2 b3@3 f#3@3 [b3,d#4]@2 [f#3,e4]@3, c#4@11 ~@5", AR: "c#3@3 e3@2 g#3@3 e3@3 g#3@2 e3@3, d#4@11 e4@5",
  AS: "g#2@3 g#3@2 b2@3 g#3@3 c#3@2 g#3@3, d#4@13 ~@3", AT: "a2@3 e3@2 a3@3 e3@3 a3@2 e3@3, c#4@3 ~",
  AU: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, e4@11 d#4@5", AV: "b2@3 f#3@2 b3@3 f#3@3 b3@2 f#3@3, c#4",
  AW: "[e2@3 b2@2 e3@3 b2@3 e3@2 b2@3 e2@3 b2@2 e3@3 g#3@3 b3@2 e4@3, b3@27 ~@5]/2",
  AX: "f3@3 a3@2 c4@3 a3@3 c4@2 a3@3, f4", AY: "c3@3 e3@2 g3@3 e3@3 g3@2 e3@3, c4",
  AZ: "~@3 g3@2 b3@3 g3@3 b3@2 g3@3, e3@3 ~@13, ~ e4@15",
  BA: "a2@3 e3@2 ~@3 e3@3 a3@2 ~ e4@2, c4@5 a3@3 ~@5 e3@3, ~@3 d4@4 ~", BB: "g2@3 d3@2 b3@3 d3@3 b3@2 d3@3, d4",
  BC: "d3@3 f3@2 a3@3 f3@3 a3@2 f3@3, f4", BD: "~@3 g3@2 c4@3 g3@3 c4@2 g3@3, c3@3 ~@13, ~ e4@15",
  BE: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 f3@3, d4@5 ~@3", BF: "b2@3 g3@2 b3@3 g3@3 b3@2 g3@3, d4",
  BG: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3, e4@7 ~", BH: "e3@3 g3@2 b3@3 g3@3 b3@2 g3@3, e4",
  BI: "a2@3 e3@2 a3@3 e3@3 a3@2 [e3,e4]@3, c4@5 d4@8 ~@3", BJ: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3, e4",
  BK: "b2@3 g3@2 b3@3 g3@3 b3@2 g3@3, d4@7 ~",
  BL: "[c3@3 g3@2 c4@3 g3@3 c4@2 g3@3 c3@3 g3@2 c4@3 ~@3 d4@5, e4@21 ~@11]/2",
  BM: "~@3 f3@2 a#3@3 f3@3 a#3@2 f3@3, a#2@3 ~@13, ~ f4@10 d4@5", BN: "d3@3 f3@2 a3@3 f3@3 a3@2 f3@3, f4@11 d4@5",
  BO: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3, f4@11 g4@5", BP: "g2@3 d3@2 a#3@3 d3@3 a#3@2 d3@3, d4@11 c4@5",
  BQ: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 f3@3, d4@11 f4@5", BR: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3, e4@11 f4@5",
  BS: "d3@3 f3@2 a3@3 f3@3 a3@2 f3@3, d4", BT: "a2@3 a3@2 c3@3 a3@3 d3@2 a3@3, ~@11 d4@5",
  BU: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 f3@3, f4@11 d4@5", BV: "c3@3 g3@2 c4@3 g3@3 ~@2 g3@3, e4@11 [c4,f4]@4 ~",
  BW: "[d3@3 f3@2 a3@3 f3@3 a3@2 f3@3 a2@3 a3@2 c3@3 a3@3 d3@2 a3@3, f4@29 ~@3]/2",
  BX: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 f3@3, d4@7 ~", BY: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3, f4@11 e4@5",
  BZ: "g2@3 d3@2 a#3@3 d3@3 a#3@2 d3@3, g4", CA: "[a#2,f4]@2 ~ f3@2 [a#3,d4]@3 f3@3 a#3@2 f3@3, ~@2 e4@3 ~@3 c4@8",
  CB: "c3@3 g3@2 c4@3 g3@3 [c4,e4]@2 [g3,f4]@3, d4@3 ~", CC: "d3@3 f3@2 a3@3 f3@3 a3@2 f3@3, e4@11 f4@5",
  CD: "a2@3 a3@2 c3@3 a3@3 d3@2 a3@3, e4", CE: "[a#2,f4]@3 [f3,e4]@2 [a#3,d4]@3 f3@3 a#3@2 f3@3, ~ c4",
  CF: "c3@3 g3@2 c4@3 g3@3 c4@2 g3@3, d4@7 ~",
  CG: "[d3@3 f3@2 a3@3 f3@3 a3@2 f3@3 a2@3 a3@2 c3@3 a3@3 d3@2 a3@3, d4@7 ~]/2",
  CH: "c3@3 g3@2 c4@3 g3@3 [c4,e4]@2 [g3,f4]@3, d4@11 ~@5", CI: "a#2@3 f3@2 a#3@3 f3@3 a#3@2 [f3,a#3]@3, d4@13 ~@3",
  CJ: "[d3@3 f3@2 a3@3 f3@3 a3@2 f3@3 a2@3 a3@2 c3@3 a3@3 d3@2 a3@3, d4@29 ~@3]/2",
  CK: "[a#2,f4]@3 [f3,e4]@2 ~ d4@2 f3@3 a#3@2 f3@3, ~@5 a#3@3 c4@8", // A#5 Fmaj7
  CL: "[c3@3 g3@3 c4@3 g3@3 c4@4 g3@4 ~@2 f4@36 ~@6, d4@23 ~@41, ~@5 f2@5 ~@6]/4",
})).s("gm_piano").gain(0.4)

// chords · acoustic guitar steel · "+12STR GTR"
const acoustic_guitar_steel = note(`<
  ~@49 A B C D E C B F E B C D E G H@2 B C D E C B I E B C D E G J@2 K L M N O P L Q R L M S T P U V@2 U W X Y Z T X AA
  P AB X AC AD T AE U P AF AE P L T X AA P AG X AH Z T X Z AI@2 AE P L T X AA P AG X AH Z T X Z P AF AE P L T X AA P AG
  X AH Z T X AJ@4
>`.pickRestart({
  A: "~@5 e4@5 ~ [e4,a4]@5, a3", B: "~@5 [e4,g#4]@5 ~ [e4,g#4]@5, c#4", C: "~@5 [f#4,b4]@5 ~ [f#4,b4]@5, b3",
  D: "~@5 [c#4,a4]@5 ~ [c#4,a4]@5, f#3", E: "~@5 [e4,a4]@5 ~ [e4,a4]@5, a3", F: "~@5 [d#4,g#4]@5 ~ [d#4,g#4]@5, g#3",
  G: "~@5 [d#4,f#4]@5 ~ [d#4,f#4]@5, b3", // D#m
  H: "[[d#4,f#4]@5 ~@16 [e4,a4]@5 ~ [e4,a4]@5, [e3,e4] a3, ~@5 [g#4,b4]@16 ~@11]/2", // D#m A5 E G#m
  I: "g#3@5 [b3,d#4,g#4]@5 ~ [c#4,d#4,g#4]@5", J: "[[g#4,b4] ~, e3]/2", K: "~@5 [a4,c5]@5 ~ [a4,c5]@5, f4",
  L: "~@5 [g4,c5]@5 ~ [g4,c5]@5, c4", M: "~@5 [g4,e5]@5 ~ [g4,e5]@5, e4", N: "~@5 [a4,c5]@5 ~ [a4,c5]@5, a3",
  O: "~@5 [g4,b4]@5 ~ [g4,b4]@5, g3", P: "~@5 [a4,d5]@5 ~ [a4,d5]@5, d4", Q: "~@5 [f4,a#4]@5 ~ [f4,a#4]@5, a#3",
  R: "~@5 [g4,b4]@5 ~ [g4,b4]@5, b3", S: "~@5 [a4,e5]@5 ~ [a4,e5]@5, a3", T: "~@5 [g4,d5]@5 ~ [g4,d5]@5, g3",
  U: "~@5 [g4,e5]@5 ~ [g4,e5]@5, c4", V: "~@5 [g4,d5]@5 ~ [g4,d5]@5, b3", W: "[c4,g4,e5]@5 ~@11",
  X: "~@5 [a#4,f5]@5 ~ [a#4,f5]@5, a#3", Y: "~@5 [a4,f5]@5 ~ [a4,f5]@5, d4", Z: "~@5 [c5,f5]@5 ~ [c5,e5]@5, c4",
  AA: "~@5 [c5,e5]@5 ~ [c5,e5]@5, c4", AB: "a3@5 [c4,a4,e5]@5 ~ [d4,a4,e5]@5", AC: "~@5 [d5,f5]@5 ~ [a4,f5]@5, d4",
  AD: "~@5 [c5,f5]@5 ~@6, c4", AE: "~@5 [a#4,d5]@5 ~ [a#4,d5]@5, a#3", AF: "a3@5 [c4,a4,d5]@5 ~ [d4,a4,d5]@5",
  AG: "a3@5 [c4,a4,c5]@5 ~ [d4,a4,c5]@5", AH: "~@5 [d5,f5]@5 ~ [d5,f5]@5, d4",
  AI: "[~@5 [a4,d5]@5 ~ [a4,d5]@5 ~@5 [a4,d5]@5 ~ [a4,d5]@5, d4]/2", // D5
  AJ: "[~@6 [c5,f5]@6 [c5,e5]@8 ~@15 f5@17 ~@12, c4@20 [f3,a3]@12 c5@19 ~@13, ~@6 c4@7 ~@3, ~@27 f4@25 ~@12, ~@29 a4@22 ~@13]/4", // F5 C F
})).s("gm_acoustic_guitar_steel").gain(0.15)

stack(bass, piano, acoustic_guitar_steel)

More by Enya