Strudelify

The Memory of Trees

Enya

KeyE♭ majorTempo96 bpm
0:00/0:00
// The Memory of Trees — Enya
// 96 bpm, 6/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 67 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/6)

// 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 warm · "WARM PAD"
const pad_warm = note("<A@7 B@7 C D C E F@4 C D C E F@4 ~@8 F@4 C D C E F@4 ~@4 F@8 G@5>".pickRestart({
  A: "[[eb2,eb3,gb3,bb3,eb4]@14 [bb1,bb2,f3,bb3,db4]@7 [gb1,gb3,bb3,db4]@6 [bb1,f3,d4]@8 [eb2,bb3,eb4]@4 [ab1,ab2,ab3,c4]@3]/7", // Ebm Bbm Gb Bb Eb5 Ab
  B: "[eb3,g3,bb3,eb4] [ab1,ab3,c4,eb4]", C: "[c2,g3,eb4] [g2,g3,d4]", D: "[ab2,ab3]@5 [bb2,bb3,f4]",
  E: "[bb2,bb3,f4]@23 ~", F: "[g3,eb4] [ab1,ab3,eb4]", G: "[[g3,eb4]@9 ~, eb2@4 ~]/5",
})).s("gm_pad_warm").gain(0.25)

// chords · pad warm · "WARM PAD" · soft notes
const pad_warm_soft = note("<~@3 A@4 B@7 ~ C ~@2 D@4 ~ C ~@2 D@4 ~@8 D@4 ~ C ~@2 D@4 ~@4 D@8 ~@5>".pickRestart({
  A: "[~@3 gb2@6 [bb2,bb3]@8 [eb3,g3]@4 eb4@3]/4", B: "eb2 ab2", C: "eb4@5 ~", D: "eb2 ~",
})).s("gm_pad_warm").gain(0.1)

// other · piano · "A.PIANO 3"
const piano = note("<~@6 A@8 B C@2 D@2 ~@48>".pickRestart({
  A: "[~ g3 bb3 c4@2 eb4@2 g3 bb3 c4@2 bb3]/2", B: "~@4 eb4@3 ~ d4@2 ~@2 bb3@2 ~@2 g3@2 ~@2 bb3@2 ~@2",
  C: "[c4@20 d4@7 ~ eb4@3 ~ d4@2 ~@2 bb3@2 ~@2 g3@2 ~@2 bb3@2 ~@2]/2", D: "[d4@20 eb4@7 ~@21]/2",
})).s("gm_piano").gain(0.1).pan(1)

// chords · harpsichord · "A.PIANO 3"
const harpsichord = note(`<
  ~@23
  [~@8 c4@2 eb3@2 ~@8 bb2@2 f3 ~, ab2@11 ~ ab2@11 ~, ~@2 eb3@4 eb3@4 ~@4 eb3@4 eb3@5 ~, ~@4 ab3@7 ~@5 ab3@7 ~]
  [~@8 c4@2 g3 ~@9 g3@2 d3 ~, c3@11 ~ g2@11 ~, ~ g3@2 g3@2 ~@2 d3@2 d3@2 ~, ~ c4 ~@2 g3 ~]
  [~@8 d4@2 f3 ~@9 d4@2 f3 ~, bb2@11 ~ bb2@11 ~, ~ f3@2 f3@2 ~@2 f3@2 f3@2 ~, ~@4 bb3@7 ~@5 bb3@7 ~]
  ~@41
>`).s("gm_harpsichord").gain(0.16).pan(0)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  ~@6 A@4 B@4 C D@2 E@5 C D@2 E@5 F G H I J G K L M@4 C D@2 N M@4 J G K L M@4 B@4 O P Q@2 ~
>`.pickRestart({
  A: "~@8 eb3@2 bb2 ~@9 ab3@2 eb3 ~, eb2@11 ~@5 ab3@4 ~@4, ~@2 bb2@4 bb2@4 ~@2 ab2@11 ~, ~@2 eb3@2 ~@3 eb3@2 eb3@2 ~",
  B: "[~@8 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 [ab3,bb3,bb4]@2 eb3 ~, eb2@11 ~@13 eb2@11 ~@13 eb2@11 ~@13 eb2@11 ~@13, ~@2 bb2@4 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~, ~@4 [g3,g4]@7 ~@5 ab3@4 [eb4,eb5]@15 ~@5 ab3@4 [bb3,bb4]@12 ~@8 ab3@4 [eb4,eb5]@15 ~@5 ab3@4 ~@4, ~@4 eb3@4 ~@6 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@2]/4", // Eb5 Absus2 Ab G Eb Bb Eb G
  C: "~@8 [c4,d4,d5]@2 g3 ~@9 [g3,bb3,bb4]@2 d3 ~, c3@11 ~ g2@11 ~, ~ g3@2 g3@2 ~@2 d3 g3 d3@2 ~, ~@4 [eb4,eb5]@7 ~@5 g4@7 ~, ~ c4 ~ [bb3,bb4]@2 ~", // Csus2 Gm Eb Bb
  D: "[~@8 ab3@2 eb3@2 ~@8 bb2@2 f3 ~@9 [c4,d4,d5]@2 g3 ~@9 [g3,bb3,bb4]@2 d3 ~, [c4,c5]@10 [d4,d5]@5 g3@2 ~@2 d3 g3 d3@2 ~, ab2@11 ~ ab2@11 ~@5 [eb4,eb5]@7 ~@5 g4@7 ~, ~@2 eb3@4 eb3@4 ~@4 eb3@4 eb3@5 ~ c3@11 ~ g2@11 ~, ~@4 ab3@4 ~@8 ab3@7 ~@3 g3@2 c4@4 ~@4 [bb3,bb4]@8 ~@4]/2", // Csus2 Gm C D Eb Bb
  E: "[~@8 bb3@2 f3 ~@9 bb3@2 f3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 [ab3,bb3,bb4]@2 eb3 ~, [d4,d5]@23 ~@5 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@2, bb2@11 ~ bb2@11 ~ eb2@11 ~@13 eb2@11 ~@13 eb2@11 ~@13 eb2@11 ~@13, ~@2 f3@4 f3@4 ~@4 f3@4 f3@4 ~@4 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~, ~@4 bb3@4 ~@8 bb3@4 [eb4,eb5]@15 ~@5 ab3@4 [eb4,eb5]@15 ~@5 ab3@4 [bb3,bb4]@12 ~@8 ab3@4 [eb4,eb5]@15 ~@5 ab3@4 ~@4]/5", // Eb5 Absus2 D G Ab Eb Bb Eb
  F: "~@8 [g3,bb3,bb4]@2 d3 ~@9 [ab3,ab4]@2 eb3 ~, g2@11 ~ [ab2,c4,c5]@11 ~, [bb3,bb4]@3 d3@2 ~@2 eb3@2 eb3@2 ~, ~ d3 g3@2 ~@4 ab3@2 ~@2, ~@4 g4@7 ~@13", // Gm Ab Bb
  G: "~@8 [eb3,g3,g4]@2 bb2 ~@9 [bb2,f3,f4]@2 f2 ~, eb2@11 ~ bb1@11 ~, [g3,g4]@3 bb2@2 ~@2 f2 bb2 f2@2 ~, ~ bb2 eb3@2 ~@2 [f3,f4]@4 ~@2, ~@4 eb4@7 ~@5 [d3,d4]@7 ~", // Eb Bb5 G F D
  H: "~@8 [g3,bb3,bb4]@2 d3 ~@9 [c3,eb3,eb4]@2 g2 ~, g2@11 ~ c2@11 ~, [bb3,bb4]@2 ~@2 c3 ~, ~ d3@2 d3@2 ~ [eb3,eb4]@4 ~@2, ~@2 g3@2 ~@3 g2@2 g2@2 ~", // Gm Cm Bb Eb
  I: "~@8 [f3,ab3,ab4]@2 c3 ~@9 [bb2,d3,d4]@2 f2 ~, f2@11 ~ bb1@11 ~, [ab3,ab4]@2 ~@2 bb2 ~, ~ c3@2 c3@2 ~ [d3,d4]@4 ~@2, ~@2 f3@2 ~@3 f2@2 f2@2 ~", // Fm Bb Ab D
  J: "~@8 [g3,bb3,bb4]@2 d3@2 ~@8 [ab3,ab4]@2 eb3 ~, g2@11 ~ [ab2,c4,c5]@11 ~, [bb3,bb4]@3 d3@2 ~@2 eb3@2 eb3@2 ~, ~ d3 g3@2 ~@4 ab3@2 ~@2, ~@4 g4@7 ~@13", // Gm Ab Bb
  K: "~@4 [g3,bb3,bb4] d3 ~@4 [ab3,c4,c5] eb3, g2@11 ~ ab2@11 ~, [bb3,bb4]@3 d3@2 ~@2 eb3 ab3 eb3@2 ~, ~ d3 g3@2 ~@2 [c4,c5]@4 ~@2, ~@4 g4@7 ~@5 ab4@7 ~", // Gm Ab Bb C
  L: "~@8 [bb3,bb4]@2 f3@2 ~@8 [bb3,f4,f5]@2 f3 ~, [bb2,eb4,eb5]@11 ~ [bb2,d4,d5]@11 ~, ~ f3@2 f3@2 ~@2 f3@2 f3@2 ~, ~@4 [d4,d5]@7 ~@5 [eb4,eb5]@7 ~, ~ bb3 ~@2 bb3 ~", // Bb Bb5 Eb5 Bb D Eb
  M: "[~@8 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 ab3@2 eb3 ~@9 [eb3,bb3,bb4]@2 bb2 ~@9 [ab3,bb3,bb4]@2 eb3 ~, [eb2,eb4,eb5]@11 ~@13 eb2@11 ~@13 eb2@11 ~@13 eb2@11 ~@13, ~@2 bb2@4 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~@3 bb2@2 eb3@2 bb2@4 ~@2 [ab2,c4,c5]@11 ~, ~@4 [g3,g4]@7 ~@5 ab3@4 [eb4,eb5]@15 ~@5 ab3@4 [bb3,bb4]@12 ~@8 ab3@4 [eb4,eb5]@15 ~@5 ab3@4 ~@4, ~@4 eb3@4 ~@6 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@6 [g3,g4]@7 ~@3 eb3@4 eb3@4 ~@2]/4", // Eb5 Absus2 Eb Ab G Eb Bb Eb …
  N: "~@8 bb3@2 f3 ~@11 f3 ~, [d4,d5]@23 ~, bb2@11 ~ bb2@11 ~, ~ f3@2 f3@2 ~@2 f3@2 f3@2 ~, ~ bb3 ~@2 bb3 [bb3,eb4,eb5]", // D Eb5
  O: "~@4 [eb3,g4,g5] bb2 ~@4 eb3 bb2, [eb2,bb3,bb4]@11 ~ [eb2,g4,g5]@11 ~, ~ bb2@2 bb2@2 ~@2 bb2@2 bb2@2 ~, ~ eb3 ~@2 eb3 ~", // Eb Eb5 Eb
  P: "~@4 [eb3,g4,g5] bb2 ~@4 eb3 bb2, [eb2,bb4,bb5]@11 ~ [eb2,g4,g5]@11 ~, ~ bb2@2 bb2@2 ~@2 bb2@2 bb2@2 ~, ~ eb3 ~@2 eb3 ~", // Eb Eb5 Eb
  Q: "[~@8 eb3@2 bb2@2 ~@8 eb3@3 ~ [eb2,bb2]@24, [g4,g5], eb2@11 ~ eb2@11 ~@25, ~@2 bb2@4 bb2@4 ~@6 bb2@7 ~@25, ~ eb3 ~@10]/2", // Eb5 G
})).s("gm_piano").gain(0.39)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A@8 B@7 C@2 D E@2 F@2 G H@2 I E@4 ~@37>".pickRestart({
  A: "[~@56 f3@27 ~ gb3@24 f3@29 ~@19 c4@7 eb4@9 g3@4 bb3@4 c4@8 bb3@4, bb3@161 ~@31]/8",
  B: "[~@4 g3@4 bb3@4 c4@7 eb4@8 g3@5 bb3@4 c4@8 bb3@7 ~ g3@4 bb3@4 c4@7 ~ eb4@8 g3@4 bb3@4 c4@8 bb3@7 ~ g3@4 bb3@4 c4@7 ~ eb4@7 g3@5 bb3@4 c4@8 bb3@7 ~ eb4@4 d4@4 bb3@4 g3@4 bb3@4]/7",
  C: "[c4@20 d4@7 eb4@4 d4@4 bb3@4 g3@5 bb3@4]/2", D: "d4@19 eb4@4 ~",
  E: "[~@4 g3@4 bb3@4 c4@7 eb4@8 g3@5 bb3@4 c4@8 bb3@4]/2", F: "[~@4 g3@4 bb3@4 c4@7 ~ eb4@8 g3@4 bb3@4 c4@8 bb3@4]/2",
  G: "~ eb4 d4 bb3 g3 bb3", H: "[c4@19 d4@8 eb4@4 d4@4 bb3@4 g3@5 bb3@4]/2", I: "d4@19 eb4@5",
})).s("gm_string_ensemble_2").gain(0.22)

// other · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<A@7 ~@60>".pickRestart({
  A: "[gb3@55 ~ db4@51 ~ d4@30 [g3,eb4]@23 ~@7, eb4@53 ~@115]/7", // Cm
})).s("gm_string_ensemble_2").gain(0.13)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@38 A B A B ~@4 A B A B ~@4 A B A B A B A B ~@5>".pickRestart({
  A: "eb2 ~@3 [bb2,eb3] ~@3 [bb2,eb3] ~@3 ab2@2 ~@2 [eb3,ab3] ~@3 [eb3,ab3] ~@3", // Eb5 Ab5
  B: "eb2 ~@3 [bb2,eb3] ~@3 [bb2,eb3] ~@3 ab2 ~@3 [eb3,ab3] ~@3 [eb3,ab3] ~@3", // Eb5 Ab5
})).s("gm_string_ensemble_1").gain(0.45)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note("<~@30 A B C D A B A E ~@12 A B A E ~@13>".pickRestart({
  A: "g2 d3 g3 d3 g3 d3 ab2 eb3 ab3 eb3 ab3 eb3", B: "eb2 bb2 eb3 bb2 eb3 bb2 bb1 f2 bb2 f2 bb2 f2",
  C: "g2 d3 g3 d3 g3 d3 c2 g2 c3 g2 c3 g2", D: "f2 c3 f3 c3 f3 c3 bb1 f2 bb2 f2 bb2 f2",
  E: "bb2 f3 bb3 f3 bb3 f3 bb2 f3 bb3 f3 bb3 f3",
})).s("gm_pizzicato_strings").gain(0.47)

// chords · taiko drum · "TAIKO"
const taiko_drum = note("<~@18 A B A B ~@4 A B A C D ~@7 A B A B ~@4 A B A C D ~@3 A B A B A B A B ~@5>".pickRestart({
  A: "[eb5,bb6] ~@21 eb5 ~", B: "[eb5,bb6] ~@23", C: "[eb5,bb6] ~@6 eb5 bb6 eb5 bb6 eb5", D: "[eb5,bb6] ~@11",
})).s("gm_taiko_drum").gain(0.25)

// other · timpani · "TAIKO"
const timpani = note("<~@25 A B@8 ~@11 A C@8 ~@13>".pickRestart({
  A: "~@16 bb2!8", B: "bb2/8", C: "[bb2@184 bb2!6 bb2@2]/8",
})).s("gm_timpani").gain(0.35)

// chords · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~@54 A B A B C D C D ~@5>".pickRestart({
  A: "[eb5,ab5] ~@5", B: "[bb3,eb4] ~@5", C: "[eb5,ab5] ~@11", D: "[bb3,eb4] ~@11",
})).s("gm_tubular_bells").gain(0.22)

// other · vibraphone
const vibraphone = note("<~@54 A ~ A ~ A B A B ~@5>".pickRestart({
  A: "eb5 [d5,eb5]!3 d5 [d5,eb5]!2 ~ d5 ~@3 c5@5 ~@3 bb4@2 ~@2", B: "~@4 g4@4 bb4@4 c5@8 bb4@3 ~",
})).s("gm_vibraphone").gain(0.09)

// other · vibraphone · soft notes
const vibraphone_soft = note("<~@54 A ~ A ~ A ~ A ~@6>".pickRestart({
  A: "~@7 [d5,eb5] eb5 ~@15", // Ebmaj7
})).s("gm_vibraphone").gain(0.05)

stack(
  pad_warm, pad_warm_soft, piano, harpsichord, piano_2, string_ensemble_2, string_ensemble_2_soft, string_ensemble_1,
  pizzicato_strings, taiko_drum, timpani, tubular_bells, vibraphone, vibraphone_soft
)

More by Enya