Strudelify

Book Of Days

Enya

KeyC majorTempo120 bpm
0:00/0:00
// Book Of Days — Enya
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/2 at bar 6, 5/4 at bar 7, 2/4 at bar 8, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 2 "Bass Line" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Full arrangement: all 68 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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@3 B@2 C D@2 E F@2 G H I@2 J K L M N O P@5 Q R@2 S@2 T U V C W X Y@3 Z AA AB AC@2 AA AD AE AF AA AB AC@2 AA AD AE AG
  C D@2 E F@2 AH@3 AI@2
>`.pickRestart({
  A: "[g3@3 c4@3 d4@3 g4@11 ~ f4 ~ g4 g#4@4 g4@4 d#4@4 a#3@8 ~ g3@3, ~@24 c4@11 ~@13]/3", B: "[[e3,g3,c4]@31 ~]/2",
  C: "[c4,e4]@5 ~ [c4,e4]@5 ~ [b3,d4]@3 ~", // C Bm
  D: "[[c4,e4]@3 ~ [d4,f4]@3 ~ [c4,e4]@5 ~ [b3,d4]@5 ~ [c4,e4]@3 ~ [d4,f4]@3 ~ [e4,g4]@4]/2", // C Dm C Bm C Dm Em
  E: "~@2 [d4,f4] [c4,e4] [a3,c4]@5 ~ [a3,c4]@5 ~", // Dm C Am
  F: "[[c4,e4]@3 ~ [b3,d4]@3 ~ [c4,e4]@5 ~ [c4,e4]@5 ~ [b3,d4]@3 ~ [c4,e4]@3 ~ [e4,g4]@3 ~]/2", // C Bm C Bm C Em
  G: "[c4,e4]@5 ~ [b3,d4]@5 ~ [b3,d4]@3 ~", H: "[e4,g4]@3 ~ [d4,f4]@5 ~ [d4,f4]@5 ~",
  I: "[[c4,e4]@3 ~ [a3,c4]@3 ~ [c4,e4]@5 ~ [b3,d4]@5 ~ [a3,c4]@3 ~ [b3,d4]@3 ~ [c4,e4]@4]/2", // C Am C Bm Am Bm C
  J: "~@2 [c4,e4]@5 ~ [b3,d4]@3 ~ [c4,e4]@3 ~", K: "[d4,f4]@3 ~ [c4,e4]@5 ~ [b3,d4]@5 ~",
  L: "[c4,e4]@3 ~ [d4,f4]@3 ~ [e4,g4]@5 ~ [d4,f4] [c4,e4]", M: "[a3,c4]@5 ~ [a3,c4]@5 ~ [c4,e4]@3 ~",
  N: "[b3,d4]@5 ~ [b3,d4]@5 ~ a3@3 ~", O: "c4@3 ~ d4@5 ~ d4@4 c4@2, ~@4 g3@11 ~",
  P: "[d4@3 ~ e4@3 ~ c4@3 ~ g3@3 ~ a3@3 ~ c4@3 ~ d4@5 ~ d4@4 c4@2 d4@3 ~ e4@3 ~ a3@7 ~ a3@3 ~ c4@3 ~ d4@5 ~ d4@4 c4@2 d4@3 ~ g4@3 ~, g3@7 ~ e3@15 ~ b3@11 ~ b3@7 ~ f3@15 ~ g3@11 ~ g3@7 ~]/5",
  Q: "e4@3 ~ c4@3 ~ a3@3 ~ c4@3 ~, g3@15 ~",
  R: "[d4@5 ~ d4@4 c4@2 d4@3 ~ e4@3 ~ a3@5 ~ b3@5 ~, b3@11 ~ b3@7 ~ f3@11 ~]/2",
  S: "[c4@3 ~ d4@3 ~ [c4,e4]@5 ~ [c4,e4]@5 ~ [b3,d4]@3 ~ [c4,e4]@3 ~ [d4,f4]@3 ~]/2", // C Bm C Dm
  T: "[c4,e4]@5 ~ [b3,d4]@5 ~ [c4,e4]@3 ~", U: "[d4,f4]@3 ~ [e4,g4]@5 ~ [d4,f4] [c4,e4] [a3,c4]@4",
  V: "~@2 [a3,c4]@5 ~ [c4,e4]@3 ~ [b3,d4]@3 ~", W: "[c4,e4]@3 ~ [e4,g4]@3 ~ g4@3 ~ b4@3 ~, ~@8 [c4,e4]@7 ~",
  X: "[e4,a4]@5 ~ [f4,a4]@5 ~ [f4,c5,e5]@3 ~, c5@11 ~@5", // A5 F Fmaj7
  Y: "[[g4,b4,d5]@3 ~ [g4,e5]@2 [e4,g4,c5]@13 ~ [c5,e5]@3 ~ [g4,b4,d5]@3 ~ [g4,e5]@2 [e4,g4,c5]@17 ~]/3", // G C G C
  Z: "[d4,g4,b4]@7 ~ [c#4,e4,a4]@7 ~", AA: "[d4,f#4]@7 ~", AB: "[c#4,f#4]@7 ~", AC: "[[d4,f#4]@15 ~]/2",
  AD: "[d4,e4]@7 ~", AE: "[b3,d4]@7 ~", AF: "[c#4,e4]@7 ~", AG: "[c#4,e4]@11 ~@5",
  AH: "[g4@3 ~ b4@3 ~ [e4,a4]@5 ~ [f4,a4]@5 ~ [f4,c5,e5]@3 ~ [g4,b4,d5]@3 ~ [g4,e5]@2 [e4,g4,c5]@13 ~ [c5,e5]@3 ~, [c4,e4]@7 ~ c5@11 ~@29]/3", // A5 F Fmaj7 G C
  AI: "[[g4,b4,d5]@3 ~ [g4,e5]@2 [e4,g4,c5]@21 ~@5]/2", // G C
})).s("gm_piano").gain(0.72)

// bass · electric bass finger · "Bass Line"
const bass = note(`<
  A@3 B@2 C D@2 E F@2 G H I@2 J K L M N O P@5 Q R@2 S@2 T U V C W X Y@3 Z AA AB AC@2 AD AE AF AG AA AB AC@2 AD AE AH AI
  AJ AK AL AM AN AO AP AQ AR AS AT
>`.pickRestart({
  A: "[g3@3 c4@3 d4@3 g4@11 ~ f4 ~ g4 g#4@4 g4@4 d#4@4 a#3@8 ~ g3@3, [c2,g2,c3]@23 ~ [g#2,d#3,c4]@11 ~ [a#2,d3,f3]@11 ~]/3", // C5 G# A#
  B: "[c3!8 c3!8, [e3,g3,c4]@31 ~]/2", C: "c3!6 [c3,b3,d4] c3, [c4,e4]@5 ~ [c4,e4]@5 ~@5",
  D: "[[c3,c4,e4] c3 [c3,d4,f4] c3 g2!4 g2!2 [g2,c4,e4] g2 [f2,d4,f4] f2 e2!2, ~@8 [c4,e4]@5 ~ [b3,d4]@5 ~@9 [e4,g4]@4]/2", // C Dm7 C Dm C Bm Em
  E: "e2@2 [d4,f4] [c4,e4] f2@2 f2@2 f2@2 f2@2 f2@2 f2@2, ~@2 e2@2 [a3,c4]@5 ~ [a3,c4]@5 ~", // Dm C Am
  F: "[[a2,c4,e4] a2 [g2,b3,d4] g2 c3!4 c3!2 [c3,b3,d4] c3 [c3,c4,e4] c3 [c3,e4,g4] c3, ~@8 [c4,e4]@5 ~ [c4,e4]@5 ~@13]/2", // Am G C
  G: "g2!6 [g2,b3,d4] g2, [c4,e4]@5 ~ [b3,d4]@5 ~@5", H: "[g2,e4,g4] g2 d2!6, ~@4 [d4,f4]@5 ~ [d4,f4]@5 ~",
  I: "[[d2,c4,e4] d2 [d2,a3,c4] d2 a2!3 g2 g2!2 [f2,a3,c4] f2 [g2,b3,d4] g2 c3!2, ~@8 [c4,e4]@5 ~ [b3,d4]@5 ~@9 [c4,e4]@4]/2", // C D7 F G C Bm C
  J: "c3!4 [c3,b3,d4] c3 [c3,c4,e4] c3, ~@2 [c4,e4]@5 ~@9", K: "[c3,d4,f4] c3 g2!6, ~@4 [c4,e4]@5 ~ [b3,d4]@5 ~",
  L: "[g2,c4,e4]@2 g2@2 [f2,d4,f4]@2 f2@2 e2@2 e2@2 e2@2 [d4,f4] [c4,e4], ~@8 [e4,g4]@5 ~ e2@2", // C Dm C Em
  M: "f2!6 [a2,c4,e4] a2, [a3,c4]@5 ~ [a3,c4]@5 ~@5", N: "g2!6 [g2,a3] g2, [b3,d4]@5 ~ [b3,d4]@5 ~@5",
  O: "[g2,c4] g2 b2!5 [b2,c4], ~@4 g3@11 ~, ~@4 d4@5 ~ d4@4 ~@2", // C5 Cmaj7
  P: "[[b2,d4] b2 [b2,e4] b2 [c3,c4] c3 [c3,g3] c3 [c3,a3] c3 [c3,c4] c3 g2!4 g2 [g2,c4] [g2,d4] g2 [g2,e4] g2 f2!2 f2!2 [f2,a3] f2 [f2,c4] f2 b2!2 b2!3 [b2,c4] [b2,d4] b2 [b2,g4] b2, g3@7 ~ e3@15 ~ b3@11 ~ b3@7 ~ f3@15 ~ g3@11 ~ g3@7 ~, ~@24 d4@5 ~ d4@4 ~@10 a3@7 ~@9 d4@5 ~ d4@4 ~@10]/5", // Bm E5 C C5 F C C5 G5 …
  Q: "[c3,e4] c3 [c3,c4] c3 [c3,a3] c3 [c3,c4] c3, g3@15 ~", // C F C
  R: "[g2!5 [g2,c4] [g2,d4] g2 [g2,e4] g2 f2!3 g2!3, b3@11 ~ b3@7 ~ f3@11 ~, d4@5 ~ d4@4 ~@10 a3@5 ~ b3@5 ~]/2", // C5 G5 C
  S: "[[a2,c4] a2 [b2,d4] b2 c3!4 c3!2 [c3,b3,d4] c3 [c3,c4,e4] c3 [c3,d4,f4] c3, ~@8 [c4,e4]@5 ~ [c4,e4]@5 ~@13]/2", // Am Bm G C Dm7 C
  T: "g2!6 [g2,c4,e4] g2, [c4,e4]@5 ~ [b3,d4]@5 ~@5", // C Bm
  U: "[f2,d4,f4]@2 f2@2 e2@2 e2@2 e2@2 [d4,f4] [c4,e4] f2@2 f2@2, ~@4 [e4,g4]@5 ~ e2@2 [a3,c4]@4", // Dm C Em Am
  V: "f2!4 [a2,c4,e4] a2 [g2,b3,d4] g2, ~@2 [a3,c4]@5 ~@9", // Am G Am
  W: "[c3,c4,e4] c3 [c3,e4,g4] c3 [e2,g4] e2 [g2,b4] g2, ~@8 [c4,e4]@7 ~", // C Em G C
  X: "a2!3 f2!3 [a2,f4,c5,e5] a2, c5@11 ~@5, [e4,a4]@5 ~ [f4,a4]@5 ~@5", // Fmaj7 A5 F
  Y: "[[g2,g4,b4,d5]@2 g2@2 [g2,g4,e5]@2 g2@2 c3@2 c3@2 c3@2 c3@2 c3@2 c3@2 [a2,c5,e5]@2 a2@2 [g2,g4,b4,d5]@2 g2@2 [g2,g4,e5]@2 [c3,e4,g4,c5]@17 ~, ~@6 [e4,g4,c5]@13 ~@29]/3", // G C Am G C
  Z: "[g2,d4,g4,b4]@7 ~ [a2,c#4,e4,a4]@7 ~", AA: "[d3,a3,d4,f#4]@7 ~", AB: "[c#3,a3,c#4,f#4]@7 ~",
  AC: "[d3@7 ~ c#3@7 ~, [a3,d4,f#4]@15 ~]/2", AD: "[b2,f#3,d4,f#4]@7 ~", AE: "[a2,e3,d4,e4]@7 ~",
  AF: "[g2,d3,b3,d4]@7 ~", AG: "[a2,e3,c#4,e4]@7 ~", AH: "[d2,f#2,b3,d4]@7 ~", AI: "[a2,e3,c#4,e4]@11 ~ g2@4",
  AJ: "c3!8, [c4,e4]@5 ~@11", AK: "c3!4 g2!4", AL: "g2!4 f2!2 e2!2", AM: "e2!2 f2!6", AN: "a2!2 g2!2 c3!4", AO: "c3!8",
  AP: "e2!2 g2!2 a2!3 f2", AQ: "f2!2 a2!2 g2!4", AR: "c3!6 a2!2", AS: "g2!4 c3!4", AT: "c3@2 c3@2 c3@2 c3@2 c3@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.72)

stack(piano, bass)

More by Enya