Strudelify

Oriel Window

Enya

KeyC majorTempo98 bpm
0:00/0:00
// Oriel Window — Enya
// 98 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 55 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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("<A@7 B@2 C@6 D@6 E@3 F@5 G@5 H I@6 J@5 K@2 L@7>".pickRestart({
  A: "[~@66 g4@6 ~@12 d4@7 ~@66 g4@6 ~@13 d4@6 ~@50 g4@46 ~@36 c3@6 d4@2 ~@9 [g3,c4]@5, [f2,c3,f3]@72 [g2,d3,g3,b3]@20 ~@11 g4@18 g4@18 g4@18 ~@6 g3@19 a3@18 a3@18 ~ a3@59 a3@19 f2@24 ~@4 d3@11, a3@18 a3@18 a3@18 a3@18 ~@19 [f2,c3,f3]@74 ~@17 [f2,c3,f3]@96 ~ f2@11 g4@13 c3@6 [f3,e4]@12 ~@3 d4@12, ~@6 c4@18 c4@18 c4@18 c4@12 ~@6 c4@14 ~@4 c4@19 c4@18 c4@18 ~ c4@13 ~@5 c4@13 ~@4 c4@19 c4@19 c4@53 ~@6 c4@36 g2@16, ~@12 g4@18 g4@18 g4@18 ~@25 a3@18 a3@18 a3@18 a3@19 [g2,d3,b3]@19 ~@11 g4@19 g4@19 ~@52 c3@6 f3@6 f4@24 ~@2 e4@14]/7", // C5 F5 G F5 Fmaj7 G
  B: "[~ d4@6 ~@40 c4@6 ~@18 c4@6 ~@11 d3@6 d4@2, ~@7 [a2,e4]@23 f2@12 f3@12 ~@5 b2@18 ~@6 a#2@13, ~@13 [e3,c4]@17 ~@5 c3@18 [e2,g3]@24 [d2,f3]@19, ~@19 g3@11 ~@11 b3@12 ~@43, ~@24 a3@29 ~@12 e3@12 ~@19]/2", // A5 C Em Dm
  C: "[~@21 [d3,g3]@6 ~@40 f3@5 ~@17 [d3,d4]@6 ~@40 e4@5 ~@18 c4@5 ~@18 e3@6 ~@40 f3@6 d4@2 ~@14 [d3,d4]@6 ~@29 c3@4, ~@4 [g2,c4]@23 f2@11 g4@18 f3@5 e4@11 d4@12 g3@11 ~@11 g3@11 ~@12 c4@12 ~@11 g3@11 c4@24 f2@11 f3@6 [f2,f4]@6 c3@11 e4@12 ~@2 e4@20 ~@17 a3@16, ~@10 d3@11 ~@6 a3@46 g2@22 [a2,e4]@22 f2@23 ~ g2@24 ~@4 g2@19 ~@5 c3@6 g4@34 ~@5 d3@5 g3@11 ~@6 [e3,c4]@17 f2@11, ~@16 b3@12 ~@5 c4@41 ~@9 c4@11 ~@6 c4@12 a3@29 ~@5 d3@18 ~@11 c3@13 ~@5 c4@40 ~@4 d4@7 c4@11 ~@11 g3@12 ~@10, ~@33 c3@5 f3@6 [f2,f4]@30 ~@4 d3@11 ~@12 e3@16 ~@6 c3@17 d4@24 ~@23 a3@46 g2@21 ~ [a2,e4]@23 ~@10]/6", // G5 D C5 F A5 C F A5
  D: "[~@7 c4@6 ~@16 c4@6 ~@17 d4@6 ~@17 g3@6 ~@40 f3@5 ~@11 [g3,g4]@6 ~@22 [e3,d4]@6 ~@11 [f3,e4]@6 ~@22 d3@6 ~@17 e3@5 ~@11 [f3,e4]@6 ~@23 b3@5 [e2,b3]@5, ~ b3@12 g3@22 ~@11 d3@12 ~@6 d3@17 ~@5 c4@17 c3@6 f3@6 e4@12 ~@16 e4@17 e4@11 ~@28 g3@17 ~@11 c3@12 ~@5 c3@12 ~@4 d3@23 ~@5, ~@2 f3@12 ~@4 b2@17 [d2,f3]@24 ~@11 b3@11 a3@46 ~@5 d3@12 ~@5 e3@16 ~@12 c3@12 ~@5 d3@16 ~@11 g2@18 ~@16 [g2,d4]@29 ~@4, ~@24 e3@11 ~@5 a#2@18 [g2,c4]@23 f2@11 g4@35 ~@28 a3@17 ~@16 [g2,d4]@28 [c2,c4]@23 ~@33 c4@11 ~@5, ~@86 c3@6 f3@5 [f2,f4]@29 [g2,d4]@17 a2@28 [f2,c4]@18 ~@16 c4@11 ~@22 [f2,c4]@18 ~@11 g3@10 g3@6 ~@5]/6", // G E7 Fmaj7 E5 Dm G5 C5 G5 …
  E: "[~@6 [e3,c4]@6 ~@12 a3@5 ~@6 [e3,c4]@5 ~@18 d4@6 ~@18 b2@6 ~@16 [c3,f4]@6 ~@18 [d3,d4]@5 ~@6 e3@5, b2@12 a2@29 ~@5 d3@18 [e2,g4]@24 [f2,a3]@22 d4@17 ~@17, ~@12 a3@11 ~@6 a3@11 ~@12 [g3,c4]@13 ~@11 e3@12 ~@6 c4@17 ~@11 [g3,c4]@11 ~@11, ~@18 e3@17 ~@5 [g2,b3]@25 ~@5 b2@12 ~@11 c3@11 ~@6 g2@23 [a2,c4]@11, ~@99 [f3,e4]@12 ~@5 d3@12 ~@16]/3", // C F5 D Em F C5 G Am …
  F: "[~@6 [e3,c4]@6 ~@18 g3@6 ~@17 [a2,c4]@6 ~@17 [d3,a3]@5 ~@18 [b2,c4]@6 ~@19 [c3,c4]@5 ~@18 d3@6 ~@16 [c3,c4]@6 ~@20 d3@8 ~@21 g2@6 ~@6 c3@4, ~ [g2,b3]@11 a3@23 ~@35 g3@12 ~@11 [e3,b3]@12 ~@6 c3@13 ~@11 d3@12 ~@11 c3@11 ~@6 [g2,b3]@28 ~@6 g2@14 ~@7 [f2,a3]@10, ~@13 f2@23 [d2,a3]@23 ~@23 e2@24 ~@35 [g3,e4]@12 ~@11 [f3,b3]@12 ~@5 d3@13 d4@9 ~@37, ~@18 c3@17 ~@7 a2@11 ~@6 [g2,b3]@24 ~@4 b2@11 ~@7 a2@24 g2@23 ~ [f2,a3]@23 ~@27 [c2,e4]@28 ~@9, ~@25 f3@11 ~@12 [d3,d4]@12 ~@5 d3@11 ~@5 b3@12 ~@12 a3@13 [e3,a3]@11 b3@17 b3@7 ~@35 [g3,c4]@16 ~@12 c3@14 ~@10]/5", // C Am D5 Cmaj7 C G E5 G …
  G: "[~@10 c4@6 ~@23 c4@8 ~@95 e4@11 ~@17 [d3,d4]@5 ~@42 c4@6 ~@12 e3@5, ~@3 [e2,g3]@13 [g2,b3]@31 c2@58 f2@6 c4@42 d4@3 e4@19 ~@12 g3@11 ~@25 [e2,g3]@17, ~@23 d3@24 c4@19 e3@88 ~@4 d3@6 [g3,c4]@12 ~@5 [e3,c4]@17 ~@13 [f3,b3]@13 ~@16, ~@31 g3@17 ~@6 g2@57 c3@5 g4 f3@5 [f2,f4]@32 g2@22 ~@17 a3@31 ~@16, ~@60 c3@12 g3@6 [c3,c4]@27 a3@49 ~@5 d4@11 ~@5 [a2,e4]@23 ~@18 c3@8 ~@16]/5", // D Em G Em C5 C Fdim F …
  H: "~ c4@6 ~@18 d4@5 ~@13 b3@5, ~@7 f3@23 [g2,c4]@18, ~@8 d2@23 ~@17, ~@13 a#2@18 ~@17, ~@19 d3@12 ~@5 d3@12", // C5
  I: "[~ g3@6 ~@36 e4@11 ~@17 [d3,d4]@6 ~@42 e4@6 ~@20 c4@7 ~@19 g2@7 ~@43 f3@6 d4@2 ~@15 [d3,d4]@5 ~@36 f3@3, ~@7 a3@29 f3@12 ~@6 d4@17 ~@12 c4@18 ~@11 c4@13 [g2,d4]@28 ~@5 g2@13 ~@13 c3@6 f3@5 f4@21 e4@11 g2@21 ~ a2@18 a3@21, ~@7 f2@11 g4@37 ~@11 [g3,c4]@11 ~@12 g3@6 a3@31 ~@11 g3@15 ~@26 a3@50 ~@4 [d3,d4]@12 ~@11 [e3,c4]@18 ~@6 c3@9, ~@12 c4@43 g2@22 [a2,e4]@23 f2@26 ~@52 f2@12 g4@38 ~@2 e4@19 ~ e4@23 ~@15, ~@12 c3@6 f3@6 [f2,f4]@32 ~@4 d3@11 ~@11 e3@18 ~@6 c3@20 ~@5 d3@22 ~@12 c3@14 ~@5 c4@44 ~@10 [g3,c4]@11 ~@12 g3@12 ~@11 b3@4]/6", // D G5 C5 D C A5 F C5
  J: "[~@2 [c3,c4]@6 ~@19 c4@6 ~@17 d4@6 ~@17 g3@6 ~@40 e4@5 ~@12 [g3,g4]@5 ~@23 d4@6 ~@11 [f3,e4]@6 ~@18 c4@12 ~@18 g2@5, ~@8 g3@25 ~@34 b3@12 a3@17 f4@12 f3@5 f4@11 ~@17 e4@18 e4@12 ~@28 g3@19 ~@22, ~@9 e2@24 [d2,f3]@24 ~@28 c3@5 f3@6 f2@28 [g2,d4]@17 a2@29 [f2,c4]@18 ~@29 [c2,c4]@23, ~@15 b2@18 ~@5 a#2@18 [g2,c4]@24 f2@10 g4@34 ~@29 a3@18 ~@16 [g2,d4]@31 ~@5 g2@12 ~@5, ~@21 e3@11 ~@12 d3@12 ~@5 d3@11 ~@13 c4@39 ~@23 e3@15 ~@14 c3@12 ~@4 d3@19 ~@18 c3@11]/5", // C G Fmaj7 Dm G5 F5 C C5 …
  K: "[~@46 d3@9 [c2,g3]@41, ~ [f2,c4]@18 d4@38 ~@39, ~@7 c3@11 c3@7 g2@32 ~@39, ~@6 f3@7 ~@3 d3@7 ~@25, ~@13 e4@14 ~@12 [g3,c4]@16 ~@41]/2", // C5 F5 C5
  L: "[~@77 g4@5 ~@12 d4@6 ~@64 g4@6 ~@11 d4@6 ~@56 g4@64 ~@29, ~@12 [f2,c3,f3]@71 ~@17 [f2,c3,f3]@71 ~@16 f3@96 ~@53, ~@12 a3@18 a3@17 a3@18 a3@17 [g2,d3,g3,b3]@18 ~@11 g4@18 g4@17 g4@18 ~@24 a3@12 g4@13 c4@14 a3@79 ~@30, ~@18 c4@18 c4@17 c4@18 c4@11 ~@6 c4@12 a3@17 a3@18 a3@17 a3@18 [g2,d3,g3,b3]@19 ~@5 c4@13 a3@13 g4@15 c4@72 ~@29, ~@24 g4@17 g4@18 g4@18 ~@29 c4@17 c4@18 c4@17 c4@12 ~@5 c4@13 [f2,c3]@96 ~@52]/7", // F5 G F5
})).s("gm_piano").gain(0.36)

// chords · piano · soft notes
const piano_soft = note("<~@7 A ~@2 B C D E ~ F ~@14 G@3 H@2 I@2 J K L M@2 N O P Q ~ R@2 ~@6>".pickRestart({
  A: "~ d3@6 ~@41", B: "~@2 c3@23 ~@23", C: "~@11 f3@4 ~", D: "~@5 c2@6 ~", E: "~@24 f3@11 ~@13", F: "~@13 e2@22 ~@13",
  G: "[~@88 f3@11 f3@6 ~@39, ~@20 g3@33 ~@19, ~@81 c3@25 ~@38]/3", H: "[~@13 c3@11 ~@13 b2@18 ~@41, ~@7 f2@25 ~@64]/2",
  I: "[~@48 f3@7 ~@41, ~@30 c3@25 ~@41]/2", J: "~@17 f3@13 ~@18", K: "~@8 [c2,e3,c4]@27 ~@13",
  L: "~@17 f3@12 ~@19, ~ f2@8 ~@3, ~@10 c3@25 ~@13", M: "[~@33 f2@25 ~@38]/2", N: "~@25 d3@6 ~@17",
  O: "~@23 f3@6 ~@5 d3@11 ~@3, ~@6 c3@23 ~@19", P: "~@6 e3@3 ~@7", Q: "~@19 d3@7 ~@22", R: "[~@7 [e3,c4]@53 ~@36]/2",
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)

More by Enya