Strudelify

Ebudae

Enya

KeyA♭ majorTempo120 bpm
0:00/0:00
// Ebudae — Enya
// 120 bpm, 6/8, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · pad bowed · "Background"
const pad_bowed = note(`<
  A@2 B@3 C@2 D E F G H I@5 J K L M F G H N@2 O@2 ~@14 I@3 J K L M F G H J L I@2 P Q P@2 R S R T J R U J R V@2
>`.pickRestart({
  A: "[ab2@29 eb2@3]/2", B: "~ [eb3,ab3], ab2", C: "[~@8 eb3@8 eb3@5 eb2@3 ab2@5 [eb3,ab3]@3, ab2@21 ~@11]/2",
  D: "ab2@5 [eb3,ab3]@3 ab2@5 [eb3,ab3]@3, ~@8 eb3@3 ~@5", E: "ab2@5 [eb3,ab3]@3 db2@5 [ab2,db3]@3",
  F: "db2@5 [ab2,db3]@3 c2@5 [g2,c3]@3", G: "c2@5 [g2,c3]@3 db2@5 [ab2,db3]@3", H: "db2@5 [ab2,db3]@3 eb2@5 eb2@3",
  I: "ab2@5 [eb3,ab3]@3 ab2@5 [eb3,ab3]@3", J: "ab2@5 eb3@3 ab2@5 eb3@3", K: "ab2@5 eb2@3 ab2@5 [eb3,ab3]@3",
  L: "ab2@5 eb3@3 ab2@5 [eb3,ab3]@3", M: "ab2@5 eb3@3 db2@5 [ab2,db3]@3", N: "[[ab2,c3,eb3]@3 [c3,g3]]/2",
  O: "[db3,ab3]/2", P: "ab2@5 [eb3,ab3]@3 ab2@5 eb3@3", Q: "ab2@5 eb3@3 ab2@5 eb2@3",
  R: "db2@5 [ab2,db3]@3 db2@5 [ab2,db3]@3", S: "c2@5 [g2,c3]@3 c2@5 [g2,c3]@3", T: "eb2@5 eb2@3 ab2@5 eb3@3",
  U: "eb2@5 [bb2,eb3]@3 ab2@5 eb3@3", V: "[eb2@5 [bb2,eb3]@3 [ab2,eb3]@16 ~@8]/2",
})).s("gm_pad_bowed").gain(0.12)

// chords · pad new age
const pad_new_age = note("<~@28 A B C@2 D E C@2 A B F@2 G@2 ~@29>".pickRestart({
  A: "eb4@5 g4@3 g4@5 eb4@3, g3", B: "eb4@5 c4@3 c4@5 eb4@3, g3", C: "[ab3,f4]/2", D: "eb4@5 c4@3 c4@5 bb3@3, g3",
  E: "bb3@5 ab3@3 bb3@5 c4@3, g3", F: "[f3 [f3,c4], ab3]/2", G: "[g3,bb3]/2",
})).s("gm_pad_new_age").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@2 A@4 B C@5 A@6 B C@5 A ~@17 A@4 B C@5 A B C@4 A@5 B C A B C A B ~>".pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.08)

// drums · clap
const clap = s("cp").struct("<~ A B@4 C D@5 B@6 C D@5 ~@17 A B@4 C D@5 B C D@4 B@5 C D B C D B E ~>".pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~@2 x ~@4 x ~@2", C: "~@5 x ~@7 x ~@2", D: "x ~@4 x ~@7 x ~@2", E: "~@5 x ~@10",
})).gain(0.08)

stack(pad_bowed, pad_new_age, kick, clap)

More by Enya