Strudelify

Epona

Enya

KeyD minorTempo67 bpm
0:00/0:00
// Epona — Enya
// 67 bpm, 4/4, key D minor. 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, 7/4 at bar 4, 4/4 at bar 6, 7/4 at bar 8, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 28 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note("<~@6 A B C D E F G F H D I J K L K L I M N@3 ~>".pickRestart({
  A: "~@12 d2@3 ~ d2@2 ~@2 a2@2 a2@2", B: "d2@3 ~ d2@2 ~@2 bb2@2 bb2@2 f2@3 ~ f2@2 ~@2 g2@2 g2@2",
  C: "a2@3 ~ a2@2 d2@3 ~ d2@2 ~@2 a2@2 a2@2 d2@3 ~ d2@2", D: "~@2 bb2@2 bb2@2 f2@3 ~ f2@2 ~@2 g2@2 g2@2 a2@3 ~ a2@2",
  E: "d2 d3 bb2 c3", F: "d3@3 g2@3 a2@3 bb2@2 g2", G: "c3 d3 bb2 c3", H: "c3@6 d2@3 ~ d2@2 ~@2 a2@2 a2@2 d2@3 ~ d2@2",
  I: "d2@3 ~ d2@2 ~@2 a2@2 a2@2 d2@3 ~ d2@2 ~@2 bb2@2 bb2@2", J: "f2@3 ~ f2@2 ~@2 g2@2 g2@2 a2@3 ~ a2@2 d2@6",
  K: "d3 bb2 c3 d3", L: "g2@3 a2@3 bb2@2 g2 c3@3", M: "f2@3 ~ f2@2 ~@2 g2@2 g2@2 a2@3 ~ a2@2 d2@3 ~ d2@2",
  N: "[~@2 a2@2 a2@2 d2@3 ~ d2@2 ~@2 bb2@2 bb2@2 f2@4 ~ f2@3 ~@3 g2@2 g2@3 a2@4 ~ a2@3 d2@16 ~@14]/3",
})).s("gm_acoustic_bass").gain(0.12)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<A B C D E F G H I J K L M N O P Q R S T U V W X Y@4>".pickRestart({
  A: "~@18 [gb5,g5] a5@3 gb5@2", B: "~ a5@3 gb5 ~@2 a5@3 gb5 ~@7 [d5,f5] g5@3 d5 ~",
  C: "~ g5@3 d5 ~@2 e5@3 d5@2 ~ e5@3 d5 ~ gb5@2 g5@2 a5@2",
  D: "e5@4 g5 ~ gb5 e5 gb5 e5 d5@2 e5@2 d5@2 e5@2 f5@2 e5@2 d5@2",
  E: "b4@2 d5@2 e5@2 d5@2 db5@2 a4@2 gb5@2 g5@2 a5@2 e5@4 g5 ~",
  F: "gb5 e5 gb5 e5 d5@2 e5@2 d5@2 e5@2 f5@2 e5@2 d5@2 b4@2 d5@2 e5@2",
  G: "d5@2 db5@2 a4@2 d5@6 gb5@2 g5@2 a5@2 e5@4 g5 ~",
  H: "gb5 ~ e5@2 d5@2 e5@2 d5@2 e5@2 f5@2 e5@2 d5@2 b4@2 d5@2 e5@2",
  I: "d5@2 db5@2 a4@2 gb5@2 ~@2 a5@2 e5@4 g5 ~ gb5 e5 gb5 e5 d5@2", J: "e5 d5 e5 f5 e5 d5 b4 d5 e5 d5 db5 a4",
  K: "d5@6 f5@2 g5@2 a5@2 d5@2 f5@2 a5@2 g5 ~ f5 ~ e5 ~, ~@21 f5@2 ~",
  L: "f5@2 e5@2 d5@2 bb4@2 d5@2 f5@2 e5@4 c5 ~ d5@2 c5@2 f5@2",
  M: "e5@2 d5@2 e5@2 f5@2 g5@2 a5@2 d5@2 f5@2 a5@2 g5@2 f5 [f5,g5] e5 ~", N: "f5 e5 d5 bb4 d5 f5 e5 d5 c5 d5 c5 f5",
  O: "e5@4 ~@2 [gb5,a5]@2 g5@2 a5@2 e5@4 g5 ~ gb5 e5 gb5 e5 d5@2", P: "e5 d5 e5 [d5,f5] e5 d5 [b4,g5] d5 e5 d5 db5 a4",
  Q: "[gb5,a5]@2 ~@2 a5@2 e5@4 g5 ~ gb5 e5 gb5 e5 d5@2 e5@2 d5@2 e5@2", R: "[d5,f5] e5 d5 [b4,g5] d5 e5 d5 db5 a4 d5@3",
  S: "[d5,f5]@2 g5@2 a5@2 d5@2 f5@2 a5@2 g5 ~ f5!2 e5 ~ f5@2 e5@2 d5@2", // Dm
  T: "[bb4,d5] [d5,e5] f5 ~ f5 [c5,g5] [d5,f5] c5 [f5,a5] [e5,g5] d5 e5, ~@3 e5@2 ~@7", // Bb Dsus2 C5 Dm F Em
  U: "[d5,f5]@2 g5@2 a5@2 [d5,a5]@2 f5@2 a5@2 g5@2 f5 [f5,g5] e5 ~ f5@2 e5@2 d5@2", // Dm D5 Fsus2
  V: "[bb4,d5] [d5,e5] f5 e5 [d5,f5] [c5,g5] [d5,f5] [c5,g5] [f5,a5] [e5,g5]@2 ~", // Bb Dsus2 Dm C5 Dm C5 F Em
  W: "[gb5,a5]@2 g5@2 a5@2 e5@4 g5 ~ gb5 e5 gb5 e5 d5@2 e5@2 d5@2 e5@2", // Gbm
  X: "[d5,f5] e5 d5 [b4,g5] d5 e5 d5 db5 a4 [gb5,a5] ~ a5", // Dm Em Gbm
  Y: "[e5@4 g5 ~ gb5 e5 gb5 e5 d5@2 e5@2 d5@2 e5@2 [d5,f5]@3 e5@2 d5@3 [b4,g5]@3 d5@2 e5@3 d5@3 db5@2 a4@3 a4 d5@38 ~@15]/4", // Dm Em
})).s("gm_orchestral_harp").gain(0.25).pan(0.7)

// drums · congas
const congas = s("conga:33").struct("<~@6 A B C D E ~@3 F D B G ~@4 B H I J ~@2>".pickRestart({
  A: "~@6 x ~ x ~ x!2", B: "x ~ x ~ x!3 ~ x ~ x!2", C: "x ~ x!2 ~ x ~ x!3 ~ x", D: "~ x!3 ~ x ~ x!3 ~ x", E: "x",
  F: "~@3 x ~ x ~ x!3 ~ x", G: "x ~ x ~ x!3 ~ x!2 ~@2", H: "x ~ x ~ x!3 ~ x!2 ~ x",
  I: "~@2 x ~ x ~ x ~@3 x ~@3 x ~ x ~ x ~@4 x", J: "~@5 x ~ x ~@2 x ~@4 x ~@8",
})).gain(0.14).pan(0.7)

stack(bass, orchestral_harp, congas)

More by Enya