Strudelify
Anywhere Is cover art

Anywhere Is

Enya

KeyE♭ majorTempo97 bpm
0:00/0:00
// Anywhere Is — Enya
// 97 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 1, 4/4 at bar 2, 2/4 at bar 13, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 18 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(97/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, A@4 for four bars: edit a riff to change every repeat.

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@3 A B C D E B C D F G H G H I J@2 K I J@2 L@2 B M B N I J@2 K I J@2 O@2 ~@12 I J@2 K I J@2 P@2 B M B N I J@2 K I J@2
  K I J@2 K I J@2 N ~ A B C D E B C D Q@2
>`.pickRestart({
  A: "~ eb2", B: "d2 ab1", C: "g1 ab1", D: "g1 bb1", E: "eb2!2", F: "eb2", G: "c2 d2", H: "ab1 bb1", I: "eb2 d2",
  J: "ab1 g1", K: "bb1 eb2", L: "[bb1 eb2@2 c2]/2", M: "bb1 c2", N: "bb1 ~", O: "[bb1 eb2@3]/2",
  P: "[bb1 ~@2 c2, ~ eb2@3]/2", Q: "[eb2@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.48)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@29 A B@2 C A B@2 C D ~@12 A B@2 C A B@2 C ~@5 A B@2 C A B@2 C A B@2 C A B@2 E ~ F G H I D G H I J ~
>`.pickRestart({
  A: "eb2 ~ bb2 ~ eb3 ~ bb2 ~ d2 ~ bb2 ~ d3 ~ bb2 ~", B: "ab2 ~ eb3 ~ ab3 ~ eb3 ~ g2 ~ eb3 ~ g3 ~ eb3 ~",
  C: "bb2 ~ d3 ~ f3 ~ d3 ~ eb2 ~ bb2 ~ eb3 ~ bb2 ~", D: "eb2 ~ bb2 ~ eb3 ~ bb2 ~ eb2 ~ bb2 ~ eb3 ~ bb2 ~",
  E: "bb2 ~ d3 ~ f3 ~ d3 ~ eb2 ~@7", F: "~@8 eb2 ~ bb2 ~ eb3 ~ bb2 ~",
  G: "d2 ~ bb2 ~ d3 ~ bb2 ~ ab2 ~ eb3 ~ ab3 ~ eb3 ~", H: "g2 ~ eb3 ~ g3 ~ eb3 ~ ab2 ~ eb3 ~ ab3 ~ eb3 ~",
  I: "g2 ~ eb3 ~ g3 ~ eb3 ~ bb2 ~ d3 ~ f3 ~ d3 ~", J: "eb2 ~@15",
})).s("gm_string_ensemble_1").gain(0.56)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~ A B@2 C D E B C D E B F G F G H I@2 J H I@2 J K L M L N H I@2 J H I@2 J B O@2 P Q@3 R O@2 P Q S H I@2 J H I@2 J K L
  M L T H I@2 J H I@2 J H I@2 J H I@2 U ~ A C D E B C D E V ~
>`.pickRestart({
  A: "~@8 eb2 ~ bb2 ~ eb3 ~ bb2 ~", B: "eb2 ~ bb2 ~ eb3 ~ bb2 ~ eb2 ~ bb2 ~ eb3 ~ bb2 ~",
  C: "d2 ~ bb2 ~ d3 ~ bb2 ~ ab2 ~ eb3 ~ ab3 ~ eb3 ~", D: "g2 ~ eb3 ~ g3 ~ eb3 ~ ab2 ~ eb3 ~ ab3 ~ eb3 ~",
  E: "g2 ~ eb3 ~ g3 ~ eb3 ~ bb2 ~ d3 ~ f3 ~ d3 ~", F: "c3 ~ g3 ~ c4 ~ g3 ~ d3 ~ bb3 ~ d4 ~ bb3 ~",
  G: "ab2 ~ eb3 ~ ab3 ~ eb3 ~ bb2 ~ f3 ~ bb3 ~ f3 ~", H: "eb2 ~ bb2 ~ eb3 ~ bb2 ~ d2 ~ bb2 ~ d3 ~ bb2 ~",
  I: "ab2 ~ eb3 ~ ab3 ~ eb3 ~ g2 ~ eb3 ~ g3 ~ eb3 ~", J: "bb2 ~ d3 ~ f3 ~ d3 ~ eb2 ~ bb2 ~ eb3 ~ bb2 ~",
  K: "eb2 ~ bb2 ~ eb3 ~ bb2 ~ c3 ~ g3 ~ c4 ~ g3 ~", L: "d3 ~ bb3 ~ d4 ~ bb3 ~ ab2 ~ eb3 ~ ab3 ~ eb3 ~",
  M: "bb2 ~ f3 ~ bb3 ~ f3 ~ c3 ~ g3 ~ c4 ~ g3 ~", N: "bb2 ~ f3 ~ bb3 ~ f3 ~ bb1 ~@7",
  O: "ab2 ~ eb3 ~ ab3 ~ eb3 ~ eb2 ~ bb2 ~ eb3 ~ bb2 ~", P: "ab2 ~ eb3 ~ ab3 ~ eb3 ~ db2 ~ ab2 ~ db3 ~ ab2 ~",
  Q: "eb2 ~ bb2 ~ eb3 ~ bb2 ~ ab2 ~ eb3 ~ ab3 ~ eb3 ~", R: "db2 ~ ab2 ~ db3 ~ ab2 ~ eb2 ~ bb2 ~ eb3 ~ bb2 ~",
  S: "bb2 ~ f3 ~ bb3 ~ f3 ~ bb2 ~@7", T: "bb2 ~ f3 ~ bb3 ~ f3 ~@9", U: "bb2 ~ d3 ~ f3 ~ d3 ~ eb2 ~@7", V: "eb2 ~@15",
})).s("gm_pizzicato_strings").gain(0.56)

// other · pizzicato strings · soft notes
const pizzicato_strings_soft = note("<~@38 A B C D E F G A B C H ~@41>".pickRestart({
  A: "ab4 ~@3 ab4 ~@3 g4 ~@7", B: "ab4 ~@3 ab4 ~@3 bb4 ~@7", C: "c5 ~@3 c5 ~@3 db5 ~@3 ab4 ~@3",
  D: "ab4 ~@3 g4 ~@3 ab4 ~@3 ab4 ~@3", E: "g4 ~@7 ab4 ~@3 ab4 ~@3", F: "bb4 ~@7 c5 ~@3 c5 ~@3",
  G: "db5 ~@3 ab4 ~@3 ab4 ~@3 g4 ~@3", H: "ab4 ~@3 g4 ~@11",
})).s("gm_pizzicato_strings").gain(0.32)

// chords · string ensemble 1
const string_ensemble_1_3 = note(`<
  ~ A B@2 C D E B C D E B F G F G E H@2 I E H@2 I J K L K M E H@2 I E H@2 I B ~@12 E H@2 I E H@2 I J K L K N E H@2 I E
  H@2 I E H@2 I E H@2 O ~ A C D E B C D E P ~
>`.pickRestart({
  A: "~@8 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~", // Eb
  B: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~", // Eb
  C: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Bb Ab
  D: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Eb Ab
  E: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~", // Eb Bb
  F: "[g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~", // Cm Bb
  G: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~", // Ab Bb
  H: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~", // Ab Eb
  I: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~", // Bb Eb
  J: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~", // Eb Cm
  K: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Bb Ab
  L: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~", // Bb Cm
  M: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [f3,bb3,d4] ~@7", // Bb
  N: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~@9", // Bb
  O: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [g3,bb3,eb4] ~@7", P: "[g3,bb3,eb4] ~@15",
})).s("gm_string_ensemble_1").gain(0.48)

// other · string ensemble 1
const string_ensemble_1_4 = note(`<
  ~@11 A B C B C ~@8 D E F E G H I@2 J H I@2 J ~ K L M N O P Q R@2 M S ~ H I@2 J H I@2 J D E F E G H I@2 J H I@2 J H I@2
  J H I@2 T ~ U V W X Y V W X Z ~
>`.pickRestart({
  A: "~@8 g5 ~@3 bb5 ~@3", B: "eb6 ~@3 c6 ~@3 f6 ~@3 d6 ~@3", C: "ab5 ~@3 g5 ~@3 f5 ~@3 d5 ~@3",
  D: "g5 ~@3 bb5 ~@3 eb6 ~@3 c6 ~@3", E: "f6 ~@3 d6 ~@3 ab5 ~@3 g5 ~@3", F: "f5 ~@3 d5 ~@3 eb6 ~@3 c6 ~@3",
  G: "f5 ~@3 d5 ~@11", H: "g5 ~@3 g5 ~@3 f5 ~@3 g5 ~ bb5 ~", I: "c6 ~@3 c6 ~@3 bb5 ~@3 g5 ~@3",
  J: "f5 ~@3 f5 ~@3 g5 ~@3 g5 ~@3", K: "ab4 ~@3 ab4 ~@3 g4 ~@7", L: "ab4 ~@3 ab4 ~@3 bb4 ~@7",
  M: "c5 ~@3 c5 ~@3 db5 ~@3 ab4 ~@3", N: "ab4 ~@3 g4 ~@3 [ab4,c5] ~@3 [ab4,c5] ~@3",
  O: "[g4,bb4] ~@7 [ab4,c5] ~@3 [ab4,c5] ~@3", P: "[g4,bb4] ~@7 c5 ~@3 c5 ~@3", Q: "db5 ~@3 ab4 ~@3 ab4 ~@3 g4 ~@3",
  R: "[ab4,c5] ~@3 [ab4,c5] ~@3 [g4,bb4] ~@7", S: "ab4 ~@3 g4 ~@11", T: "f5 ~@3 f5 ~@3 g5 ~@7", U: "~@8 g5 ~@3 g5 ~@3",
  V: "f5 ~@3 g5 ~ bb5 ~ c6 ~@3 c6 ~@3", W: "bb5 ~@3 g5 ~@3 c6 ~@3 c6 ~@3", X: "bb5 ~@3 g5 ~@3 f5 ~@3 f5 ~@3",
  Y: "g5 ~@3 g5 ~@3 g5 ~@3 g5 ~@3", Z: "g5 ~@15",
})).s("gm_string_ensemble_1").gain(0.35)

// other · piano
const piano = note(`<
  ~@3 A B C D C B C D E ~@4 F G F H F G F I ~@5 F G F H F G F I ~@13 F G F H F G F I ~@5 F G F H F G F H F G F H F G F J
  ~ K B C D C B C D L ~
>`.pickRestart({
  A: "~@6 bb3 ~ bb3 ~ c4 ~ eb4@2 c4 ~", B: "eb4@2 ~ g4 ~@2 bb3 ~ bb3@2 c4 ~ eb4@2 c4 ~",
  C: "eb4@2 ~ eb4 ~@2 bb3 ~ bb3 ~ c4 ~ eb4 ~ c4 ~", D: "eb4@2 ~ g4@2 ~ bb3 ~ bb3 ~ bb3 ~ eb4@2 c4 ~",
  E: "eb4@2 ~ eb4@5 ~@8", F: "bb3 ~ c4 ~ eb4@2 c4 ~ eb4@2 ~ g4 ~@2 bb3 ~",
  G: "bb3@2 c4 ~ eb4@2 c4 ~ eb4@2 ~ eb4 ~@2 bb3 ~", H: "bb3 ~ bb3 ~ eb4@2 c4 ~ eb4@2 ~ eb4 ~@2 bb3@2",
  I: "bb3 ~ bb3 ~ eb4@2 c4 ~ eb4@2 ~ eb4@5", J: "bb3 ~ bb3 ~ eb4@2 c4 ~ eb4@2 ~@6",
  K: "~@6 bb3@2 bb3 ~ c4 ~ eb4@2 c4 ~", L: "eb4 ~@7",
})).s("gm_piano").gain(0.64).pan(0.7)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@4 B C D E B C D F G H G H I J@2 K I J@2 L@2 M N M O P Q@2 R P Q@2 R S ~@7 T@2 U V W P Q@2 R P Q@2 X@2 M N M O P Q@2
  R P Q@2 R P Q@2 R P Q@2 Y@3 Z AA P AB Z AA P AC@2
>`.pickRestart({
  A: "[[gb2,db3,gb3,bb3]@3 [eb2,bb2,eb3,g3,bb3]@4 [eb2,bb2,eb3,g3,bb3]]/4", B: "[d2,bb2,d3,f3,bb3] [ab2,eb3,ab3,c4]",
  C: "[g2,eb3,g3,bb3] [ab2,eb3,ab3,c4]", D: "[g2,eb3,g3,bb3] [bb2,d3,f3,bb3]",
  E: "[eb2,bb2,eb3,g3] [eb2,bb2,eb3,g3,bb3]", F: "[eb2,bb2,eb3,g3]", G: "[c3,eb3,g3,c4] [d3,f3,bb3,d4]",
  H: "[ab2,eb3,ab3,c4] [bb2,f3,bb3,d4]", I: "[eb2,bb2,eb3,g3,bb3] [d2,bb2,d3,f3,bb3]",
  J: "[ab2,eb3,ab3,c4] [g2,eb3,g3,bb3]", K: "[bb2,d3,f3,bb3] [eb2,bb2,eb3,g3]",
  L: "[[bb2,d3,f3,bb3] [eb2,bb2,eb3,g3]@2 [c3,eb3,g3,c4]]/2", M: "[d3,f3,bb3,d4] [ab2,eb3,ab3,c4]",
  N: "[bb2,f3,bb3,d4] [c3,eb3,g3,c4]", O: "[bb2,f3,bb3,d4] ~", P: "[bb2,g3,eb4] [bb2,f3,d4]",
  Q: "[c3,ab3,eb4] [bb2,g3,eb4]", R: "[bb2,f3,d4] [bb2,g3,eb4]", S: "[bb2,g3,eb4]",
  T: "[eb4,ab4,c5]@7 ~ [eb4,g4,bb4]@8", U: "[eb4,ab4,c5]@8 [db4,f4,ab4]@7 ~", V: "[eb4,g4,bb4]@7 ~ [eb4,ab4,c5]@8",
  W: "[f4,bb4,d5]@9 ~@7", X: "[[bb2,f3,d4] [bb2,g3,eb4]@2 [c3,eb3,g3,c4]]/2",
  Y: "[[bb2,f3,d4] [bb2,g3,eb4,eb5]@4 [bb2,g3,eb4]]/3", Z: "[bb2,f3,d4] [c3,ab3,eb4]", AA: "[bb2,g3,eb4] [c3,ab3,eb4]",
  AB: "[bb2,g3,eb4]!2", AC: "[[bb2,g3,eb4,eb5]@3 ~]/2",
})).s("gm_synth_strings_1").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~ A@11 B@12 C A@4 B@9 ~@12 B@8 C A@4 B@15 C ~ A@8 B ~>".pickRestart({
  A: "~ x", B: "x", C: "x!2",
})).gain(0.72)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@28 A ~ A ~ A ~ A ~ A ~@12 A ~ A ~ A ~ A ~ A ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 B ~ B ~ B ~ B ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<[~@4 x ~@2 x] [x ~@2 x ~@4] ~@88>").gain(0.4)

stack(
  string_ensemble_1, string_ensemble_1_2, pizzicato_strings, pizzicato_strings_soft, string_ensemble_1_3,
  string_ensemble_1_4, piano, synth_strings_1, kick, snare, snare_soft, low_tom
)

More by Enya