Strudelify
Millenium Prayer cover art

Millenium Prayer

Cliff Richard

KeyD majorTempo95 bpm
0:00/0:00
// Millenium Prayer — Cliff Richard
// 95 bpm, 4/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 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 17 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(95/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, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A B C D E F G A H I E G E J K H E L C M N O K P ~ Q A J Q R P J S C H O N T N I G E A I A M P L M P C I P T H U T C
  Q L E R A F S C H B P R E F G E ~@8 A U A M A I D E Q U Q D A J M E C E ~@3
>`.pickRestart({
  A: "d2@3 d3 ~@2 d2@9 d2", B: "a1@2 ~ a1 ~@2 a1@7 a2 ~ a1", C: "d2@3 d2 ~@2 d2@8 d2!2",
  D: "g2@2 ~ g2 ~@2 g2@7 d2 g2!2", E: "d2@2 ~ d2 ~@2 d2@8 d2 a1", F: "a1@2 ~ a1 ~@2 a1@8 a1 e1",
  G: "g2@2 ~ g2 ~@2 g2@8 g2 d2", H: "d2@2 ~ d2 ~@2 d2@7 a1 d2!2", I: "a1@3 a2 ~@2 a1@9 a1",
  J: "a1 ~@2 a1 ~@2 a1@7 e1 a1!2", K: "g1@3 g1 ~@2 g1@8 g1!2", L: "a1@2 ~ a1 ~@2 a1@7 e1 a1!2",
  M: "g1@3 g2 ~@2 g1@9 g1", N: "d2@2 ~ d2 ~@2 d2@9 d2", O: "a1@3 a1 ~@2 a1@8 a1!2", P: "d2 ~@2 d2 ~@2 d2@7 a1 d2!2",
  Q: "d2@2 ~ d2 ~@2 d2@7 d3 ~ d2", R: "g1@2 ~ g1 ~@2 g1@7 g2 ~ g1", S: "g2 ~@2 g2 ~@2 g2@7 d2 g2!2",
  T: "g1@2 ~ g1 ~@2 g1@9 g1", U: "a1@2 ~ a1 ~@2 a1@9 a1",
})).s("gm_fretless_bass").gain(0.25)

// chords · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note(`<
  ~ A B C D A B D C@2 B A D A B D C@2 B C D C B D C ~ C A E C D A B D A C E A D C B F C A E C D C E D C A E A D C B F
  A@2 B C D C E F C@2 B C F C B F C ~@8 C B C F C B D C@2 B A D C B D A C@3 ~@2
>`.pickRestart({
  A: "[f#4,d5]", B: "[a4,e5]", C: "[d5,a5]", D: "[d5,b5]", E: "[c#4,a4]", F: "[g4,d5]",
})).s("gm_string_ensemble_2").gain(0.1)

// other · french horn
const french_horn = note(`<
  ~@27 A B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A ~@8 A B A C A B C
  A@2 B A C A B C A@3 ~@3
>`.pickRestart({
  A: "d3", B: "a2", C: "g2",
})).s("gm_french_horn").gain(0.2)

// other · french horn · soft notes
const french_horn_soft = note("<~ A B C D E B F C@2 G C H A G D C A G E H C B F C ~@79>".pickRestart({
  A: "[d4,a4]", B: "[a3,c#4]", C: "[d4,f#4]", D: "[g4,b4]", E: "[f#4,a4]", F: "[d4,g4]", G: "[a3,e4]", H: "[d4,b4]",
})).s("gm_french_horn").gain(0.12)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@27 A B C D E B D A F G E H E B H C A B E H E I D C F I C J C B K C E G C H C I K F C I C K A L D A ~@8 C I E H C B D
  F M G E K E B J C F A ~@3
>`.pickRestart({
  A: "~@2 [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~@3 [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~, d3", // D
  B: "~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~@3 [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~, a2", // A
  C: "d3@8 d3@3 ~ [d3,d4,a4,f#5,a5] ~@3, [f#4,a4,d5,f#5]@3 ~", D: "[g2,b3,b4,d5]", E: "[d3,a3,a4,d5]",
  F: "[d3,d4,a4,f#5]@4 ~@2 [d3,d4,a4,f#5] ~ [d3,d4,a4,f#5] ~@3 [d3,a3,a4,d5,a5] ~@3", // D D5
  G: "a2@8 a2@3 ~ [a2,a3,e4,c#5,e5] ~@3, [c#4,e4,a4,c#5]@3 ~", // A
  H: "[g2,d4,b4,g5]@4 ~@2 [g2,d4,b4,g5] ~ [g2,d4,b4,g5] ~@3 [g2,b3,b4,d5,b5] ~@3", I: "[a2,e3,e4,a4]",
  J: "~@2 [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~@3 [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~, g2", // G
  K: "g2@8 g2@3 ~ [g2,d4,b4,g5,b5] ~@3, [g4,b4,d5,g5]@3 ~", // G
  L: "[a2,a3,e4,c#5]@4 ~@2 [a2,a3,e4,c#5] ~ [a2,a3,e4,c#5] ~@3 [a2,e3,e4,a4,e5] ~@3", // A A5
  M: "~@2 [f#3,a3,d4] ~ [f#3,a3,d4] ~ [f#3,a3,d4] ~@3 [f#3,a3,d4] ~ [f#3,a3,d4] ~ [f#3,a3,d4] ~, d3", // D
})).s("gm_string_ensemble_1").gain(0.2)

// chords · church organ
const church_organ = note(`<
  ~@27 A B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A ~@8 A B A C A B C
  A@2 B A C A B C A@3 ~@3
>`.pickRestart({
  A: "[d3,a3,d4,f#4]", B: "[a2,e3,a3,c#4]", C: "[g2,d3,g3,b3]",
})).s("gm_church_organ").gain(0.15)

// chords · tremolo strings
const tremolo_strings = note(`<
  ~@27 A B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A ~@8 A B A C A B C
  A@2 B A C A B C A@3 D ~@2
>`.pickRestart({
  A: "~@2 a3 ~ d4 ~ a3 ~ d4 ~ a3 ~ d4 ~ a3 ~, a4", B: "~@2 e3 ~ a3 ~ e3 ~ a3 ~ e3 ~ a3 ~ e3 ~, e4",
  C: "~@2 b3 ~ d4 ~ b3 ~ d4 ~ b3 ~ d4 ~ b3 ~, b4", D: "[a3,d4,a4]",
})).s("gm_tremolo_strings").gain(0.15)

// chords · french horn
const french_horn_2 = note(`<
  ~@27 A B A C D B E A@2 F G H A I H D G F D H D F C G A F D H D B E A D B A E G F H D A B D E G B H G ~@8 D B G E A B H
  G D I A H A I E A@3 ~@3
>`.pickRestart({
  A: "~ [a3,f#4,a4]", B: "[e3,c#4,e4]", C: "[b3,g4,b4]", D: "[a3,f#4,a4]", E: "~ [b3,g4,b4]", F: "~ [e3,c#4,e4]",
  G: "~ [f#4,a4], a3", H: "~ [g4,b4], b3", I: "~ [c#4,e4], e3",
})).s("gm_french_horn").gain(0.24)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1_2 = note(`<
  ~@27 A B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A@2 B A C A B C A ~@8 A B A C A B C
  A@2 B A C A B C A@3 ~@3
>`.pickRestart({
  A: "[d2,f#3,a3,d4]", B: "[a2,c#3,e3,a3]", C: "[g2,g3,b3,d4]",
})).s("gm_string_ensemble_1").gain(0.2)

// other · timpani
const timpani = note(`<
  ~@27 A B A C A B D E A B A C A B D E A B A C A B D E A B A C A B D E A B A C A B D E A B A C A B D E ~@8 A B A C A B D
  E A B A C A B D E A@2 ~@3
>`.pickRestart({
  A: "d3@13 ~ d3 ~", B: "a2@9 ~@3 a2@2 ~@2", C: "g2@9 ~@3 g2@2 ~@2", D: "g2@13 ~ g2 ~", E: "d3@9 ~@3 d3@2 ~@2",
})).s("gm_timpani").gain(0.35)

// other · trumpet
const trumpet = note("<~@67 A@2 B C D E F G ~@8 A@2 B C D E F G A@2 B C D E F G ~@5>".pickRestart({
  A: "[~@2 d4 e4 f#4@8 ~@2 e4 ~ e4 ~ a4 ~ a4@7 ~@2 b4 ~@2, ~@15 d4@2 ~@11 a4@2 ~@2]/2", B: "a4@5 ~ d5 ~ d5@6 b4 ~",
  C: "d5@2 b4 ~ a4 b4 a4 ~ g4@6 a4 g4", D: "f#4 ~ a4 ~ a4 [a4,b4]!4 a4 [a4,b4]!2 ~@2 g4 f#4",
  E: "e4 ~ a4 ~ a4@8 ~@2 d5 ~", F: "d5@6 b4 ~ b4@5 ~ a4 g4", G: "f#4@2 d4 ~ d4@12",
})).s("gm_trumpet").gain(0.28)

// drums · kick
const kick = s("bd").struct("<~@103 [~ x]>").gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E F G H E I C J E K L M L C@2 N G O C P E Q R N L S E Q T S E U C V E F R U E W C X G Y R Z E AA AB AC E M R
  AD E AE R AF E H C Y E AG C AH G AI C AJ E AK AL AA E AM C AK T AN L AO E AP L AQ E H G H E AD G A E AR Y P AS AT
>`.pickRestart({
  A: "x ~@2 x!4 ~ x ~@3 x ~ x ~", B: "x ~@2 x!4 ~ x ~ x ~ x ~ x ~", C: "x ~ x ~ x!3 ~ x ~ x ~ x ~@3",
  D: "x ~@2 x!2 ~ x!3 ~ x ~ x ~ x ~", E: "x ~@3 x!3 ~ x ~@3 x ~@3", F: "x ~@2 x!2 ~ x ~ x ~@3 x ~@3", G: "x!7 ~",
  H: "x ~ x!7 ~ x ~ x ~ x ~", I: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", J: "x ~ x!3 ~ x!3 ~@3 x ~@3",
  K: "x ~@3 x ~ x!3 ~ x ~ x ~@3", L: "x ~@3 x!3 ~ x ~ x ~ x ~@3", M: "x ~ x!6", N: "x ~@2 x!2 ~ x!3 ~ x ~ x ~@3",
  O: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", P: "x ~ x!5 ~ x ~ x ~ x ~@3", Q: "x ~@3 x!2 ~@2 x ~ x ~ x ~ x ~",
  R: "x ~ x ~ x!3 ~ x ~@3 x ~@3", S: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", T: "x ~ x!3 ~ x ~",
  U: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3", V: "x ~ x ~ x!5 ~@3 x ~@3", W: "x ~@2 x!6 ~@3 x ~ x ~",
  X: "x ~ x ~ x!2 ~ x!2 ~ x ~ x ~ x ~", Y: "x ~ x ~ x!5 ~ x ~ x ~@3", Z: "x ~ x!3 ~ x!3 ~@3 x ~ x ~",
  AA: "x ~ x!3 ~ x!3 ~ x ~ x ~ x ~", AB: "x!5 ~ x ~", AC: "x ~ x!5 ~", AD: "x ~@2 x!6 ~ x ~ x ~ x ~",
  AE: "x ~@2 x!4 ~ x ~ x ~ x ~@3", AF: "x ~ x!3 ~ x!3 ~ x ~ x ~@3", AG: "x ~ x!3 ~ x ~ x ~ x ~ x ~@3",
  AH: "x ~@2 x!6 ~@3 x ~@3", AI: "x ~@3 x!5 ~ x ~ x ~@3", AJ: "x ~@2 x!3 ~ x!2 ~@3 x ~ x ~",
  AK: "x ~@3 x!5 ~ x ~ x ~ x ~", AL: "x ~@3 x!2 ~ x!2 ~@3 x ~ x ~", AM: "x ~@3 x!2 ~ x!2 ~ x ~ x ~ x ~",
  AN: "x ~@2 x!3 ~@2 x ~ x ~ x ~ x ~", AO: "x!3 ~ x ~ x!2", AP: "x ~ x!4 ~@2 x ~ x ~ x ~ x ~",
  AQ: "x ~ x!7 ~ x ~ x ~@3", AR: "x ~@3 x ~ x!3 ~@3 x ~ x ~", AS: "x!8", AT: "x!2 ~@6 x ~@7",
})).gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A ~ B ~ C ~ B ~ D ~ B ~ C ~ B ~ A ~ B ~ E ~ B ~ D ~ D ~ B ~ B ~ B ~ B ~ B ~ F ~ B ~ A ~ F ~ A ~ B ~ D ~ B ~ F ~ B
  ~ E ~ B ~ A ~ B ~ C ~ B ~ A ~ B ~@3 B ~ A ~ C ~ C ~ B ~ E ~ B ~ C ~ B ~ D ~ B ~@4 G
>`.pickRestart({
  A: "~@14 x!2", B: "~@7 x ~@6 x!2", C: "~@7 x ~@6 x ~", D: "~@7 x ~@7 x", E: "~@7 x", F: "~@15 x", G: "~@2 x!6 ~@8",
})).gain(0.12)

// drums · crash
const crash = s("cr").struct(`<
  A@2 ~ A@3 ~ A@9 ~ A@3 ~ A ~ A@9 ~ A@11 ~ A ~ A ~ A@15 ~ A@13 ~ A ~ A@21 B C
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.36)

stack(
  bass, string_ensemble_2, french_horn, french_horn_soft, string_ensemble_1, church_organ, tremolo_strings,
  french_horn_2, string_ensemble_1_2, timpani, trumpet, kick, snare, snare_soft, crash
)

More by Cliff Richard