Strudelify
On My Way Home cover art

1997 · Paint the Sky with Stars

On My Way Home

Enya

KeyF majorTempo95 bpm
0:00/0:00
// On My Way Home — Enya
// 95 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 122 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · church organ · "CHURCH ORG"
const church_organ = note("<A@2 B@5 ~@115>".pickRestart({
  A: "[[d3,d4] [c3,c4], [a3,gb4]@63 ~]/2", // D C D
  B: "[[b2,b3,d4,g4]@31 ~ [db4,e4]@32 [d3,gb3,d4]@64 ~@32, ~@31 a2@32 ~@97, ~@32 a3@97 ~@31]/5", // G Dbm D
})).s("gm_church_organ").gain(0.32)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@5 A@2 B C B A D C E F E A B C B G H I J K H I J K H I J K ~ A B C B A D C E F E A B C B G H I J K H I J K H I J K ~
  L M@8 N I J K H I J K H I J K H I J K H I J K H I J K H I J K H I J K H I J K H I J K H I J K H I J K O ~@2
>`.pickRestart({
  A: "d2 a2 d3 gb3 d2 a2 d3 gb3 d2 a2 d3 gb3 d2 a2 d3 gb3", B: "db2 a2 db3 e3 db2 a2 db3 e3 d2 a2 d3 gb3 d2 a2 d3 gb3",
  C: "e2 b2 e3 g3 e2 b2 e3 g3 e2 b2 e3 g3 e2 b2 e3 g3", D: "db2 e2 a2 e3 db2 e2 a2 e3 d2 a2 d3 gb3 d2 a2 d3 gb3",
  E: "db2 a2 db3 e3 db2 a2 db3 e3 db2 a2 db3 e3 db2 a2 db3 e3", F: "e2 b2 e3 g3 e2 b2 e3 g3 d2 a2 d3 g3 d2 a2 d3 g3",
  G: "d2 a2 d3 gb3 d2 a2 d3 gb3 c2 g2 c3 e3 c2 g2 c3 e3", H: "f2 c3 f3 a3 f4 c4 a3 f3 f2 f3 c3 a3 f3 c4 a3 f4",
  I: "c2 g2 c3 e3 g3 c4 e4 c4 e4 d4 c4 g3 c3 e3 g2 c2", J: "d2 f2 a2 d3 f3 a3 d4 f4 d3 a2 f3 d3 a3 f3 d4 a3",
  K: "bb2 d3 f3 bb3 d4 bb3 f3 d3 c3 e3 g3 c4 e4 c4 g3 e3",
  L: "~@7 c3, ~ ab2@31, ~@5 c3@19 eb3@8, ~@2 eb3@3 ab3@3, ~@3 ab3 c4@4",
  M: "[~@59 eb3 ~@3 e4, ~ ab2@27 c3@4 ab2@24 eb3@4 c3@4 ab2@24 eb3@20 ab2@35 c3@29 ab3@48 bb3@4 g3@4 eb3@4 g3@8 e3@16, ~ c3@5 eb3@3 c3@4 ab3@10 c3 db2@7 f3@3 eb2@5 c4@5 db4@16 ~ g3@3, ~@8 eb3@12 g3@48 c3@16 g3@32 db3@16 c2@15 eb3@5 g3@8 db3@36 eb3@4 g3@4 bb3@4 eb4@4 g4@28 ~@16, ~@12 g3@4 c4@24 eb3@4 ab3@4 c4@25 eb3@3 g3@4 c4@20 f2@39 g2@25 f3@52 eb4@24 ~@8 c4@8]/8",
  N: "~@3 a3 f4 c4 a3 f3 f2 f3 c3 a3 f3 c4 a3 f4, f2 ~@3, ~ c3@3 ~@12, ~ f3 ~@6", O: "f2 c3 f3 a3 f4 c4 a3 f3 ~@8",
})).s("gm_acoustic_guitar_nylon").gain(0.13)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@4 A@3 B C D@2 E C F G@2 H E C I@2 J K L M J K N M O K L M ~@2 B C D@2 E C F G@2 H E C I@2 J K L M J K N M O K L M ~
  P@4 Q R Q S@2 J K L M J K N M O K L M J K L M J K N M O K L M J K L M J K N M O K L M J K L M J K N M O K L M J ~@2
>`.pickRestart({
  A: "[d2@95 ~]/3", B: "a1@16 d2@15 ~", C: "e2", D: "[a1 d2@3]/2", E: "a1 d2", F: "a1",
  G: "[e2@16 d2@15 ~ b1 ~@31, ~@31 a1@32 ~]/2", H: "d2@31 ~", I: "[a1@16 d2@29 ~@3 c2@16]/2", J: "~ f2@31",
  K: "~ c2@31", L: "~ d2@31", M: "bb1 c2", N: "~ d2@30 ~", O: "~ f2@15", P: "ab1/4", Q: "db2", R: "c2",
  S: "[eb2@3 e2]/2",
})).s("gm_synth_strings_1").gain(0.36)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note(`<
  ~@4 A@2 ~@14 B C ~@3 D E F ~ G H F ~ I ~@14 B C ~@3 D E F ~ G H F ~@11 C ~@3 D E F ~ G H F ~ C ~@3 D E F ~ G H F ~ C
  ~@3 D E F ~ G H F ~ C ~@3 D E F ~ G H F ~ C ~@2
>`.pickRestart({
  A: "[d4@63 ~]/2", B: "~@16 c4@15 ~", C: "~ f4@18 ~@13", D: "f4@13 ~@19", E: "c5@3 ~@5", F: "~ a4@11 ~@20",
  G: "~ f4@16 ~@15", H: "~ c5@12 ~@19", I: "~ c4@18 ~@13",
})).s("gm_tubular_bells").gain(0.31)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~@21 A B C D E F G D H I J D ~@16 A B C D E F G D H I J D ~@10 A B C D E F G D H I J D A B C D E F G D H I J D A B C D
  E F G D H I J D ~@15
>`.pickRestart({
  A: "[f4,a4,c5] ~ [f4,a4,c5]!2 ~ [f4,a4,c5]!2 ~@9", B: "[e4,g4,c5] ~ [e4,g4,c5]!2 ~ [e4,g4,c5]!2 ~@9",
  C: "[f4,a4,d5] ~ [f4,a4,d5] [f4,d5] a4 [f4,a4,d5] [f4,a4,c5,d5] ~@9", // Dm Dm7
  D: "[d4,f4,bb4] ~ [d4,f4,bb4]!2 ~ [d4,f4,bb4]!2 ~ [e4,g4,c5] ~@7", E: "[f4,a4,c5] ~ [f4,a4,c5]!2 ~ c5 [f4,a4,c5] ~@9",
  F: "[e4,g4,c5] ~ [e4,g4,c5]!2 ~ g4 [e4,g4,c5] ~@9", G: "[f4,a4,d5] ~ [f4,a4,d5]!2 ~ [a4,d5] [f4,a4,d5] ~@9",
  H: "[f4,a4,c5] ~ [f4,a4,c5] [f4,a4] c5 [f4,a4,c5]!2 ~@9", // F
  I: "[e4,g4,c5] ~ [e4,c5] [e4,g4,c5] g4 [g4,c5] [e4,g4,c5] ~@9", J: "[f4,a4,d5] ~ [f4,a4,d5]!2 ~ [f4,a4,d5]!2 ~@9",
})).s("gm_pizzicato_strings").gain(0.31)

// chords · piano · "A.PIANO 1"
const piano = note("<~@21 A@5 B@8 ~@15 A@5 C@8 ~@9 A@5 D@4 E@8 D@4 E@8 D@4 E@8 D@4 F@6>".pickRestart({
  A: "[~@39 f4, ~ f3@32 c4@27 e4@21 a4@23 f4@4 bb4@12 g4@4 c5@5 c4@3 f4@5 a4@3 c5@4 f5@4 c5@4 a4@8, ~ a3@5 c4 a3@7 g4@11 d4@15, ~@8 c4@12 f4@17 e4@4 g4@4 c5@4 e5@15 d4@4 f4@4 a4@4 d5@36 c4@4 e4@44, ~@3 f4 a4@9 c5@8 f4 d4 f4 bb3@16]/5",
  B: "[~@225 c4@31, c4@28 e4@24 d5@20 f4@4 bb4@45 a4@31 c5@36 f5@16 bb4@5 c4@4 e4@4 g4@3 c5@36, ~@5 e4@15 c5@36 a4@24 c4@5 e4@7 c5@5 f3@27 c5@5 c4@27 e5@36 bb3@64, ~@8 g4@9 f5@7 g4@36 f4@4 bb3@25 g4@16 c4@4 f4@4 c4@3 f4@16 e4@4 g4@4 c5@4 e4@16 d4@4 f4@5 a4@3 d5@4 f4@4 a4@16 d4@60, ~@12 c5@5 e5@16 d4@3 f4@5 a4@3 d5@4 f5@20 d4@33 a3@48 g4@35 d5@16 f4@56]/8",
  C: "[~@55 c5@9, c4@28 e4@24 d5@20 f4@4 bb4@45 a4@31 c5@36 f5@16 bb4@5 c4@4 e4@4 g4@39, ~@5 e4@15 c5@36 a4@24 c4@5 e4@7 c5@5 f3@27 c5@5 c4@27 e5@36 bb3@64, ~@8 g4@9 f5@7 g4@36 f4@4 bb3@25 g4@16 c4@4 f4@4 c4@3 f4@16 e4@4 g4@4 c5@4 e4@16 d4@4 f4@5 a4@3 d5@4 f4@4 a4@16 d4@60, ~@12 c5@5 e5@16 d4@3 f4@5 a4@3 d5@4 f5@20 d4@33 a3@48 g4@35 d5@16 f4@56]/8",
  D: "[~@31 c5, c4@28 e4@24 d5@20 f4@4 bb4@13 g4@3 c5@5 f3@4 a3@4 c4@4 f4@4 c4@3 f4@5 a4@7, ~@5 e4@15 c5@36 a4@24 c4@5 e4@43, ~@8 g4@9 f5@7 g4@36 f4@4 bb3@64, ~@12 c5@5 e5@16 d4@3 f4@5 a4@3 d5@4 f5@20 d4@60]/4",
  E: "[~@63 f4, ~ c4@27 e5@36 bb3@25 g4@11 a3@4 c4@4 f4@4 a4@36 c5@29 a4@23 f4@4 bb4@12 g4@4 c5@5 c4@3 f4@5 a4@3 c5@4 f5@4 c5@4 a4@8, ~@4 e4@12 e4@16 d4@4 f4@5 a4@3 d5@4 f4@4 a4@16 d4@24 c5@24 f4@17 e4@4 g4@4 c5@4 e5@15 d4@4 f4@4 a4@4 d5@36 c4@4 e4@44, ~@8 g4@12 ~ g4@35 d5@16 f4@4 bb4@44 c4@4 a3@28 g4@44 d4@60, ~@12 c5@12 c5@36 f5@21 c4@4 e4@12 f3@32 c4@27 e4@24 f4@4 d4@4 f4@4 bb3@64]/8",
  F: "[~@27 f4@16 ~@5, ~ c4@27 e5@36 bb3@25 g4@15 c4@64 ~@24, ~@4 e4@12 e4@16 d4@4 f4@5 a4@3 d5@4 f4@4 a4@16 d4@24 c5@64 ~@36, ~@8 g4@12 ~ g4@35 d5@16 f4@4 bb4@21 f3@64 ~@31, ~@12 c5@12 c5@36 f5@21 c4@4 e4@15 a3@64 ~@28]/6",
})).s("gm_piano").gain(0.12)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@21 A@2 B@4 C@4 D@3 E@2 F@4 G@6 H@3 I J B@4 C@4 D@3 K@5 L M N@2 A@2 B@4 C@4 O@2 A@2 B@4 C@4 O@2 A@2 B@4 C@4 O@2 A@2
  B@4 C@4 O@2 P ~@2
>`.pickRestart({
  A: "[~ [f4,a4]@31 [e4,g4]@32, ~ c4@62 ~]/2", // F Em
  B: "[a4@31 bb3@15 ~@3 e4@15 ~ [f4,a4]@31 [e4,g4]@32, f4@48 g4@17 ~@63, d4@41 ~@7 c4@79 ~]/4", // F Em
  C: "[~ a4@31 bb3@15 ~@2 [e4,g4]@15 ~ f4@31 ~ e4@31, ~ [d4,f4]@48 c4@78 ~, ~@2 a4 g4]/4", // Em Dm
  D: "[a4@32 bb3@14 ~@3 e4@47, [d4,f4]@47 ~ [c4,g4]@47 ~]/3", // Dm C5
  E: "[[d4,gb4]@32 [db4,e4]@16 ~ d4@15, a3@63 ~, ~@3 gb4]/2", // D Dbm
  F: "[~ b3@31 ~@16 [d4,gb4]@48 [db4,e4]@16 [d4,gb4]@16, e4@3 ~@5, g4@2 db4 ~@5, ~@33 a3@94 ~]/4", // D Dbm D
  G: "[~ b3@30 ~ [a3,db4]@31 ~ [b3,g4]@16 ~@32 db4@16 ~ d4@30 ~ [db4,e4]@15 ~ [d4,gb4]@16, e4@5 d4@2 ~ gb4@2 ~@2, g4@32 ~@48 gb4@16 e4@33 ~@63, ~@81 a3@110 ~]/6", // A Em Dbm D
  H: "[[b3,g4]@16 db4@7 ~ [d4,gb4]@16 [c4,e4,g4]@8, e4@47 ~@49, ~@32 a3@45 ~@19]/3", I: "~ [f4,a4]@31, ~ c4@16 ~@15",
  J: "[e4,g4]", K: "[ab4@32 g4@29 ~@2 ab4@32 ~ g4@30 ~@2 [db4,f4]@32, [c4,eb4]@127 ab4@32 ~]/5", L: "[c4,eb4,g4]",
  M: "[db4,f4,ab4]", N: "[g4@15 ~@9 [c4,e4,c5]@8, [eb4,bb4]@47 ~@17, ~ g4]/2",
  O: "[a4@32 bb3@14 ~@3 e4@15, [d4,f4]@47 ~ [c4,g4]@16]/2", P: "~ [c4,f4,a4]@31",
})).s("gm_string_ensemble_1").gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@6 A B C D E@2 A E F C E ~ A@2 G F G@2 C F E F C F C E F ~ A B C D E@2 A E F C E ~ A@2 G F G@2 C F E F C F C E F ~@10
  F G@2 C F E F C F C E F@2 G@2 C F E F C F C E F@2 G@2 C F E F C F C E F@2 G@2 C F E F C F C E F A ~@2
>`.pickRestart({
  A: "~@9 x ~@22", B: "~@25 x ~@6", C: "~@8 x ~@16 x ~@6", D: "~@3 x", E: "~@9 x ~@15 x ~@6", F: "~@9 x ~@14 x ~@7",
  G: "~ x ~ x",
})).gain(0.03)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@6 A B ~ B ~@2 C ~@4 D C@2 ~@14 A B ~ B ~@2 C ~@4 D C@2 ~@74>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~@25 x ~@6", D: "~@8 x ~@16 x ~@6",
})).gain(0.02)

stack(
  church_organ, acoustic_guitar_nylon, synth_strings_1, tubular_bells, pizzicato_strings, piano, string_ensemble_1,
  tambourine, tambourine_soft
)

More by Enya