Strudelify

Na Laetha Geal M'Oige

Enya

KeyB♭ majorTempo93 bpm
0:00/0:00
// Na Laetha Geal M'Oige — Enya
// 93 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 53 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(93/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 · "A.PIANO 1"
const piano = note("<A@4 B@4 C D@8 E@2 F@4 G@7 H@8 I@2 J@3 K@3 L@3 M@2 ~@2>".pickRestart({
  A: "[~@21 eb4@2 ~@27 bb3@7 ~@19 bb4@7 ~@25 eb4@5 ~@53 d4@5 ~@13 eb3@6 g3@2, ~ bb2@56 ab4@26 f4@22 d4@8 f4@22 eb4 f4@35 [eb2,eb4]@21, ~ f4@22 f4@35 ab2@26 bb2@29 bb2@59 ~@5 bb2@15, ~@8 f3@19 d4@32 ~@11 ab3@15 ~@13 bb3@17 ~@13 bb3@11 eb4@24 c4@10 ~@19, ~@15 bb3@9 eb4@11 bb3@8 f3@16 ~@5 eb3@21 ~@5 f3@24 ~@7 f3@19 d4@7 bb3@25 ~@20]/4", // Eb
  B: "[~@25 d4@8 ~@25 f4@8 ~@45 bb3@7 ~@18 bb4@7 ~@24 eb4@4 ~@8 f3@11 d4@2, ~@4 [c2,eb4]@29 [f2,c4]@34 ~@5 f3@18 d4@29 ~@11 ab3@14 ~@12 bb3@15 [bb2,eb4]@21, ~@11 g2@23 ~@32 f4@18 eb4 f4@12 bb3@7 f3@15 ~@5 eb3@20 ~@5 f3@23 ~@20, ~@19 c3@15 ~@6 c3@26 bb2@53 ~@24 [bb2,f4]@30 ~@19, ~@78 bb3@9 eb4@31 [ab2,ab4]@26 ~@19 d4@9 ~@20]/4", // Cm F5 Eb5 Bb5 Ab
  C: "~@2 c4@7 ~@20 c4@7 ~@6 d3@6, ~@3 [eb2,bb3]@9 [g2,d4]@4, ~@23 eb3@14 ~@11", // Eb5 G5
  D: "[~@8 eb4@5 ~@21 c4@7 ~@38 bb3@7 ~@18 eb4@7 ~@22 g4@6 ~@65 eb4@5 ~@19 db4@6 ~@20 c4@8 ~@35 bb3@6 ~@19 eb4@6 ~@21 g4@6 ~@22 f4@7, g3@13 d4@28 bb3@38 ~@7 [ab2,ab4]@26 ~@6 bb2@21 db3@20 ab4@2 g4@5 f4@6 eb2@39 ~@5 f3@20 ~@5 eb3@21 bb3@35 ~@6 [ab2,ab4]@25 [eb2,eb4]@27 db3@18 ab4@2 g4@9, ~@14 f2@28 bb1@45 ~@14 f4@11 ~@19 f4@8 ab4@18 bb4@14 eb4@30 g4@10 ~@10 bb3@14 ~@13 ab3@15 ~@14 eb3@27 ~@6 eb3@19 ~@6 bb2@20 ab4@17 bb4@12, ~@21 c3@22 ~@6 f2@38 ~@10 ab3@14 [eb2,eb4]@29 ~@12 ab3@21 ~@23 ab4@15 ~@14 eb4@9 [ab2,eb4]@29 ~@7 bb2@34 ~@11 ab3@14 ~@14 eb3@13 ~@6 f3@22, ~@63 d3@24 ~@5 eb3@20 ~@14 eb3@14 ~@6 f3@27 ~@6 bb2@30 [bb2,f4]@26 ~@27 eb2@42 ~@15 f4@10 ~@17 f4@10 ~@12 ab3@16]/8", // Ab Eb Ab5 Bb5
  E: "[~@34 eb4@5 ~@18 db4@6 ~@21 c4@8 [eb2,bb3]@4, ~@2 eb2@38 ~@5 f3@19 ~@6 eb3@23 ~@3, ~@9 bb2@30 [bb2,f4]@26 ~@31, ~@25 ab4@15 ~@14 eb4@9 [ab2,eb4]@30 ~@3, ~@29 g4@11 ~@11 bb3@13 ~@13 ab3@16 ~@3]/2", // Eb5 Bb5 Ab5
  F: "[~@4 bb2@8 ~@38 f4@8 ~@20 eb4@2 ~@26 bb3@7 ~@18 bb4@7 ~@25 eb4@4 ~@8 f3@15 c4@2, ~@12 c4@46 ~ f4@21 f4@34 ~@24 [bb2,f4]@30 [bb2,eb4]@24, ~@13 f2@46 ~@7 f3@18 d4@30 ~@5 eb3@20 ~@6 f3@23 ~@24, ~@20 c3@38 ~ bb2@32 bb3@7 f3@15 [ab2,ab4]@27 ~@20 d4@8 ~@24, ~@72 bb3@9 eb4@32 ~@12 ab3@14 ~@13 bb3@16 ~@24]/4", // Bb5 Eb5 Ab
  G: "[~@26 c4@6 ~@18 eb4@6 ~@21 c4@8 ~@55 f4@9 ~@34 bb3@16 bb3@7 ~@19 bb4@7 ~@25 eb4@4 ~@53 d4@5 ~@13 eb3@4, ~@6 [eb2,bb3]@26 [g2,d4]@25 ~@6 c3@22 ~@7 f2@58 bb2@56 [ab2,ab4]@26 [bb2,f4]@30 bb2@57 [eb2,eb4]@17, ~@14 bb2@19 ~@11 g3@12 ~@14 f3@15 ~@14 bb2@17 f3@34 f4@18 eb4@2 f4@38 ~@45 d4@9 ~@12 bb3@10 eb4@26 c4@9 ~@17, ~@21 eb3@12 ~@5 d3@18 [f2,d4]@29 [bb1,bb3]@66 ~@11 bb3@10 eb4@36 ~@11 ab3@14 ~@13 bb3@15 f4@19 eb4@2 f4@36 ~@18, ~@107 d3@44 ~@5 f3@19 d4@33 ~@4 eb3@20 ~@7 f3@22 ~@7 f3@18 d4@8 bb3@25 ~@6 bb2@11]/7", // Eb5 G5 Ab Bb5 Eb Dm Bb
  H: "[~ g3@6 ~@21 d4@7 ~@24 f4@8 ~@44 bb3@7 ~@18 bb4@7 ~@24 eb4@4 ~@22 c4@8 ~@21 c4@6 ~@18 eb4@6 ~@21 c4@8 ~@43 bb3@7 ~@19 eb4@6 ~@21 g4@7, ~@7 eb4@28 ~@15 f3@17 f4@18 eb4@2 f4@32 ~@24 [bb2,f4]@29 [bb2,eb4]@30 ~@6 bb2@21 ~@11 g3@13 ~@13 f3@16 bb1@49 [ab2,ab4]@26 ~@6 bb2@21, ~@14 g2@21 [f2,c4]@32 ~@6 f3@18 d4@7 bb3@6 f3@14 ~@6 eb3@20 ~@6 f3@21 ~@8 f3@23 ~@13 eb3@14 ~@5 d3@18 ~@6 c3@25 ~@13 bb2@36 ~@11 ab3@14 ~@13 eb3@14, ~@21 c3@14 ~@7 c3@25 bb2@51 [ab2,ab4]@27 ~@19 d4@8 ~@18 d4@12 ~@26 [g2,d4]@24 [f2,d4]@31 ~@6 f2@44 ~@14 f4@10 ~@17 f4@10, ~@78 bb3@11 eb4@30 ~@11 ab3@14 ~@13 bb3@15 ~@29 [eb2,bb3]@28 ~@52 bb3@22 d3@30 ~@4 eb3@19 [eb2,eb4]@28]/8", // Bb5 Eb5 Ab F5 Ab G5 Dm Eb5 …
  I: "[~@25 f4@7 ~@58 db4@6, db3@19 ab4@2 g4@11 eb2@33 eb4@8 ~@9 bb3@14, ab4@17 bb4@15 eb4@25 ab4@13 [bb2,f4]@26, ~@6 f3@27 ~@7 bb2@21 g4@12 ~@12 eb4@11, ~@13 ab3@20 ~@15 eb3@25 ~@4 f3@19]/2", // Bb5
  J: "[~@20 c4@7 ~@30 bb3@7 ~@18 eb4@6 ~@20 g4@6 ~@22 [ab3,f4]@8, [ab2,eb4]@27 eb2@36 ~@16 f4@9 ~@17 f4@9 ab4@12 ab3 ab4 g4@16, ~@7 eb3@20 bb3@30 ~@19 ab3@13 ~@13 eb3@13 ~@6 f3@23, ~@14 ab3@14 ~@7 bb2@29 [ab2,ab4]@25 ~@5 bb2@20 db3@30, ~@43 eb3@21 ~@6 eb3@18 [eb2,eb4]@27 ~@10 bb4@19]/3", // Db Ab5 Ab Eb
  K: "[~@31 eb4@6 ~@18 db4@7 ~@19 c4@9 ~@7 bb2@9 ~@31 f4@7, ~ eb2@37 ~@5 f3@19 ~@6 eb3@22 ~@16 [f2,a3,c4]@38, ~@2 eb4@29 ~@6 [bb2,f4]@25 [ab2,eb4]@28 [eb2,g3,bb3]@17 ~@37, ~@22 ab4@16 ~@15 eb4@9 ~@82, ~@27 g4@11 ~@11 bb3@13 ~@13 ab3@15 ~@23 c3@31]/3", // F Bb5 Ab5 Eb
  L: "[~@20 eb4@2 ~@12 bb3@15 bb3@7 ~@18 bb4@7 ~@27 eb4@5 ~@23 c4@8, ~ bb2@55 [ab2,ab4]@27 ~@21 d4@9 [bb2,eb4]@31, ~ f4@21 f4@34 ~@25 [bb2,f4]@33 ~@30, ~@8 f3@18 d4@30 ~@6 eb3@21 ~@6 f3@26 ~@6 f3@23, ~@14 bb3@9 eb4@33 ~@12 ab3@15 ~@13 bb3@18 ~@18 d4@12]/3", // Ab Eb5 Bb5
  M: "[~@21 c4@7 ~@22 eb4@8 ~@24 c4@12 ~@2, [eb2,bb3]@14 ~@4 d3@11 [f2,a3]@18 ~, ~@16 eb3@13 [bb3,d4]@29 ~@38, ~@43 g3@15 ~@38]/2", // Eb5 F Bb
})).s("gm_piano").gain(0.43)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@3 A ~ B ~@2 C D E ~ F@2 ~@3 G ~ H@2 ~ I@2 ~@2 J@2 ~ K L ~@5 M ~@6 N ~ O P@2 ~ Q@4
>`.pickRestart({
  A: "~@12 f3@17 ~@19", B: "~ f3@18 ~@29", C: "~@16 bb2@21 ~@11", D: "~@27 f3@16 ~@5", E: "~@8 bb2@31 ~@9",
  F: "[~@42 eb3@25 ~@29]/2", G: "~@9 eb3@11 ~@4, eb4@17 ~@7", H: "[~@29 f3@30 ~@37]/2", I: "[~@43 d4@12 ~@41]/2",
  J: "[~@47 f3@17 ~@32]/2", K: "~@14 f3@17 ~@17", L: "~@8 c2@27 ~@13", M: "~@11 f3@11 ~@2",
  N: "~@8 eb3@11 ~@5, ~@9 bb2@28 ~@11", O: "~@13 f3@11", P: "[~@21 f3@7 ~@20]/2",
  Q: "[~@8 bb2@21 g2@28 ~@17 f3@18 ~@10 bb2@66 ~@24, ~@19 d4@12 [d3,f3]@25 ~@8, ~@29 f3@8 ~@9 bb3@38 ~@12, ~@66 c3@28 bb1@75 ~@23]/4", // Dm
})).s("gm_piano").gain(0.21)

// chords · pad new age · "FANTASIA"
const pad_new_age = note("<A@5 B@3 C D@3 E@8 F@6 G@8 H@4 I@5 J@3 K@7>".pickRestart({
  A: "[[bb2,d4,f4]@58 [ab2,c4]@25 ~ bb2@29 [bb2,d4,f4]@58 [eb2,bb3]@25 [c3,c4]@29 a3@15, ~@83 d4@29 ~@59 eb4@55 ~@14]/5", // Bb Ab Bb Eb5 C
  B: "[~@19 [bb2,d4]@50 ~ [ab2,ab3,c4]@25 [bb2,bb3,d4]@49, ~@23 eb4@9 ~@16]/3", // Bb Ab Bb
  C: "~@5 [eb2,g3,eb4]@13 [g2,g3,bb3,d4]@6", // Eb Gm
  D: "[~@14 c4@28 ~ d4@43 ~ [ab2,ab3,c4]@24 [eb2,bb3]@28 ~ db4@4, ~@13 f2@29 [bb2,bb3]@44 eb4@54 ~@4, ~@14 f3@74 ~@51 db2@5]/3", // Ab Eb5 Bb
  E: "[~@29 [bb3,eb4]@37 [bb2,bb3,db4,f4]@25 [ab2,ab3,c4]@26 [eb2,g3,bb3]@43 [ab2,ab3,c4]@24 [eb2,g3,bb3]@27 [db3,ab3,db4,f4]@28 ~ [g3,eb4]@38 ~ [bb2,bb3,f4]@24 ~ [ab3,c4]@27 [eb2,g3,bb3]@17 [f2,a3,c4]@36, ~@28 [eb2,g3]@38 ~@25 eb4@109 ~@39 [eb2,bb3]@39 db4@25 ab2@29 ~@52, ~@152 eb4@23 ~@17]/8", // Eb5 Bbm Ab Eb Ab Eb Db Cm …
  F: "[~@11 [bb2,bb3,d4,f4]@54 [ab2,c4,eb4,ab4]@26 [bb2,bb3,d4,f4]@58 ~ g3@26 ~ g3@23 [f2,a3,c4]@28 [bb1,bb3,d4]@60, ~@149 [eb3,bb3,eb4]@27 [g2,bb3,d4]@24 f3@88]/6", // Bb Ab Bb F Bb Eb5 Gm
  G: "[~@5 [bb1,f3,d4]@57 [ab2,ab3,c4,eb4]@26 [bb1,f3,bb3,d4]@29 ~ bb1@56 [eb2,eb3,bb3]@25 [c2,c3,c4]@28 [f2,f3,a3,c4]@32 ~ [f3,bb3,d4]@50 [ab2,ab3,c4,eb4]@24 ~ [f3,bb3,d4]@49, ~@4 bb3@59 ~@54 [f3,bb3,d4]@57 [g3,eb4]@54 ~@31 [bb1,bb2]@52 ~@23 bb1@50]/8", // Bb Ab Bb Eb5 C F Bb Ab …
  H: "[~@9 [eb2,eb3,g3,bb3,eb4]@28 [g2,g3,bb3,d4]@23 [f2,f3,a3,c4]@28 [bb1,bb2,f3,bb3,d4]@51 ~ [ab3,c4]@23 [eb2,eb3,g3,bb3]@29, ~@139 [ab1,ab2]@26 ~@27, ~@35 eb4@13]/4", // Eb Gm F Bb Ab Eb Ab
  I: "[[db2,db3,ab3,db4,f4]@31 [eb2,eb3,g3,bb3,eb4]@39 [bb1,bb2,bb3,db4,f4]@24 ~ [ab3,c4]@28 ~ [eb2,g3,bb3]@36 [ab1,ab2,ab3,c4]@24 [eb2,eb3,g3,bb3]@26 ~ [db3,ab3,db4,f4]@29, ~@94 eb4@111 ~@35, ~@94 [ab1,ab2]@29 eb3@37 ~@50 db2@30]/5", // Db Eb Bbm Ab Eb Ab Eb Db …
  J: "[[eb2,eb3,g3,bb3,eb4]@38 [bb1,bb2,bb3,db4,f4]@24 [ab1,ab2,ab3,c4]@27 [eb2,eb3,g3,bb3]@16 [f2,a3,c4]@39, ~@62 eb4@45 ~@37]/3", // Eb Bbm Ab Eb F
  K: "[~@3 [bb1,bb2,bb3,d4,f4]@53 ~ c4@25 [bb1,bb2,bb3,d4,f4]@61 [eb2,eb3,g3,bb3,eb4]@29 [g1,g2,g3,bb3,d4]@29 [f1,f2,f3,a3,c4]@33 ~ bb1@61 ~@40, ~@28 [ab1,ab2,ab3,eb4]@13 ~@76 [bb2,f3,bb3,d4]@31 ~@20]/7", // Bb Eb Gm F Ab5 Bb
})).s("gm_pad_new_age").gain(0.35)

// chords · pad new age · "FANTASIA" · soft notes
const pad_new_age_soft = note("<A@7 B@2 C ~ D@2 ~@8 E ~@31>".pickRestart({
  A: "[bb3@58 [ab3,eb4]@25 ~ f4@29 bb3@58 g3@54 ~ f2@33 [bb3,f4]@51 ~@26, ~@83 bb3@30 ~@112 [f3,c4]@34 ~@77]/7", // Ab5 Bb5 F5
  B: "[f3@57 bb3@26 ~@13]/2", C: "~@7 a3@15 ~@2", D: "[~@15 g3@28 [ab3,f4]@35 ~@18]/2", E: "~@17 ab3@28 ~@3",
})).s("gm_pad_new_age").gain(0.17)

stack(piano, piano_soft, pad_new_age, pad_new_age_soft)

More by Enya