Strudelify

The Sun in the Stream

Enya

KeyG majorTempo62 bpm
0:00/0:00
// The Sun in the Stream — Enya
// 62 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 61 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(62/3)

// 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.

// other · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H I J K L M F G N O J P Q ~@18 M F G H R J S T M F U N R J V W X J S Y ~@2
>`.pickRestart({
  A: "g4@3 a4 g4 d4", B: "c4@3 e4 g4 e4", C: "f4", D: "d4@23 ~", E: "g3@15 ~ g4@4 a4@4", F: "b4@3 a4 b4 d5",
  G: "e5 b4 g4", H: "a4@3 g4 f#4 a4", I: "d4@3 ~ e4 f#4", J: "g4 b4 g4", K: "a4@3 g4 f#4@2", L: "e4 ~", M: "~@4 g4 a4",
  N: "a4@6 f#4@2 a4@2 d5 a4", O: "d4@11 ~@5 e4@4 f#4@4", P: "a4@16 d5@6 d#5 ~", Q: "e5 ~", R: "d4@9 ~@7 e4@4 f#4@4",
  S: "a4 g4 f#4", T: "e4@5 ~@7", U: "e5@8 b4@7 ~ g4@8", V: "a4@8 d5@3 d#5", W: "e5@3 ~", X: "~@16 f#4@7 ~",
  Y: "e4@19 ~@5",
})).s("gm_piano").gain(0.22)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  ~ A B C D A E F D G H D I@2 J F D K L D M@2 N O P Q R@4 S@2 T U V W X@2 Y Z I AA D G AB D AC@2 J H AD G L AE AF@3 AE
  AG AH ~
>`.pickRestart({
  A: "~@5 d3, g2, ~ d3@4 ~, ~ g3!2, ~ b3", B: "~@5 g2, c2, ~ g2@4 ~, ~ c3!2, ~ e3",
  C: "~@5 c3, f2, ~ c3@4 ~, ~ f3!2, ~ a3", D: "~@5 a2, d2, ~ a2@4 ~, ~ d3!2, ~ f#3",
  E: "~@20 d2@3 ~, e2@23 ~, ~@4 b2@19 ~, ~@8 e3@8 e3@7 ~, ~@12 g3@11 ~",
  F: "~@20 e3@3 ~, c2@23 ~, ~@4 g2@19 ~, ~@8 c3@15 ~, ~@12 e3@4 g3@7 ~", G: "~@5 f#3, b2, ~ f#3@4 ~, ~ b3!2, ~ d4",
  H: "~@5 e3, c2@23 ~, ~@4 g2@19 ~, ~@8 c3@15 ~, ~@12 e3@4 g3@7 ~",
  I: "~@5 b2, e2@23 ~, ~ b2@4 ~, ~@8 e3@8 e3@7 ~, ~@12 g3@11 ~",
  J: "~@5 d2, e2@23 ~, ~@4 b2@19 ~, ~@8 e3@8 e3@7 ~, ~@12 g3@11 ~",
  K: "~@5 f#3, b2@23 ~, ~ f#3@4 ~, ~@8 b3@8 b3@7 ~, ~@12 d4@11 ~", L: "~@5 e3, c2, ~ g2@5, ~ c3@2, ~@3 e3 g3@2",
  M: "[~@11 b2, e2@23 ~ e2@23 ~, ~ b2@4 b2@2 b2@4 ~, ~@8 e3@8 e3@7 ~@9 e3@8 e3@7 ~, ~@12 g#3@11 ~@13 g#3@11 ~]/2",
  N: "~@5 [d3,d4], g2, [g4,b4]@2 [g3,g4,b4] d4 [g3,g4,b4]@2, ~ d3@4 ~, ~ d4@2 b3@3", // D G
  O: "~@5 [a2,d4], d2@23 ~, [f#4,a4]@8 [d3,f#4,a4]@4 d4@4 [d3,f#4,a4]@7 ~, ~ a2@4 ~, ~@4 d4@8 f#3@11 ~", // D5 F#m D
  P: "~@4 [c3,e4,g4] [g2,c4], c2@11 ~, [e4,g4] [c3,e4,g4] ~, ~ g2@4 ~, ~@2 c4@4 [e3,c4]@5 ~", // C C5 Em C
  Q: "~@4 [d3,d4,f#4] a2, d2@11 ~, [d4,f#4]@4 [d3,d4,f#4]@4 ~@2 a3 ~, ~ a2@4 ~, ~@2 a3@4 [f#3,a3]@5 ~", // D F#m
  R: "[~@16 [b3,f#4,b4]@4 f#3@4 ~@16 [g3,e4,g4]@4 e3 ~@19 [e3,e4,g4]@4 ~@20 [d3,d4,f#4]@4 [a2,a3]@3 ~, b2@21 ~@3 c2@8 [e4,g4]@4 [e3,c4]@8 c4@25 ~@3 [d4,f#4]@4 a3@4 [d3,d4,f#4]@4 [f#3,a3]@10 ~@2, [f#4,b4]@8 [b3,f#4,b4]@8 ~@8 [e4,g4]@4 c4@4 c3@13 ~@7 b2@16 [b2,b3]@26 ~@2, ~@4 f#3@16 ~@8 g2@17 ~@3 e2@21 ~@3 d2@22 ~@2, ~@4 d4@8 d4@8 d4@25 ~@3 [e4,g4]@4 b3@4 [e3,e4,g4]@4 [g3,b3]@9 ~@7 a2@16 ~@4]/4", // B5 C Em D A Em C D …
  S: "[~@4 [g3,g4,b4] ~@5 [d3,f#4,a4] [a2,d4], g2@21 ~@3 d2@22 ~@2, [g4,b4]@2 [g3,g4,b4]@2 ~ d4@2 a2@4 ~, ~@2 d3@8 d3@4 d4@4 [f#3,d4]@5 ~, ~@4 d4@8 [b3,d4]@9 ~@3 [f#4,a4]@8 [d3,f#4,a4]@8 ~@8]/2", // G D D5 G D Bm F#m D
  T: "~@5 [e3,c4], c2@23 ~, [e4,g4]@8 c3@15 ~, ~@4 g2@19 ~, ~@4 c4@4 [e4,g4]@4 [e3,c4]@4 [g3,e4,g4]@7 ~", // C Em C
  U: "~@5 [a2,a3], d2@23 ~, [d4,f#4]@8 [d3,d4,f#4]@4 a3@4 [d3,d4,f#4]@7 ~, ~ a2@4 ~, ~@4 a3@8 f#3@11 ~", // A D
  V: "~@20 [f#3,d#4]@3 ~, b2@23 ~, [f#4,b4]@8 [b3,f#4,b4]@8 [b3,f#4,b4]@7 ~, ~ [f#3,d#4]@2 [f#3,d#4]@2 ~", // D#m B5 D#m
  W: "~@20 [b2,b3]@3 ~, e2@23 ~, [e4,g4]@8 [e3,e4,g4]@4 b3@4 [e3,e4,g4]@7 ~, ~ b2@4 ~, ~@4 b3@8 g3@11 ~", // B Em
  X: "[~@11 [e3,c4,e4], f2@24 [c2,g4,c5]@4 [g2,e4]@4 [c3,g4,c5]@4 [e3,e4]@4 [g3,g4,c5]@7 ~, [a4,c5]@8 f3@39 ~, ~@4 c3@12 [c4,c5]@4 [a3,f4]@27 ~, ~@4 f4@4 [a4,c5]@4 [a3,f4]@4 a4@31 ~]/2", // C C5 C C5 E C5 Am C …
  Y: "~@5 [a2,a3], d2, [d4,f#4]@2 [d3,d4,f#4] a3 [d3,d4,f#4]@2, ~ a2@4 ~, ~ a3@2 f#3@3", // A D
  Z: "~@3 a3 ~ f#3, d2@23 ~, [d4,f#4]@8 [d3,d4,f#4]@15 ~, ~@4 a2@19 ~, ~@4 a3@8 f#3@4 a3@7 ~", // D
  AA: "~@4 g3 e3, c2@11 ~, ~@2 g2@9 ~, ~@4 c3@7 ~, ~@3 e3@2 ~", AB: "~@4 c3 g2, c2@11 ~, ~ g2@4 ~, ~ c3 ~, ~@6 e3@5 ~",
  AC: "[~@11 g3, e2@24 e2@23 ~, ~@4 b2@16 b2@8 b2@19 ~, ~@8 e3@8 e3@16 e3@15 ~, ~@12 g3@24 g3@4 b3@7 ~]/2",
  AD: "~@5 f#3, d2@23 ~, ~@4 a2@19 ~, ~@8 d3@15 ~, ~@12 f#3@4 a3@7 ~",
  AE: "~@20 a2@3 ~, d2@23 ~, ~ a2@4 ~, ~@8 d3@8 d3@7 ~, ~@12 f#3@11 ~",
  AF: "[~@4 b3 ~@5 b3 ~@5 c3 g2, e2@10 e4@8 g#3@4 e4@13 ~, ~@2 b2@9 ~ e2@11 ~ c2@11 ~, ~@4 e3@7 ~@3 b2@9 ~@3 g2@8 ~@2, ~@6 g#3@5 ~@5 e3@7 ~@5 c3@2 e3@5 ~]/3",
  AG: "~@5 e4, e2@2 b3, ~ b2@5, ~ e3@2, ~ g#3", AH: "[e2,b2,e3,g#3,b3,e4]@19 ~@5",
})).s("gm_piano").gain(0.25)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~ A@2 B@2 C@3 D@2 E F G@4 H@2 E I J@2 K I E D@2 L@2 F M@2 E F N O P@2 Q@2 R@2 H@2 E F S@4 H@2 E F J@2 E F T@3
>`.pickRestart({
  A: "[[b3,d4,b4] [c4,e4,c5], g4]/2", B: "[[c4,f4] [d4,f#4], [a3,a4]]/2", C: "[d4 ~ c4, g4, b4@4 ~@5, ~ e4@2]/3",
  D: "[a3 b3, d4]/2", E: "[c4,e4,g4]", F: "[a3,d4,f#4]", G: "[~@3 c4, [e4,g4]]/4", H: "[a3 b3, [d4,f#4]]/2",
  I: "[a3,d4]", J: "[g#3,b3,e4]/2", K: "[b3,d4,g4]", L: "[c4 b3, [e4,g4]]/2", M: "[[b3,g4] [a3,f#4], d4]/2",
  N: "[b3,d#4,f#4]", O: "[b3,e4,g4]", P: "[[a3,f4] [g3,e4], c4]/2", Q: "[a3,d4]/2", R: "[[b3,g4] [c4,g4], e4]/2",
  S: "[b3@3 c4, [e4,g4]]/4", T: "[[g#3,b3,e4]@7 ~@2]/3",
})).s("gm_string_ensemble_2").gain(0.12)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@5 A@2 ~ B@2 ~@2 C@3 ~@4 D ~@3 D ~ B@2 ~@11 B@2 ~@21>".pickRestart({
  A: "b3/2", B: "f#4/2", C: "[b3@35 ~]/3", D: "f#4",
})).s("gm_string_ensemble_2").gain(0.07)

// chords · tubular bells · "TUBULARBEL" · C5 F5 D5
const tubular_bells = note(`<
  [~@23 d5]
  [g5@13 ~@11, d5 ~@11]
  [[g4,c5]@19 ~@5]
  [[c5,f5]@19 ~@5]
  [[a4,d5]@7 ~]
  [g4@13 ~@11]
  ~@55
>`).s("gm_tubular_bells").gain(0.05)

stack(piano, piano_2, string_ensemble_2, string_ensemble_2_soft, tubular_bells)

More by Enya