Strudelify

Holy Lamb (Song for Harmonic Convergence)

Yes

KeyF♯ majorTempo76 bpm
0:00/0:00
// Holy Lamb (Song for Harmonic Convergence) — Yes
// 76 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 ocarina (copy of ch 7 ocarina, 0.313 beats late)
// note: Full arrangement: all 65 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76/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.

// other · pad metallic
const pad_metallic = note("<~@9 A B@2 C@2 D@2 E F G H@2 I J ~@33 K@2 ~@3 L M@2 ~>".pickRestart({
  A: "~@5 a#4@43", B: "[~@3 a#3@28 ~@17]/2", C: "[~ [a#3,d#4]@52 ~@43]/2", D: "[g#5@15 ~]/2", E: "b5@23 ~",
  F: "a#5@23 ~", G: "~@3 [f4,g#4]", H: "[[f#4,a#4]@23 ~ g#5@67 ~@5]/2", I: "f#5@23 ~", J: "f5@7 ~", K: "[a2@43 ~@5]/2",
  L: "f#4@47 ~", M: "[f4@83 ~@13]/2",
})).s("gm_pad_metallic").gain(0.34)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@26 A B C D E@2 F G H I J K L M N@2 H I K J L M N O I@2 K J M L N O I H J@2 M L O
>`.pickRestart({
  A: "f#3@3 f#3@2 ~ f#3@2 ~ f#3@3 ~@3 f#3@2 ~ f#3@3 f#3@3 f#3@2 ~ f#3@2 ~ f#3@3 ~@15",
  B: "f#3@3 f#3@2 ~ f#3@2 ~ f#3@3 ~@3 f#3@2 ~ f#3@3 f#3@3 f#3@3 f#3@2 ~ f#3@3 ~@15",
  C: "d#3@3 d#3@2 ~ d#3@2 ~ d#3@3 ~@3 d#3@2 ~ d#3@3 d#3@3 d#3@2 ~ d#3@2 ~ d#3@3 ~@15",
  D: "d#3@3 d#3@2 ~ d#3@2 ~ d#3@3 ~@3 d#3@2 ~ d#3@3 d#3@3 d#3@3 d#3@2 ~ d#3@3 ~@15",
  E: "c#3@3 c#3@2 ~ c#3@2 ~ c#3@3 ~@3 c#3@2 ~ c#3@3 c#3@3 c#3@2 ~ c#3@2 ~ c#3@3 ~@15",
  F: "b2@3 b2@2 ~ b2@2 ~ b2@3 ~@3 b2@2 ~ b2@3 b2@3 b2@3 b2@2 ~ b2@3 ~@15",
  G: "b2@3 b2@2 ~ b2@2 ~ b2@3 ~@3 b2@2 ~ b2@3 b2@3 b2@2 ~ b2@2 ~ b2@3 ~@15",
  H: "[c#3,f#3]@3 [c#3,f#3]@2 ~ [c#3,f#3]@3 [c#3,f#3]@3 ~@3 [c#3,f#3]@2 ~ [c#3,f#3]@3 ~@3 [c#3,f#3]@3 [c#3,f#3]@2 ~ [c#3,f#3]@3 ~@15", // F#5
  I: "[c#3,f#3]@3 [c#3,f#3]@2 ~ [c#3,f#3]@3 [c#3,f#3]@3 ~@3 [c#3,f#3]@2 ~ [c#3,f#3]@3 ~@3 [c#3,f#3]@2 ~ [c#3,f#3]@2 ~ [c#3,f#3]@3 ~@15", // F#5
  J: "[a#2,d#3]@3 [a#2,d#3]@2 ~ [a#2,d#3]@3 [a#2,d#3]@3 ~@3 [a#2,d#3]@2 ~ [a#2,d#3]@3 ~@3 [a#2,d#3]@2 ~ [a#2,d#3]@2 ~ [a#2,d#3]@3 ~@15", // D#5
  K: "[a#2,d#3]@3 [a#2,d#3]@2 ~ [a#2,d#3]@3 [a#2,d#3]@3 ~@3 [a#2,d#3]@2 ~ [a#2,d#3]@3 ~@3 [a#2,d#3]@3 [a#2,d#3]@2 ~ [a#2,d#3]@3 ~@15", // D#5
  L: "[g#2,c#3]@3 [g#2,c#3]@2 ~ [g#2,c#3]@3 [g#2,c#3]@3 ~@3 [g#2,c#3]@2 ~ [g#2,c#3]@3 ~@3 [g#2,c#3]@2 ~ [g#2,c#3]@2 ~ [g#2,c#3]@3 ~@15", // C#5
  M: "[g#2,c#3]@3 [g#2,c#3]@2 ~ [g#2,c#3]@3 [g#2,c#3]@3 ~@3 [g#2,c#3]@2 ~ [g#2,c#3]@3 ~@3 [g#2,c#3]@3 [g#2,c#3]@2 ~ [g#2,c#3]@3 ~@15", // C#5
  N: "[f#2,b2]@3 [f#2,b2]@2 ~ [f#2,b2]@3 [f#2,b2]@3 ~@3 [f#2,b2]@2 ~ [f#2,b2]@3 ~@3 [f#2,b2]@2 ~ [f#2,b2]@2 ~ [f#2,b2]@3 ~@15", // B5
  O: "[f#2,b2]@3 [f#2,b2]@2 ~ [f#2,b2]@3 [f#2,b2]@3 ~@3 [f#2,b2]@2 ~ [f#2,b2]@3 ~@3 [f#2,b2]@3 [f#2,b2]@2 ~ [f#2,b2]@3 ~@15", // B5
})).s("gm_overdriven_guitar").gain(0.25).pan(0.4)

// bass · synth bass 2
const bass = note(`<
  ~@18 A B C D E F G H A B C D E F G I J@2 K L M N O P Q J K L M N O R Q J K L M N S T Q J K L M N S
>`.pickRestart({
  A: "f#1 ~@5 f#2 ~@2 f#2@2 ~ f#1 ~@2 f#2 ~@2 f#2 ~@2 f#1 ~@2 f#2 ~@2 f#2 ~@2 f#1 ~@17",
  B: "f#1 ~@5 f#2 ~@2 f#2@2 ~ f#1 ~@2 f#2 ~@2 f#2@2 ~ f#1 ~@2 f#2 ~@2 f#2 ~@2 f#1@2 ~@16",
  C: "d#1 ~@5 d#2 ~@2 d#2@2 ~ d#1 ~@2 d#2 ~@2 d#2 ~@2 d#1 ~@2 d#2 ~@2 d#2 ~@2 d#1 ~@17",
  D: "d#1 ~@5 d#2 ~@2 d#2@2 ~ d#1 ~@2 d#2 ~@2 d#2@2 ~ d#1 ~@2 d#2 ~@2 d#2 ~@2 d#1@2 ~@16",
  E: "c#1 ~@5 c#2 ~@2 c#2@2 ~ c#1 ~@2 c#2 ~@2 c#2 ~@2 c#1 ~@2 c#2 ~@2 c#2 ~@2 c#1 ~@17",
  F: "c#1 ~@5 c#2 ~@2 c#2@2 ~ c#1 ~@2 c#2 ~@2 c#2@2 ~ c#1 ~@2 c#2 ~@2 c#2 ~@2 c#1@2 ~@16",
  G: "b0 ~@5 b1 ~@2 b1@2 ~ b0 ~@2 b1 ~@2 b1 ~@2 b0 ~@2 b1 ~@2 b1 ~@2 b0 ~@17",
  H: "b0 ~@5 b1 ~@2 b1@2 ~ b0 ~@2 b1 ~@2 b1@2 ~ b0 ~@2 b1 ~@2 b1 ~@2 b0@2 ~@16",
  I: "b0 ~@5 b1 ~@2 b1@2 ~ b0 ~@2 b1 ~@2 b1@2 ~ b0 ~@2 b1 ~@2 b1 ~@2 b0@2 ~@4 [f#1,f#2]@12", // F#
  J: "f#1@17 ~ f#1@5 ~ f#1@12 ~@12", K: "d#1@17 ~ d#1@6 d#1@13 ~@11", L: "d#1@16 ~@2 d#1@5 ~ d#1@12 ~@12",
  M: "c#1@16 ~@2 c#1@5 ~ c#1@12 ~@12", N: "c#1@8 ~ c#1@2 ~ c#1@6 ~@6", O: "b0@16 ~@2 b0@5 ~ b0@13 ~@11",
  P: "b0 c#1 d#1 ~", Q: "f#1@5 ~ f#1@11 ~ f#1@5 ~ f#1@12 ~@12", R: "b0@17 ~ b0@5 ~ b0@12 b0@12", S: "b0 c#1 d#1 f1",
  T: "f#1@12 g#1@12 a#1@12 b1@11 ~",
})).s("gm_synth_bass_2").gain(0.45).pan(0.6)

// other · music box
const music_box = note(`<
  ~@23
  [~@6 c#5 ~ c#5 d#5 ~@2 c#5 ~@3]
  ~
  [~@4 b5 ~@11]
  ~@24
  [g#6 f#6 c#6 a#6 f#6 c#6 b6 f#6 c#6 a#6 f#6 c#6 g#6 f#6 c#6 f#6]!14
  [g#6 f#6 c#6 a#6 f#6 c#6 b6 f#6 c#6 a#6 f#6 c#6 g#6 ~@3]
>`).s("gm_music_box").gain(0.22).pan(0.6)

// other · music box · soft notes
const music_box_soft = note(`<
  ~@22
  [~@11 g#5 d#6 g#5 b5 ~]
  [d#6 g#5 b5 c#6 ~@2 f#6 ~@2 g#6 ~@2 f#6 ~ b5 d#6]
  [b5 d#6 f#5 b5 ~@2 b5 ~ f#5 f#6 d#6 ~ b5 ~@2 d#6]
  [b5 f#5 ~@3 d#6 ~@4 b5 d#6 ~@4]
  ~@39
>`).s("gm_music_box").gain(0.1).pan(0.6)

// chords · acoustic guitar steel · D#m C# B5 D#m C# B5
const acoustic_guitar_steel = note(`<
  [~@4 f#4@5 ~ f#4@2 [a#3,f#4]@6 ~ f#4@2 [a#3,f#4]@3 ~ f#4@2 ~ f#4@5 ~ f#4@14, ~@3 a#3@6 a#3@2 ~@7 a#3@2 ~@4 a#3@3 a#3@6 a#3@15]!6
  [~@4 f4@5 ~ f4@2 [g#3,f4]@6 ~ f4@2 [g#3,f4]@3 ~ f4@2 ~ f4@5 ~ f4@14, ~@3 g#3@6 g#3@2 ~@7 g#3@2 ~@4 g#3@3 g#3@6 g#3@15]!2
  [~@4 f#4@5 ~ f#4@2 [b3,f#4]@6 ~ f#4@2 [b3,f#4]@3 ~ f#4@2 ~ f#4@5 ~ f#4@14, ~@3 b3@6 b3@2 ~@7 b3@2 ~@4 b3@3 b3@6 b3@15]!2
  [~@4 f#4@5 ~ f#4@2 [a#3,f#4]@6 ~ f#4@2 [a#3,f#4]@3 ~ f#4@2 ~ f#4@5 ~ f#4@14, ~@3 a#3@6 a#3@2 ~@7 a#3@2 ~@4 a#3@3 a#3@6 a#3@15]!4
  [~@4 f4@5 ~ f4@2 [g#3,f4]@6 ~ f4@2 [g#3,f4]@3 ~ f4@2 ~ f4@5 ~ f4@14, ~@3 g#3@6 g#3@2 ~@7 g#3@2 ~@4 g#3@3 g#3@6 g#3@15]!2
  [~@4 f#4@5 ~ f#4@2 [b3,f#4]@6 ~ f#4@2 [b3,f#4]@3 ~ f#4@2 ~ f#4@5 ~ f#4@14, ~@3 b3@6 b3@2 ~@7 b3@2 ~@4 b3@3 b3@6 b3@15]!2
  ~@47
>`).s("gm_acoustic_guitar_steel").gain(0.07).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  A B A@2 C D E F G H A B D@2 E F H G A B D C I@2 H G B A D C I J G@2 B A C D I J G H A@2 C D J I G H ~@15
>`.pickRestart({
  A: "~ f#4@5 ~ f#4@2 ~ f#2@5 ~ f#4@2 ~ f#2@2 ~ f#4@2 ~ f#4@5 ~ f#4@17, [f#2,a#2,c#3,f#3,a#3]@6 [f#2,a#2,c#3,f#3]@4 ~@5 [f#2,a#2,c#3,f#3]@3 a#2@2 ~ [f#2,a#2,c#3,f#3,a#3]@3 [f#2,a#2,c#3,f#3,a#3]@6 [f#2,a#2,c#3,f#3,a#3]@18, ~@6 a#3@2 ~ [a#2,c#3,f#3,a#3,f#4]@6 a#3@2 ~ [c#3,f#3,a#3,f#4]@4 ~@26", // F#
  B: "~ f#4@5 ~ f#4@2 ~ f#2@5 ~ f#4@2 ~ f#2@2 ~ f#4@2 ~ f#4@5 ~ f#4@17, [f#2,a#2,c#3,f#3,a#3]@6 [f#2,a#2,c#3,f#3]@4 ~@5 [f#2,a#2,c#3,f#3]@4 ~@2 [f#2,a#2,c#3,f#3,a#3]@3 [f#2,a#2,c#3,f#3,a#3]@6 [f#2,a#2,c#3,f#3,a#3]@18, ~@6 a#3@2 ~ [a#2,c#3,f#3,a#3,f#4]@6 a#3@2 ~ [a#2,c#3,f#3,a#3,f#4]@3 ~@27", // F#
  C: "~ f#4@5 ~ f#4@2 ~ f#2@5 ~ f#4@2 ~ f#2@2 ~ f#4@2 ~ f#4@5 ~ f#4@17, [f#2,a#2,d#3,f#3,a#3]@6 [f#2,a#2,d#3,f#3]@4 ~@5 [f#2,a#2,d#3,f#3]@4 ~@2 [f#2,a#2,d#3,f#3,a#3]@3 [f#2,a#2,d#3,f#3,a#3]@6 [f#2,a#2,d#3,f#3,a#3]@18, ~@6 a#3@2 ~ [a#2,d#3,f#3,a#3,f#4]@6 a#3@2 ~ [a#2,d#3,f#3,a#3,f#4]@3 ~@27", // D#m
  D: "~ f#4@5 ~ f#4@2 ~ f#2@5 ~ f#4@2 ~ f#2@2 ~ f#4@2 ~ f#4@5 ~ f#4@17, [f#2,a#2,d#3,f#3,a#3]@6 [f#2,a#2,d#3,f#3]@4 ~@5 [f#2,a#2,d#3,f#3]@3 a#2@2 ~ [f#2,a#2,d#3,f#3,a#3]@3 [f#2,a#2,d#3,f#3,a#3]@6 [f#2,a#2,d#3,f#3,a#3]@18, ~@6 a#3@2 ~ [a#2,d#3,f#3,a#3,f#4]@6 a#3@2 ~ [d#3,f#3,a#3,f#4]@4 ~@26", // D#m
  E: "~ f4@5 ~ f4@2 [g#2,c#3,f3,g#3,f4]@6 ~ f4@2 [g#2,c#3,f3,g#3,f4]@3 ~ f4@2 ~ f4@5 ~ f4@17, [g#2,c#3,f3,g#3]@2 [g#2,c#3,f3,g#3] ~@2 [g#2,c#3,f3,g#3] ~ [g#2,c#3,f3,g#3] [g#2,c#3,f3,g#3]@2 [g#2,c#3,f3,g#3]@6", // C#
  F: "~ f4@5 ~ f4@2 [g#2,c#3,f3,g#3,f4]@6 ~ f4@2 [c#3,f3,g#3,f4]@3 ~ f4@2 ~ f4@5 ~ f4@17, [g#2,c#3,f3,g#3]@6 [g#2,c#3,f3,g#3]@3 ~@6 [g#2,c#3,f3,g#3]@3 g#2@2 ~ [g#2,c#3,f3,g#3]@3 [g#2,c#3,f3,g#3]@6 [g#2,c#3,f3,g#3]@18", // C#
  G: "~ f#4@5 ~ f#4@2 ~ f#2@5 ~ f#4@2 ~ f#2@2 ~ f#4@2 ~ f#4@5 ~ f#4@17, [f#2,b2,d#3,f#3,b3]@6 [f#2,b2,d#3,f#3]@4 ~@5 [f#2,b2,d#3,f#3]@3 b2@2 ~ [f#2,b2,d#3,f#3,b3]@3 [f#2,b2,d#3,f#3,b3]@6 [f#2,b2,d#3,f#3,b3]@18, ~@6 b3@2 ~ [b2,d#3,f#3,b3,f#4]@6 b3@2 ~ [d#3,f#3,b3,f#4]@4 ~@26", // B
  H: "~ f#4@5 ~ f#4@2 ~ f#2@5 ~ f#4@2 ~ f#2@2 ~ f#4@2 ~ f#4@5 ~ f#4@17, [f#2,b2,d#3,f#3,b3]@6 [f#2,b2,d#3,f#3]@4 ~@5 [f#2,b2,d#3,f#3]@4 ~@2 [f#2,b2,d#3,f#3,b3]@3 [f#2,b2,d#3,f#3,b3]@6 [f#2,b2,d#3,f#3,b3]@18, ~@6 b3@2 ~ [b2,d#3,f#3,b3,f#4]@6 b3@2 ~ [b2,d#3,f#3,b3,f#4]@3 ~@27", // B
  I: "~ f4@5 ~ f4@2 ~ f2@5 ~ f4@2 ~ f2@2 ~ f4@2 ~ f4@5 ~ f4@17, [f2,g#2,c#3,f3,g#3]@6 [f2,g#2,c#3,f3]@4 ~@5 [f2,g#2,c#3,f3]@3 g#2@2 ~ [f2,g#2,c#3,f3,g#3]@3 [f2,g#2,c#3,f3,g#3]@6 [f2,g#2,c#3,f3,g#3]@18, ~@6 g#3@2 ~ [g#2,c#3,f3,g#3,f4]@6 g#3@2 ~ [c#3,f3,g#3,f4]@4 ~@26", // C#
  J: "~ f4@5 ~ f4@2 ~ f2@5 ~ f4@2 ~ f2@2 ~ f4@2 ~ f4@5 ~ f4@17, [f2,g#2,c#3,f3,g#3]@6 [f2,g#2,c#3,f3]@4 ~@5 [f2,g#2,c#3,f3]@4 ~@2 [f2,g#2,c#3,f3,g#3]@3 [f2,g#2,c#3,f3,g#3]@6 [f2,g#2,c#3,f3,g#3]@18, ~@6 g#3@2 ~ [g#2,c#3,f3,g#3,f4]@6 g#3@2 ~ [g#2,c#3,f3,g#3,f4]@3 ~@27", // C#
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.6)

// chords · acoustic guitar nylon · F#5
const acoustic_guitar_nylon = note(`<
  ~@20
  [~@6 [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@3 [c#4,f#4]@2 ~ [c#4,f#4]@3 [c#4,f#4]@2 ~ [c#4,f#4]@3 [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@3 [c#4,f#4]@2 ~]
  [[c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4] ~@35]
  ~@43
>`).s("gm_acoustic_guitar_nylon").gain(0.24)

// other · pizzicato strings
const pizzicato_strings = note("<~@18 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@31>".pickRestart({
  A: "f#4 ~ f#5!2 f#4 f#5!2 f#4 f#5!2 f#4 ~@5", B: "d#4 ~ d#5!2 d#4 d#5!2 d#4 d#5!2 d#4 ~@5",
  C: "c#4 ~ c#5!2 c#4 c#5!2 c#4 c#5!2 c#4 ~@5", D: "b3 ~ b4!2 b3 b4!2 b3 b4!2 b3 ~@5",
})).s("gm_pizzicato_strings").gain(0.27)

// chords · drawbar organ · F# C#sus4 D#m D#sus2 D#m G#7 C# C#sus2 …
const drawbar_organ = note(`<
  ~@34
  [[c#5,f#5,a#5]@3 [c#5,f#5,g#5]]!2
  [[d#5,f#5,a#5]@3 [d#5,f5,a#5]]
  [[d#5,f#5,a#5]@3 [d#5,f#5,g#5]]
  [[c#5,f5,g#5]@3 [c#5,d#5,g#5]]!2
  [[b4,d#5,f#5]@7 [b4,c#5,f#5]]
  [[b4,d#5,f#5]]
  ~@23
>`).s("gm_drawbar_organ").gain(0.1)

// chords · synth strings 1
const synth_strings_1 = note("<~@42 A@2 B C D E F G A@2 B C D E F G A@2 B C D E H>".pickRestart({
  A: "[c#4,f#4,a#4]@35 ~ [c#4,f#4,g#4]@10 ~@2", B: "[d#4,f#4,a#4]@17 ~ [d#4,f4,a#4]@5 ~",
  C: "[d#4,f#4,a#4]@17 ~ [d#4,f#4,g#4]@5 ~", D: "[c#4,f4,g#4]@34 ~@2 [c#4,d#4,g#4]@11 ~",
  E: "[c#4,f4,g#4]@17 ~ [c#4,d#4,g#4]@5 ~", F: "[b3,d#4,f#4]@41 ~ [b3,f#4]@5 ~, ~@41 c#4@5 ~@2", G: "[b3,d#4,f#4]",
  H: "[b3,d#4,f#4]@41 ~@7", // B
})).s("gm_synth_strings_1").gain(0.12)

// drums · snare
const snare = s("sd").struct("<~@32 [~@26 x ~@3 x ~ x!14 ~ x] [x!48] [~ x ~ x]!23 [x!2 ~ x] [~ x ~ x]!6 [~ x ~@2]>")
  .gain(0.11)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@31 [~@36 x!12] [x!26 ~ x!3 ~ x ~@14 x ~] ~@32>").gain(0.08)

// drums · low tom
const low_tom = s("lt").struct("<~@26 A ~ B ~ A C ~@2 D@22 E F D@7>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x", D: "x ~@5 x ~ x!2 ~@6", E: "x ~@17 x ~@5 x ~@2 x ~@19 x", F: "~@6 x ~ x!2 ~@6",
})).gain(0.34)

// drums · splash
const splash = s("cr").struct("<~@34 [x!8]!30 [x!6 ~@2]>").gain(0.26)

stack(
  pad_metallic, overdriven_guitar, bass, music_box, music_box_soft, acoustic_guitar_steel, acoustic_guitar_steel_2,
  acoustic_guitar_nylon, pizzicato_strings, drawbar_organ, synth_strings_1, snare, snare_soft, low_tom, splash
)

More by Yes