Strudelify

On Your Shore

Enya

KeyE majorTempo100 bpm
0:00/0:00
// On Your Shore — Enya
// 100 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 76 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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
const piano = note("<~@6 A@7 B@5 C@8 D@2 E@7 F@7 G@5 H@5 ~@12 I@8 J@4>".pickRestart({
  A: "[~@35 g#3@5 ~@15 f#3@5 ~@15 g#3@6 ~@38 e3@5 ~@15 c#3@6 ~@31 b3@13 ~@14 g#3@4 ~@9 [b3,b4]@6 f#3@2, ~@22 [e3,e5]@19 ~@4 f#3@10 ~@5 [c#3,e5]@22 ~@16 g#4@15 ~ [a3,g#4]@11 ~@9 [f#3,c#4]@12 ~@4 f#3@39 [e3,e5]@19 ~@4 f#3@10 ~@2, ~@26 g#3@9 ~@5 [d#3,c#5]@21 ~@9 c#4@12 ~@10 b3@12 ~@5 e3@9 ~@11 c#3@10 ~@6 [b2,f#4]@45 ~@17 [d#3,c#5]@17, ~@31 b3@10 ~@9 [b3,b4]@12 ~@3 g#3@10 ~@6 [e3,b4]@24 [a2,a4]@19 [f#2,e4]@21 ~@10 e4@36 ~@7 b3@10 ~@16, ~@165 d#4@25 ~@4 g#3@9 ~@21]/7", // B E C#m Amaj7 F#5 E D#7 B5 …
  B: "[~@17 g#3@5 ~@16 g#3@6 ~@13 c#3@5 ~@15 e3@5 ~@19 e4@10 ~@10 e3@25 ~@7 [e3,e5]@5 g#3@2, ~@3 [c#3,e5]@21 ~@3 g#3@11 ~@11 c#3@8 ~@5 [a2,e4]@21 ~@28 e2@21 ~@28, ~@8 g#3@9 ~@5 e3@22 [f#2,a4]@19 ~@19 [b2,f#4]@30 ~@48, ~@12 c#4@11 b4@22 ~@27 [a3,c#4]@11 ~@10 b3@18 [g#3,b3,e4]@35 ~@14, ~@33 [b3,g#4]@12 ~@8 [f#3,g#4]@9 ~@4 e3@11 ~@10 f#3@25 ~@48]/5", // E C#m A5 F#m B5 A E F#sus2
  C: "[~@6 g#3@6 ~@14 f#3@5 ~@15 g#3@7 ~@16 g#4@5 ~@13 e3@4 ~@13 c#3@5 ~@29 b3@10 ~@13 g#3@4 ~@13 f#3@5 ~@15 g#3@5 ~@14 b2@5 ~@13 c#3@4 ~@14 e3@3, ~@2 b3@10 [d#3,c#5]@20 ~@9 c#4@13 ~@4 g#3@17 ~@8 [a3,g#4]@9 ~@8 [f#3,c#4]@9 ~@4 f#3@9 ~@6 d#4@21 ~@4 g#3@8 ~@4 [d#3,c#5]@18 ~ c#3@21 ~@3 b2@9 ~@9 c#3@9 ~@9 e3@9 ~@3, ~@16 f#3@9 ~@6 [c#3,e5]@23 e3@21 ~@4 e3@8 ~@8 c#3@9 ~@14 e4@31 ~@8 b3@10 ~@7 [b3,b4]@10 ~@9 c#4@12 ~@8 [e3,g#4]@9 ~@8 [f#3,g#4]@9 e4@17, ~@21 [b3,b4]@10 ~@5 g#3@10 ~@7 b4@22 ~@34 f#4@40 ~@34 e5@21 ~@45 c#4@7, ~@63 b3@11 [a2,a4]@17 [f#2,e4]@18 ~@39 [e3,e5]@18 ~@3 f#3@9 ~@10 g#3@10 ~@5 [e2,b4]@19 [f#2,a4]@18 ~@8 a3@8]/8", // D#7 Amaj7 F#5 D#7 C#m B E F#sus2 …
  D: "[~@20 e4@7 ~@23 e2@11 c#4@3, ~@3 [b2,f#4]@25 g#3@35 ~, ~@8 f#3@19 e2@11 e3@24 ~@2, ~@29 b3@34 ~, ~@30 e4@33 ~]/2", // B5
  E: "[~@25 e4@4 ~@6 [f#3,b4]@7 ~@8 e4@6 ~@6 e3@13 ~@9 d#4@5 ~@5 [e3,g#3]@6 ~@6 e3@13 ~@10 d#4@5 ~@5 [e3,g#3]@7 ~@25 c#4@8 ~@20 e4@7 ~@6 b4@8 ~ g#2@3, ~@6 g#4@16 f#4@7 ~@13 g#4@14 ~@19 d#4@9 ~@35 d#4@9 ~@31 c#4@12 ~@24 f#4@11 ~@14 c#5@4, ~@7 c#2@23 ~@104 [g#2,b3]@13 ~@32 [c#2,g#4]@27 ~@18, ~@11 g#2@18 ~@14 g#2@14 ~@18 b2@14 [g#2,b3]@11 [a2,c#4]@20 b2@15 ~@11 [a2,b3]@33 ~@5 g#2@22 ~@4 f#3@11 ~@3, ~@17 c#3@13 [b2,f#4]@14 ~@12 [a2,c#4]@20 ~@3 [f#3,e4]@10 ~@35 [f#3,e4]@10 ~@18 e3@13 e3@14 ~@9 c#3@17 ~ [b2,f#4]@15 ~@3]/7", // B5 E G#m C#5 G#m A Asus2 B5 …
  F: "[~@2 [d#3,b4]@5 ~@10 a3@9 ~@10 d#4@5 ~@4 [e3,g#3]@6 ~@10 a3@11 ~@10 d#4@5 ~@5 g#3@6 ~@10 [c#3,c#4]@64 ~@14 g#3@4 ~@13 f#3@4 ~@9 c#4@8, ~@7 [a2,c#5]@19 b2@15 [g#2,b3]@10 [a2,c#4]@21 d#4@10 ~@5 [g#2,b3]@12 ~@4 g#2@64 ~@7 e3@17 ~@3 f#3@9 ~@8 g#3@10 ~@3, ~@12 e3@14 d#4@9 ~@37 b2@16 ~@10 [c#2,b3]@64 ~@16 g#3@8 ~@4 [d#3,c#5]@17 [c#3,e5]@17, ~@31 [f#3,e4]@10 ~@15 e3@17 ~@4 [f#3,e4]@11 ~@3 e3@7 ~@75 e5@17 ~@8 b4@9 ~@17, ~@182 b3@9 ~@8 b3@9 ~@16]/7", // G#m E C# A G#m A G#m C#7 …
  G: "[~@16 g#3@5 ~@12 e3@5 ~@13 c#3@4 ~@29 b3@10 ~@12 g#3@5 ~@12 f#3@4 ~@13 g#3@5 ~@9 [b3,g#4]@5 g#3, ~@2 [e3,b4]@20 ~@4 e3@7 ~@9 c#3@9 ~@4 [b2,f#4]@39 ~@17 [d#3,c#5]@17 ~@17 [e3,b4]@15, ~@7 g#3@9 ~@5 [a2,a4]@17 [f#2,e4]@18 ~@8 e4@30 ~@8 b3@10 ~@7 [b3,b4]@9 ~@8 c#4@9 ~@15, ~@11 [b3,g#4]@11 ~@7 [a3,g#4]@9 ~@8 [f#3,c#4]@9 ~@4 f#3@35 [e3,e5]@18 ~@3 f#3@8 ~@4 [c#3,e5]@18 ~@15, ~@73 d#4@21 ~@4 g#3@8 ~@26 g#3@8 ~@9 g#3@9 ~@2]/5", // E E5 B5 D#7 E5 A F#7 B …
  H: "[~@35 e3@5 ~@17 e4@6 ~@19 e2@64 ~@14, ~@4 [f#2,a4]@20 ~@7 [a3,c#4]@10 ~@10 b3@13 ~@4 b2@9 ~@83, ~@8 c#3@8 ~ c#3@7 ~@2 e3@9 ~@11 f#3@18 e2@18 ~@78, ~@12 [f#3,g#4]@9 [a2,e4]@19 [b2,f#4]@23 e4@64 ~@33, ~@72 e3@21 ~@67]/5", // F#m A F#sus2 A5 B5
  I: "[~@19 g#3@4 ~@13 f#3@4 ~@14 g#3@5 ~@14 g#3@4 ~@12 c#4@5 ~@13 c#4@5 ~@9 b3@9 ~@10 b4@10 ~@13 g#3@4 ~@13 f#3@4 ~@14 g#3@5 ~@14 g#3@5 ~@13 c#4@4 ~@14 e3@3, ~@6 [e3,e5]@18 ~@4 f#3@8 ~@4 e5@19 ~@26 [e4,g#5]@9 ~@9 [f#4,c#5]@10 ~@8 e5@29 e5@17 ~@17 e5@20 ~@26 [f#4,g#5]@9 ~@17, ~@11 g#3@8 ~@4 [d#3,c#5]@18 c#3@18 [e3,b4]@19 ~@16 [f#3,e5]@19 b2@39 ~@3 g#3@8 ~@4 [d#3,c#5]@19 ~@8 c#4@10 ~@4 g#3@9 ~@5 [f#3,a5]@17 ~@5 e3@9 ~@3, ~@15 b3@9 ~@8 [b3,b4]@9 ~@4 g#3@9 ~@10 g#3@9 ~@4 [a3,a5]@17 ~@22 f#3@9 ~@5 d#5@21 e3@17 ~@3 f#3@9 ~@5 c#3@19 ~@8 [b3,g#5]@11 ~@3 c#4@8 ~@14 [a3,c#5]@8, ~@49 c#4@10 ~@9 [b3,g#5]@10 ~@3 c#4@8 ~@9 c#4@9 ~@5 f#5@39 ~@8 b3@10 ~@7 [b3,b4]@10 ~@3 g#3@9 ~@5 [e3,b4]@20 ~@16 [a2,e5]@17]/8", // E F#5 F#sus2 D#7 E5 F#7 D#7 F#m …
  J: "[~@21 e5@4 ~@13 b3@9 b3@17, ~ f#5@24 g#4@32 ~@7, ~@2 b2@21 ~ b2@27 ~@77, ~@7 f#3@10 ~@33 e2@43 ~@35, ~@12 b3@23 b3@16 [b4,e5]@64 ~@13]/4", // E5
})).s("gm_piano").gain(0.26)

// chords · piano · soft notes
const piano_soft = note("<~@8 A@2 ~@6 B@2 ~@3 C@2 ~@2 D@2 E ~@13 F@2 ~@6 G@4 ~@14 H@2 ~@3 I@4>".pickRestart({
  A: "[~@22 g#3@19 ~@23]/2", B: "[~@10 b2@5 ~@3 e2@7 ~@7, ~@15 b2@10 ~@7]/2", C: "[~@13 f#3@13 ~@6, ~@7 b2@19 ~@6]/2",
  D: "[~@15 a2@20 ~@11 d#3@15 ~@3]/2", E: "~ b2@10 b2@19 ~@2", F: "[~@29 g#3@5 ~@30]/2",
  G: "[~@13 b2@10 ~@13 b2@64 ~@28, ~@23 b2@12 ~@93, ~@29 e3@64 ~@35]/4", H: "[~@35 b3@21 ~@8, ~@29 f#3@26 ~@9]/2",
  I: "[~@17 f#3@11 ~ f#3@22 ~@43 [g#3,e4]@34, ~@7 b2@8 ~, ~@31 e3@32 ~, ~@69 g#3@24 [e1,e2]@35, ~@83 b1@45]/4", // C#m E
})).s("gm_piano").gain(0.15)

// chords · pad new age · "pad"
const pad_new_age = note("<A@5 B@8 C D@2 E@7 F@5 G@3 H@7 I@2 J@7 K@2 L@5 M@3 N@8 O@7 P@4>".pickRestart({
  A: "[~@15 [e3,e4]@18 [g#1,d#4]@20 [e2,e3,e4]@20 ~ [g#1,b3,d#4]@20 ~@9 g#4@9 c#4@11 c#4@9 ~@19 e4@9, ~@14 e2@20 ~@39 g#4@22 ~@37 [b1,b2,b3,d#4,f#4]@28, ~@15 [g#3,b3]@60 ~@19 [a2,a3,c#4,e4,a4]@18 [f#2,f#3,a3,e4]@22 ~@26]/5", // E G#5 E G#m B G#m A F#m7
  B: "[~@4 g#3@49 [e2,g#3,b3,e4]@19 ~ d#2@19 ~@22 b3@22 ~@20 f#1@21 ~ b2@41 ~@21 d#2@16, ~@3 [e2,e3,b3,e4]@50 ~@19 [f#3,b3,d#4]@20 e4@44 ~ a3@42 ~@40 [e2,b3]@22 ~@15, ~@92 [c#2,g#3]@21 [e2,g#3]@23 [a1,e3]@22 ~@19 [b1,b3,d#4,f#4]@44 ~@18 [g#3,d#4]@17, ~@93 c#4@23 ~@20 c#4@42 ~@42 e4@22 ~@14]/8", // E E5 B E5 C#5 E A5 B …
  C: "~ [c#2,c#4]@21 [e2,b3]@10", D: "[~@12 f#2@19 [a1,a2,a3,c#4]@19 ~ [b1,f#4]@13, ~@11 [a3,c#4]@19 ~@20 d#4@14]/2",
  E: "[~@13 [e2,b3,e4]@43 ~ [e2,e3]@19 [d#2,d#3,d#4]@19 [c#2,c#4]@20 [e2,e3,b3]@24 [a1,a3,c#4]@15 ~ [f#2,f#3,c#4]@18 [b1,b3,d#4]@38 ~ [g#3,b3,e4]@12, ~@12 e3@44 e4@20 ~@19 e4@45 ~@84, ~@57 b3@39 ~@58 a3@20 ~@37 e2@13]/7", // E5 E D# C# E5 A F#5 B …
  F: "[~@6 d#4@17 [c#2,c#4]@19 [e2,g#3]@20 [f#1,f#2,f#3,a3,c#4]@18 [a1,a3]@20 ~ [b3,d#4]@24 [e2,e4]@35, ~@23 e4@39 ~@38 [b1,b2,f#4]@26 ~@34]/5", // C# E F#m A B E B5
  G: "[~@5 [g#3,c#4,e4]@24 ~ f#4@11 [g#3,b3,d#4]@14 ~ [a3,e4]@18 [b3,d#4,f#4]@14 [g#3,b3,d#4]@8, ~@29 [b3,d#4]@12 ~@14 c#4@19 ~@22]/3", // C#m G#m A5 B G#m B
  H: "[~@4 [a3,c#4,e4]@17 ~ f#4@16 [g#3,b3,d#4]@12 [a3,c#4,e4]@32 [g#3,c#4,e4]@26 [b3,d#4,f#4]@14 [g#3,b3,d#4]@12 ~ [a3,e4]@20 [b3,d#4,f#4]@14 [g#3,b3,d#4]@10 [a3,c#4,e4]@18 ~@3 [b3,d#4,f#4]@16 [g#3,b3,d#4]@8, ~@21 [b3,d#4]@16 ~@97 c#4@21 ~@69]/7", // A G#m A C#m B G#m A5 B …
  I: "[~@5 [g#3,c#4]@36 ~@23, ~@5 e4@7 ~@52]/2", // C#5
  J: "[~@9 [e2,e3,g#3,e4]@21 [d#2,d#3,f#3,d#4]@16 ~ c#4@18 [e2,e3,b3]@19 [a1,a2,a3,c#4]@16 ~ [f#2,f#3,a3,c#4]@18 [b1,b2,b3,d#4,f#4]@38 [e2,e3,g#3,b3,e4]@17 ~ [d#3,f#3,b3,d#4]@16 [c#2,c#3,g#3,c#4]@17 ~ [e3,g#3]@15, ~@9 b3@37 e4@56 ~@89 e4@33, ~@23 g#3@19 ~@70, ~@46 [c#2,c#3]@20 ~@34 f#1@19 ~@55 d#2@18 ~@16 [e2,b3]@16]/7", // E D#m E5 A F#m B E B …
  K: "[~@4 [f#2,f#3,a3,c#4]@17 [a1,a2,e3,a3,c#4]@19 [b1,b2,b3,d#4,f#4]@24, ~@3 f#1@19 ~@42]/2", // F#m A B
  L: "[~@3 e3@38 ~@3 [c#2,c#3,c#4,e4]@28 [e2,e3,g#3,b3,e4]@30 ~ a1@29 [b1,b2,f#3,b3,d#4]@28, ~ e4@43 ~@116, ~ e2@40 ~@61 [a2,a3,c#4,e4]@30 ~@28, ~@2 [g#3,b3]@39 ~@119]/5", // C#m E B A G#m
  M: "[~@2 [c#2,c#3,e4]@27 ~ e3@27 ~ [f#3,a3]@17 [g#2,g#3,b3,d#4,g#4]@21, ~ [g#3,c#4]@28 [e2,g#3,b3,e4]@28 [f#2,c#4,f#4]@18 ~@21]/3", // C#m F#m G#m C#5 E F#5
  N: "[~@7 [a1,a2,a3,c#4,e4]@17 ~ b3@30 ~ c#3@28 [e2,e3,g#3,b3,e4]@31 [a1,a2,a3,c#4,e4]@30 ~ b3@27 [c#2,c#3,g#3,c#4,e4]@28 [b1,b2,f#3,b3,d#4]@30 [e2,g#3,e4]@16 [d#2,f#3,d#4]@9, ~@24 [b1,b2,f#3,d#4]@31 [c#2,g#3,c#4,e4]@30 ~@60 [b1,b2,f#3,d#4]@29 ~@57 b3@25]/8", // A E A C#m B E D#m B …
  O: "[~@8 [c#2,c#4]@18 [e2,b3]@18 ~ [a1,a3]@16 [f#1,f#3,a3,c#4]@18 ~ b1@37 ~@17 [d#2,f#3,d#4]@18 ~ c#4@17 [e2,b3]@20 [f#1,f#3]@17 ~ a1@16, ~@8 e4@54 ~@55 [e2,g#3,e4]@20 ~@15 c#2@19 ~@19 [a3,c#4]@34, ~@8 g#3@36 c#4@16 ~@19 [f#3,b3,d#4]@39 ~@34 [g#3,e4]@39 ~@16 e3@17]/7", // C# E5 A F#m D#m E5 F# E …
  P: "[~ [b1,b3,d#4,f#4]@23 [e2,g#3,b3,e4]@33 ~@7]/4", // B E
})).s("gm_pad_new_age").gain(0.2)

// chords · pad new age · "pad" · soft notes
const pad_new_age_soft = note("<~ A B ~@3 C@2 D@3 E@2 F@8 G@4 H@4 ~@9 I@2 ~@10 J@2 ~@16 K@2 ~@6>".pickRestart({
  A: "~ g#2@20 ~@11", B: "~@10 g#2@21 ~", C: "[~@30 e3@11 d#3@20 ~@3]/2",
  D: "[~@8 c#3@11 ~@10 e3@11 ~@10 a2@10 f#3@23 ~@13]/3", E: "[~@27 [e3,g#3]@20 ~ d#3@16, ~@47 b3@17]/2",
  F: "[~@2 [c#3,g#3]@20 ~ e3@20 ~ c#3@19 e3@19 ~ b3@26 g#3@44 ~@38 c#3@20 ~@25 a2@16 ~@4, ~ e4@42 f#3@20 ~@19 b2@27 ~@147, ~@22 g#3@22 ~@109 g#3@77 ~@5 e3@16 ~@5]/8", // C#5
  G: "[~@13 [b2,f#4]@40 ~@5 e3@12 [d#2,d#3,f#3,b3]@17 ~@19 e3@20 ~@2, ~@87 g#3@18 b3@21 ~@2, ~@22 c#3@5 ~@5]/4", // B5 B
  H: "[~@16 [a2,e3,c#4]@21 ~@24 [e3,g#3,b3]@36 ~@31]/4", I: "[~@12 e4@29 ~@23]/2", J: "[~@3 g#3@7 ~@6]/2",
  K: "[~@21 b3@36 ~@7]/2",
})).s("gm_pad_new_age").gain(0.1)

stack(piano, piano_soft, pad_new_age, pad_new_age_soft)

More by Enya