Strudelify

Sirius Eye in the Sky

The Alan Parsons Project

KeyB minorTempo110 bpm
0:00/0:00
// Sirius   Eye in the Sky — The Alan Parsons Project
// 110 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 4 "thème echo" harpsichord (copy of ch 3 "thème" harpsichord, 0.188 beats late)
// note: Full arrangement: all 179 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitare (harmonique).
setcpm(110/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 · string ensemble 1
const string_ensemble_1 = note(`<
  A@8 ~@4 B@2 C@2 D@2 B@2 E@2 F@2 G@2 E@4 F@2 H@2 I@2 J@2 K@2 L@2 M@2 J@2 N@2 ~@131
>`.pickRestart({
  A: "[b0,b1]/8", B: "[b0,b1]/2", C: "[g1,g2]/2", D: "[e1,e2]/2", E: "[b0,b1,b3,d4,f#4]/2", F: "[g1,g2,g3,b3,d4]/2",
  G: "[~ c#4 d4 e4, [e1,e2,e3,g3,b3]]/2", H: "[~ c#5 d5 e5, [e1,e2,e3,g3,b3,b4]]/2", I: "[b0,b1,b3,d4,f#4,f#5]/2",
  J: "[b1,b3,d4,f#4]/2", K: "[g2,g3,b3,d4]/2", L: "[~ c#6 d6 e6, [e2,e3,g3,b3,b5]]/2", M: "[b1,b3,d4,f#4,f#6]/2",
  N: "g2/2",
})).s("gm_string_ensemble_1").gain(0.32)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@36 A@2 B@2 C@2 A@4 B@2 ~@131>".pickRestart({
  A: "b0/2", B: "g1/2", C: "e1/2",
})).s("gm_string_ensemble_1").gain(0.16)

// chords · epiano2 · "piano chorus"
const epiano2 = note(`<
  ~@52 A@2 B@2 C@2 D@2 E F G H E I J K L@2 M@2 N O P@2 E F G H E I J K L@2 M@2 N O Q@2 R S T U V S T W X@2 A@2 B@2 C@2
  D@2 E F G H E I J K L@2 M@2 N O Q@2 R S T U V S T W X@2 A@2 B@2 C@2 D@2 R S T Y V S T Z X@2 A@2 B@2 C@2 D@2 A@2 B@2
  C@2 D@2 A@2 B@2 C@2 AA@2 ~
>`.pickRestart({
  A: "[c#4 d4 f#4 b3@3 c#4 a3@8 ~]/2", B: "[c#4 d4 f#4 b3@3 c#4 a3@3 b3 g3@4 ~]/2",
  C: "[c#4@2 d4@2 f#4@2 b3@6 c#4@2 a3@17 ~]/2", D: "[c#4@2 d4@2 f#4@2 b3@6 c#4@2 a3@6 b3@2 g3@7 ~@3]/2",
  E: "[a3,c#4,e4]@6 [a3,d4,f#4]@9 ~", F: "[a3,c#4,e4]@5 ~ [a3,d4,f#4]@9 ~", G: "~@2 f#4 b3@5, c#4 ~@3, ~@2 d4@13 ~",
  H: "c#4 ~ f#4 b3@2 c#4 a3@2, ~@2 d4@9 ~@5", I: "[a3,c#4,e4]@5 ~ [a3,d4,f#4]@10", J: "c#4 ~ f#4 b3@5, ~ d4@7",
  K: "c#4@2 ~@2 f#4 ~ b3@4 c#4@2 a3@3 ~, ~ d4@5 ~@2", L: "[[g3,b3,e4]@14 [g3,a#3,d4,e4]@15 ~@3]/2",
  M: "[[a3,d4,f#4]@12 ~@2 [g#3,b3,d4,f#4]@15 ~@3]/2", N: "[a3,d4,f#4]", O: "[g3,b3,d4,f#4]@15 ~", P: "[a3,d4,f#4]/2",
  Q: "[[a3,d4]@13 [a3,d4]!3, f#4, ~@26 f#3 ~ f#3 ~ f#3 ~]/2", // D5
  R: "[e4,f#4] ~ [e4,f#4,a4] ~ [e4,f#4,a4] ~ [d4,f#4,a4]@9 ~, a4 ~@7", // Esus2 F#m7 D
  S: "[e4,f#4,a4] ~ [e4,f#4,a4] ~ [e4,f#4,a4] ~ [d4,f#4,a4]@10", // F#m7 D
  T: "~@4 [c#4,f#4,a4] ~ [c#4,f#4,a4] ~ [c#4,f#4,a4] ~ [a3,c#4,f#4] ~ [a3,c#4,f#4] ~ [a3,c#4,f#4] ~", // F#m
  U: "[f#3,a3,c#4]@2 [f#3,a3,c#4] ~@5 [f#3,a3,c#4]@2 [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~, ~ f#4 ~@2 f#4@2 ~@2", // F#m
  V: "[e4,f#4,a4] ~ [e4,f#4,a4] ~ [e4,f#4,a4] ~ [d4,f#4,a4]@9 ~", // F#m7 D
  W: "[f#3,a3,c#4]@2 [f#3,a3,c#4] ~@5 [f#3,a3,c#4,f#4]@4 ~@4, ~ f#4 ~@6", // F#m
  X: "[[g3,b3,d4,e4]@13 ~ [g3,a#3,d4,e4]@17 ~]/2", Y: "[f#3,a3,c#4]@10 [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~",
  Z: "[f#3,a3,c#4]@3 ~", AA: "[c#4 d4 f#4 b3@3 c#4 a3@3 ~@6]/2",
})).s("gm_epiano2").gain(0.26)

// chords · distortion guitar · "accords distortion"
const distortion_guitar = note(`<
  ~@12 A@2 B@2 C@2 A@4 B@2 C@2 A@2 D@2 E@2 C@2 A@2 D@2 E@2 C@2 A@2 D@2 E@2 D@2 E@2 ~@92 F@2 G@2 H@2 G@2 I@2 ~@25
>`.pickRestart({
  A: "[b2,f#3,b3]/2", B: "[[g2,d3,g3]@31 ~]/2", C: "[e2,b2,e3]/2", D: "[b2,a3,d4]/2", E: "[[g2,f#3,b3]@31 ~]/2",
  F: "[[d3,a3,d4]@31 ~]/2", G: "[f#3@18 [f#3,a3,c#4,f#4] ~@5 [f#3,a3,c#4,f#4]@4 ~@4, [f#2,c#3]]/2", H: "[d3,a3,d4]/2",
  I: "[g2,d3,g3]", // G5
})).s("gm_distortion_guitar").gain(0.24)

// other · distortion guitar · "guitare dist solo"
const distortion_guitar_2 = note("<~@35 A B@2 C@2 D@2 E@2 ~@117 F G@2 H I@3 J K G@2 H L ~@5>".pickRestart({
  A: "~@10 e4@2 b4 f#4 c#5 f#4", B: "[c#5@21 ~@3 c#5@7 b4]/2", C: "[b4@21 ~ f#4@2 b4 ~ c#5 ~ d5@2 e5 ~]/2",
  D: "[e5@11 ~ e5@3 d5]/2", E: "[b5@15 ~]/2", F: "~@5 e4@2 d4", G: "[e4@2 a4 f#4@2 d4 b3 e3@3 a3 f#3@2 d3 b2 f#2]/2",
  H: "~ g2 b2 d3 a3 f#3 d4 a3", I: "[e4@2 a3 ~ e4@2 a4@2 f#4@2 g4@2 b4@2 c#5@6 ~@2 b4@6 b4@2 a4@6 d5@2 b4@10]/3",
  J: "~@2 b4@2 c#5 ~ d5 ~ d5@2 a4@2 b4@2 g4 ~", K: "a4@2 g4@2 b4@2 f#4 ~ e4@2 e4@4 d4@2", L: "e4 ~@7",
})).s("gm_distortion_guitar").gain(0.24)

// other · distortion guitar · "guitare dist solo" · soft notes
const distortion_guitar_soft = note("<~@173 A@3 B C ~>".pickRestart({
  A: "[~@2 a3 ~ e4@2 a4@2 f#4@2 g4@2 b4@2 c#5@6 ~@2 b4@6 b4@2 a4@6 d5@2 b4@10]/3",
  B: "~@2 b4@2 c#5 ~ d5 ~ d5@2 a4@2 b4@2 g4 ~", C: "a4 ~@7",
})).s("gm_distortion_guitar").gain(0.1)

// chords · electric guitar muted · "guitare mute basse"
const electric_guitar_muted = note(`<
  ~@28 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 A@2 B@2 A@2 B@2 A@2 B@2 D@2 A@2 D@2 A@2 B@2 A C D B D@4 A@2 D@2 A@2 B@2 A C D B
  D@4 E@2 D@2 E@2 B F A@2 B@2 A@2 B@2 D@2 A@2 D@2 A@2 B@2 A C D B D@4 E@2 D@2 E@2 B F A@2 B@2 A@2 B@2 D@2 E@2 D@2 E@2 B
  F A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A G H ~@2
>`.pickRestart({
  A: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // B5
  B: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  C: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~", // E5
  D: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~", // D5
  E: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3] ~", F: "[g2,d3]",
  G: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~", H: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
})).s("gm_electric_guitar_muted").gain(0.16)

// chords · epiano2 · "piano chorus 2"
const epiano2_2 = note("<~@20 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 E@2 ~@129>".pickRestart({
  A: "[~@2 b5 ~@7 d5 f#5 g5 f#5 ~@2, b4@5 ~ b4@4 a5@4 d5@4 b4@13 ~, ~ d5@2 ~ d5@2 b4@2 g5@2 ~@6]/2",
  B: "[~@10 b4 d5 e5 d5 ~@2, g4 g5 b4 g4 e5 ~@3, ~ b4@2 g4@2 f#5@2 b4@2 g4@6 ~]/2",
  C: "[~@2 e5 ~@2 d5 ~@5 b4 c#5 b4 ~@2, e4@5 ~ e4@5 ~ e4@4 c#5@4 g4@10 ~@2, ~@2 g4@5 ~ g4@5 ~ g4@4 e4@12 ~@2]/2",
  D: "[~@6 a5 ~@15 f#5@2 g5@2 f#5@2 ~@4, b4 b5 d5 b4 g5 d5 ~@2, ~ d5@2 b4@2 a5@2 d5@2 b4@6 ~]/2",
  E: "[~@2 b5 ~@4 d5@2 ~@7, b4@5 ~ b4@4 a5@4 ~@18, ~ d5@2 ~ d5@2 b4@2 ~@8]/2",
})).s("gm_epiano2").gain(0.29)

// chords · epiano2 · "piano chorus 2" · soft notes
const epiano2_soft = note("<~@49 A B@2 ~@127>".pickRestart({
  A: "~@2 d5 f#5 g5 f#5 ~@2, g5 ~@3, ~@2 b4@13 ~",
  B: "[~@10 b4 d5 e5 d5 ~@2, g4 g5 b4 g4 e5 ~@3, ~ b4@2 g4@2 f#5@2 b4@2 g4@6 ~]/2",
})).s("gm_epiano2").gain(0.16)

// other · distortion guitar · "Distorsion douce"
const distortion_guitar_3 = note("<~@55 A@2 B@3 ~@76 C@2 D@2 E@2 F@2 ~@35>".pickRestart({
  A: "[~@6 d5@25 ~]/2", B: "[~@2 b4@7 ~@3]/3", C: "[b3@4 d4@2 b3@6 c#4@2 a3@15 ~@3]/2",
  D: "[b3@4 d4@2 b3@6 c#4@2 g3@7 ~ f#3 ~ b3 ~ c#4@2 [c#4,d4] ~ e4 ~]/2", E: "[c#4@4 d4@2 b3@6 c#4@2 a3@17 ~]/2",
  F: "[b3@2 d4 b3@3 c#4 g3@6 ~@3]/2",
})).s("gm_distortion_guitar").gain(0.38)

// chords · acoustic guitar steel · "guitare folk"
const acoustic_guitar_steel = note(`<
  ~@76 A@2 B@2 A@2 B C@8 D@2 E@6 F@8 G@4 A B@2 A@2 B C@8 D@2 E@6 F@8 H@2 I@8 F@8 J@16 K@4
>`.pickRestart({
  A: "~@7 a4, e4, ~ f#4@3 f#4@2 f#4@2, ~@2 a4@3 a4@2 ~, ~@3 d4@5",
  B: "~@7 a4, e4, ~ f#4@4 a4 f#4@2, ~ a4 d4@2, ~@3 b3@5",
  C: "[~@63 d4, e4@14 a4 g4@2 a#3@2 g4@4 g4@2 f#3 g4@3 f#3@10 e4@2 d3 e4 d4@3 e4 d4@2 g3 e4@3 g3@11, ~ f#4@4 a4 f#4@15 a#3@10 f#4@2 e3 f#4 e4@3 f#4@16 e4@4 e4@4 e4@2, ~@2 a4@2 d4@14 a4@4 a4@15 e3@14 d4@4 d4@4 d4@4 ~, ~@3 b3@4 a4@2 b3 a4 g4@2 b3@14 f#4@3 g4@15 d3@12 d3@4 d3@3]/8",
  D: "[~@15 a4, ~ d3@15, ~ e4@3 e4@4, ~@3 d4@7 a4@2 f#4 a4 f#4@2, ~@9 f#4@2 d4@5]/2",
  E: "[~@47 a4, e4@8 e4@7 a4@2 f#4@3 f#4@2 f#4@3 f#4@2 d4@7 a4@3 a4@2 a4@3 a4@2 f#4 a4 f#4@2, ~ f#4@3 f#4@2 f#4@3 f#4@2 c#4@7 a4@3 a4@2 a4@3 a4@2 f#4 a4 f#4@2 e4@8 e4@8, ~@2 a4@3 a4@2 a4@3 a4@2 f#4 a4 f#4@2 e4@8 e4@7 a4@2 f#4@3 f#4@2 f#4@3 f#4@2 c#4@5, ~@3 d4@16 c#4@16 d4@13]/6",
  F: "[~@63 a4, e4@10 a4 g4@6 a#3@14 a4@2 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@2, ~ f#4@3 f#4@2 f#4@13 g4@15 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 ~, ~@2 a4@3 a4@2 a4@2 b3@15 c#4@4 d4 a4 d4@2 c#4@8 c#4@8 c#4@8 c#4@8, ~@3 c#4@15 a4@7 d4 a4 b3@8 b3@8 b3@8 b3@8 b3@5]/8",
  G: "[~@31 a4, c#4@8 c#4@8 c#4@12 f#4 a4 f#4@2, ~ d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 f#4 a4 d4@5, ~@2 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4 e4@8, ~@3 b3@8 b3@8 b3@13]/4",
  H: "[~@15 a4, c#4 c#4, ~ d4@3 d4@2 d4@3 d4@3 d4@2 d4@2, ~@2 a4@3 a4@2 a4@3 a4@3 a4@2 ~, ~@3 b3@8 b3@5]/2",
  I: "[~@63 a4, c#4@12 f#4 a4 f#4@2 e4@8 e4@7 a4@2 f#4@3 f#4@2 f#4@3 f#4@2 d4@7 a4@3 a4@2 a4@3 a4@2 f#4 a4 f#4@2, ~ d4@3 d4@2 d4@3 f#4 a4 d4@7 a4@3 a4@2 a4@3 a4@2 f#4 a4 f#4@2 e4@8 e4@7 a4@2 f#4@3 f#4@2 f#4@3 f#4@2 c#4@5, ~@2 a4@3 a4@2 a4 e4@7 a4@2 f#4@3 f#4@2 f#4@3 f#4@2 c#4@7 a4@3 a4@2 a4@3 a4@2 f#4 a4 f#4@2 e4@8 e4@8, ~@3 b3@16 d4@16 c#4@16 d4@13]/8",
  J: "[~@63 a4, c#4 c#4 c#4 c#4 c#4 c#4 c#4 c#4, ~ d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@3 d4@3 d4@2 d4@2, ~@2 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 a4@3 a4@3 a4@2 ~, ~@3 b3@8 b3@8 b3@8 b3@8 b3@8 b3@8 b3@8 b3@5]/8",
  K: "[~@15 a4@16 ~, c#4 c#4@2 ~, ~ d4@3 d4@2 d4@3 d4@3 d4@2 d4@16 ~@2, ~@2 a4@3 a4@2 a4@3 a4@3 a4@2 ~@17, ~@3 b3@8 b3@16 ~@5]/4",
})).s("gm_acoustic_guitar_steel").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~@8 A B@39 ~@4 B@23 C B@15 D B@9 E B@23 D B@9 E B@7 D B@9 E B@19 ~@6>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~ x ~ x!4", D: "x!8", E: "x",
})).gain(0.33)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@48 [x!4]!4 ~@23 [~ x ~ x ~@4] ~@97 [x!4]!4 ~@2>").gain(0.09)

// drums · snare
const snare = s("sd").struct(`<
  ~@27 A B@7 C B@7 C B@7 D B@23 E B@15 E B@9 ~ B@23 E B@9 ~ B@7 E B@9 ~ B@23 ~@2
>`.pickRestart({
  A: "~@8 x!3 ~ x ~ x ~", B: "~ x ~ x", C: "~@4 x ~@3 x!3 ~ x ~ x ~", D: "~@3 x", E: "~ x!7",
})).gain(0.23)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@8 B@27 ~@4 C B@49 ~ B@33 ~ B@17 ~ B@18 ~@7>".pickRestart({
  A: "x!4", B: "x!8", C: "~@7 x",
})).gain(0.19)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@47 [x!8]!4 [x!7 ~] ~@120 [x!8]!3 [x ~ x ~ x!4] ~@3>").gain(0.05)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@49 A@2 ~@32 A@2 ~@16 A@2 ~@25
>`.pickRestart({
  A: "x",
})).gain(0.33)

stack(
  string_ensemble_1, string_ensemble_1_soft, epiano2, distortion_guitar, distortion_guitar_2, distortion_guitar_soft,
  electric_guitar_muted, epiano2_2, epiano2_soft, distortion_guitar_3, acoustic_guitar_steel, kick, kick_soft, snare,
  hihat, hihat_soft, crash
)

More by The Alan Parsons Project