Strudelify
The Raven cover art

Tales Of Mystery And Imagination

The Raven

The Alan Parsons Project

KeyC minorTempo120 bpm
0:00/0:00
// The Raven — The Alan Parsons Project
// 120 bpm, 12/8, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 139 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  ~@4 A@4 ~@2 B C D ~@2 B C D E@4 F@2 G H A@4 ~@2 B C D ~@2 B C@3 I@2 ~@58 A@4 ~@2 B C D ~@2 B C J@4 K@2 L M A@4 ~@2 B
  C@5 N O@3 P
>`.pickRestart({
  A: "[[g3,c4] ~ [bb3,eb4] ~ [g3,c4] ~ [f3,bb3]@3 ~ [g3,c4] ~ [bb3,eb4]@3 ~ [g3,c4] ~ [bb3,eb4]@3 ~ [c4,f4]@6 ~@2 [c4,f4]@4 ~@2 [c4,f4]@3 ~ [bb3,eb4]@6 ~@2]/2", // C5 Eb5 C5 Bb5 C5 Eb5 C5 Eb5 …
  B: "~@9 [f3,bb3,d4,f4]@2 ~", C: "[eb3,ab3,c4,eb4]@15 ~ [f3,bb3,d4,f4]@6 ~@2", D: "[eb3,ab3,c4,eb4]@5 ~",
  E: "[[a3,c4,e4]@4 ~@2 [a3,c4,e4]@3 ~ [a3,c4,e4]@8 [a3,c4,e4]@10 ~@2 [a3,c4,e4]@9 ~ [a3,c4,e4]@6 ~@2]/2", // Am
  F: "[[b3,d4,gb4]@9 ~ [b3,d4,gb4]@6 ~@2 [b3,d4,gb4]@10 ~@2 [b3,d4,gb4]@9 ~ [b3,d4,gb4]@6 ~@2]/2", // Bm
  G: "[b3,d4,gb4]@9 ~ [b3,d4,gb4]@6 ~@2 [b3,d4,gb4]@4 ~@2", H: "[b3,d4,gb4] ~@5", I: "[[eb3,ab3,c4,eb4]@8 ~ g3@2 ~]/2",
  J: "[[a3,c4,e4]@4 ~@2 [a3,c4,e4]@3 ~ [a3,c4,e4]@6 ~@2 [a3,c4,e4]@10 ~@2 [a3,c4,e4]@4 ~@2 [a3,c4,e4]@3 ~ [a3,c4,e4]@6 ~@2]/2", // Am
  K: "[[a3,c4,e4]@9 ~ [a3,c4,e4]@6 ~@2 [a3,c4,e4]@10 ~@2 [a3,c4,e4]@9 ~ [a3,c4,e4]@6 ~@2]/2", // Am
  L: "[a3,c4,e4]@9 ~ [a3,c4,e4]@6 ~@2 [a3,c4,e4]@4 ~@2", M: "[a3,c4,e4]@5 ~",
  N: "[eb3,ab3,c4,eb4]@2 ~ [f3,bb3,d4,f4]@2 ~ [eb3,ab3,c4,eb4]@2 ~ [f3,bb3,d4,f4]@2 ~", // Ab Bb Ab Bb
  O: "[ab3,c4,eb4,ab4]@2 ~ [bb3,d4,f4,bb4]@2 ~ [ab3,c4,eb4,ab4]@2 ~ [bb3,d4,f4,bb4]@2 ~", P: "[c4,eb4,g4] ~@5",
})).s("gm_electric_guitar_jazz").gain(0.39).pan(0.9)

// chords · epiano1 · "Electric Piano"
const epiano1 = note(`<
  ~@8 A B C ~@2 A B C ~@14 A B C ~@2 A B C ~@67 A B C ~@2 A B C ~@13 A B C ~@7 D@2 E
>`.pickRestart({
  A: "[g3,c4]@3 ~ [bb3,eb4]@6 ~@8 [c4,eb4] ~ [eb4,g4] ~ [f4,a4] ~", // C5 Eb5 Cm Eb F
  B: "[g4,bb4]@3 ~ [eb4,g4] ~ [f4,a4]@3 ~ [d4,f4] ~ [eb4,g4]@3 ~ [c4,eb4] ~ [d4,f4]@3 ~ [bb3,d4] ~", C: "[c4,eb4] ~@2",
  D: "[ab3,c4,eb4,ab4]@2 ~ [bb3,d4,f4,bb4]@2 ~ [ab3,c4,eb4,ab4]@2 ~ [bb3,d4,f4,bb4]@2 ~", E: "[c4,eb4,g4] ~@5",
})).s("gm_epiano1").gain(0.39).pan(0.9)

// chords · brass section
const brass_section = note(`<
  ~@8 A B C D E A F C D E G@4 H@3 I ~@4 A B C D E A F C D@3 J@2 ~@62 A B C D E A F C D ~@12 A B C D@5 ~@5
>`.pickRestart({
  A: "[c4,eb4,g4]@5 ~", B: "[c4,eb4,g4]@3 [bb3,d4,f4]@2 ~ [c4,eb4,g4]@2 ~ [bb3,d4,f4]@2 ~",
  C: "[c4,eb4,g4]@8 ~ [bb3,d4,f4]@2 ~", D: "[ab3,c4,eb4]@15 ~ [bb3,d4,f4]@6 ~@2", E: "[ab3,c4,eb4]@5 ~",
  F: "[c4,eb4,g4]@2 ~ [bb3,d4,f4]@2 ~ [c4,eb4,g4]@2 ~ [bb3,d4,f4]@2 ~", G: "[a3,c4,e4]@7 ~@5 [a3,c4,e4]@7 ~@5",
  H: "[b3,d4,gb4]@2 ~ [b3,d4,gb4]@2 ~", I: "[b3,d4,gb4] ~@5", J: "[[ab3,c4,eb4]@3 ~]/2",
})).s("gm_brass_section").gain(0.47).pan(0.1)

// other · orchestra hit · "Brass Section"
const orchestra_hit = note("<~@69 A@32 ~@38>".pickRestart({
  A: "[[c2,c3]@11 ~]/2", // C
})).s("gm_orchestra_hit").gain(0.07).pan(0.1)

// bass · synth bass 1 · "SynBass"
const bass = note(`<
  A@10 B C D A@2 B E F G@4 H@3 I A@6 B C D A@2 B E@3 J@2 K L M@2 N O P@2 Q R@7 S@4 T@2 U@8 A@34 B V W@4 X@8 Y A@6 B Z@4
  AA AB@3 AC AD
>`.pickRestart({
  A: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  B: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ bb2@4 ~@2", C: "ab2@15 ~ bb2@6 ~@2",
  D: "ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~ ab2@3 ~ bb2 ~", E: "ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~ ab2@3 ~ bb2@6 ~@2",
  F: "ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~",
  G: "[a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~", // A5 D A5 D
  H: "[b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@3 ~ [b2,ab3] ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@3 ~ [b2,ab3] ~", // B5 E B5 E
  I: "[b2,gb3]@4 ~@12 b2 ~ b2@3 ~@3", J: "[[ab1,ab2]@8 ~ [g1,g2]@2 ~]/2", K: "[c2,c3]@8 ~ g2@2 ~",
  L: "eb2@2 ~ g2@2 ~ d2@2 ~ g2@2 ~", M: "[[c2,c3]@8 ~ g2@2 ~]/2", N: "c2@8 ~ g2@2 ~",
  O: "c3@2 ~ c2@2 ~ [bb1,bb2]@4 ~@2", P: "[[ab1,ab2]@14 ~ ab2@2 ~ bb2@2 ~ bb1@2 ~]/2", Q: "[ab1,ab2]",
  R: "[~@3 bb2 ~@2 c3 ~@2 eb3 ~@5 eb3 ~@2 ab1 ~@2 [bb1,bb2] ~@2 [c2,c3]@16 ~@2 g2@4 ~@2 eb2@4 ~@2 g2@4 ~@2 d2@4 ~@2 g2@4 ~@2 [c2,c3]@32 ~@4 [bb1,bb2]@8 ~@4 ab1@32 ~@4 [bb1,bb2]@8 ~@4, ab2@3 ab2@17 ab2@8, ~ ab3@13]/7", // Bb C Bb
  S: "[ab1@8 ~ [bb1,bb2]@2 ~, ab2]/2", T: "[~@9 bb2@2 ~, ab2]/2",
  U: "[ab1@44 ~@4 c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~, ab2]/8",
  V: "~@8 bb2@3 ~, ab2",
  W: "[ab2@4 ab2@2 ab2@4 ab2@2 ab2@4 ab2@2 ~@4 bb2 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ bb2@4 ~@2, ~@3 ab2@13]/4",
  X: "[ab2@4 ab2@2 ab2@4 ab2@2 ~@4 bb2@6 ~@2 [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,gb3]@3 ~ [a2,gb3] ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@4 b2 ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@4 b2 ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@4 b2 ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@4 b2 ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@4 b2 ~ [b2,gb3]@3 ~ [b2,gb3] ~ [b2,ab3]@4 [b2,ab3] ~, ~ ab2@15, ~@65 ab3@4 ~@2 ab3@4 ~@2 ab3@4 ~@2 ab3@4 ~@2 ab3@4 ~@3]/8", // A5 D A5 D A5 D A5 D …
  Y: "[b2,gb3]@5 ~", Z: "~@2 bb2, ab2", AA: "~@16 bb2@7 ~, ab2", AB: "~@3 bb2@2 ~@4 bb2@2 ~, ab2!2",
  AC: "~@3 bb2@2 ~ ab2@2 ~ bb2@2 ~, ab2 ~", AD: "c3 ~@5",
})).s("gm_synth_bass_1").gain(0.41).pan(0.1)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@43 A@2 B C D@2 E F G@2 H@4 I@4 J@4 K@2 L@2 M@30 N@2 ~@35 O P Q>".pickRestart({
  A: "[[g3,c4,eb4]@11 ~]/2", B: "[g4,bb4]@2 ~ eb4@2 ~ [f4,a4]@2 ~ d4@2 ~", C: "[eb4,g4]@2 ~ c4@2 ~ [d4,f4]@2 ~ bb3@2 ~",
  D: "[~@12 bb3@4 ~@20 d4@3 ~ eb4@3 ~ d4@3 ~, [g3,eb4]@8 ~ [f3,bb3]@2 ~, c4@3 c4@5]/2", // Cm Bb5
  E: "~@9 [ab4,c5]@2 ~, c4, [eb3,ab3]@5 ~", F: "[eb3,g3,ab4,c5]@8 ~@4 d4@3 ~ eb4@3 ~ d4@3 ~, c4, ~@3 [f3,bb3]@2 ~",
  G: "[~@9 d4@2 ~, c4, [eb3,ab3]@11 ~]/2", // Ab5
  H: "[[g3,eb4]@22 ~@2 [g4,bb4]@2 ~ eb4@2 ~ [f4,a4]@2 ~ d4@2 ~ [eb4,g4]@2 ~@4 [d4,f4]@2 ~ bb3@2 ~, c4@13 c4@3]/4", // Cm Gm F Eb Dm
  I: "[[eb3,ab3,eb4]@8 ~ [f3,bb3,d4,f4]@2 ~, c4]/2", // Ab5 Bb
  J: "[eb3@14 ~ eb3@2 ~ f3@2 ~ e3@2 ~@16 eb3@2 ~ f3@2 ~ e3@2 ~, c4@9 c4@7, [ab3,eb4]@8 ~ [bb3,d4]@2 ~ eb3@7 ~@5, ~@27 [ab3,eb4]@13 ~@2 [bb3,d4,f4]@4 ~@2]/4", // Ab5 Bb Ab5 Bb
  K: "[[eb3,ab3,eb4]@11 ~, c4]/2", L: "[[eb4,g4,c5] ~@15, c4]/2", M: "[[eb4,g4,c5]@11 ~, c4]/2",
  N: "[[c4,eb4,g4,c5]@11 ~]/2", O: "[eb4,ab4,c5,eb5]@2 ~ [f4,bb4,d5,f5]@2 ~ [eb4,ab4,c5,eb5]@2 ~ [f4,bb4,d5,f5]@2 ~",
  P: "[ab4,c5,eb5,ab5]@2 ~ [bb4,d5,f5,bb5]@2 ~ [ab4,c5,eb5,ab5]@2 ~ [bb4,d5,f5,bb5]@2 ~", Q: "[c5,eb5,g5,c6] ~@5",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A@3 B A@2 C@2 A@3 C@2 A@8 B A@3 B A@2 C@2 A@3 C@4 D ~@24 E A@33 B A@3 B A@2 C@2 A@3 C A@8 B A@3 B A@2 C@6 A@3 F
  ~
>`.pickRestart({
  A: "x!2", B: "x ~@5 x ~@4 x", C: "x ~ x!2", D: "x", E: "~@11 x", F: "x ~@2 x ~ x",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@3 B A@8 C@2 A@7 B A@3 B A@8 C@3 D ~@24 E C A@32 B A@3 B A@8 C A@7 B A@3 B A@3 C@5 F@3 G D
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@5 x!2 ~", C: "x!2 ~ x", D: "x", E: "~@9 x!2 ~", F: "x!4", G: "x ~@2 x ~@2 x ~@2 x ~ x",
})).gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<[x!12]!41 x ~ [x!4]!23 [x ~@2 x ~@2 x ~@2 x!3] [x!12]!71 ~>").gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~ B C A ~@2 B C A ~@8 A ~@3 A ~ B C A ~@2 B C@3 A ~@25 A ~@33 A ~@3 A ~ B C A ~@2 B A ~@8 A ~@3 A ~ B C@5
  ~@4 A
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x ~@2 x",
})).gain(0.47)

// drums · ride
const ride = s("rd").struct("<~@43 [~ x]!24 ~@72>").gain(0.29)

stack(
  electric_guitar_jazz, epiano1, brass_section, orchestra_hit, bass, string_ensemble_1, kick, snare, hihat, crash, ride
)

More by The Alan Parsons Project