Created
June 10, 2025 20:08
-
-
Save harryf/0fad26c5e2212e6cdb5a7ba7d2c26f8c to your computer and use it in GitHub Desktop.
Midnight Requiem of the Masked Rite ( play with https://sonic-pi.net/ )
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Stir the cauldron at 135 beats per minute | |
use_bpm 135 | |
# Shared sigils - when the light dies, all hearts go silent | |
set :stop_flag, false | |
set :master_amp, 1.0 # hidden hand that rules all volumes | |
# The ward that lets any loop vanish on command | |
define :check_stop do | |
stop if get(:stop_flag) | |
end | |
# ---- First veil: a low drone rising from the crypt ---- | |
live_loop :pad do | |
check_stop | |
with_fx :reverb, mix: 0.6, room: 0.9 do | |
synth :dark_ambience, note: :d2, | |
sustain: 4, release: 2, amp: 0.7 * get(:master_amp) | |
end | |
sleep 4 | |
end | |
# ---- At 4 seconds, the beast awakens below ---- | |
in_thread do | |
sleep 4 | |
live_loop :bass do | |
check_stop | |
synth :fm, note: [:d1, :d1, :f1, :d1].tick, | |
sustain: 0.4, release: 0.6, | |
cutoff: 85, amp: 1.5 * get(:master_amp) | |
sleep 0.5 | |
end | |
end | |
# ---- At 8 seconds, steel teeth begin to chatter ---- | |
in_thread do | |
sleep 8 | |
live_loop :hats do | |
check_stop | |
sample :drum_cymbal_closed, | |
amp: 0.6 * get(:master_amp) if spread(3, 8).tick | |
sleep 0.5 | |
end | |
end | |
# ---- At 12 seconds, the old Amen breaks through the door ---- | |
in_thread do | |
sleep 12 | |
live_loop :break do | |
check_stop | |
sample :loop_amen, beat_stretch: 4, | |
amp: 1.2 * get(:master_amp) | |
sleep 4 | |
end | |
end | |
# ---- At 16 seconds, ritual drums speak their pattern of blood ---- | |
in_thread name: :ritual_rhythm do | |
sleep 16 | |
hit_pattern = (ring 1, 2, 1, 0) # one, two, one, silence | |
live_loop :tribal_kick do | |
check_stop | |
hits = hit_pattern.tick # how many strikes this bar | |
if hits > 0 | |
gap = 2.0 / hits # forces each bar to last two beats | |
hits.times do | |
sample :drum_tom_lo_soft, | |
rate: 0.8, | |
amp: 0.5 * get(:master_amp), | |
finish: 0.4 | |
sleep gap | |
end | |
else | |
sleep 2 # the circle rests | |
end | |
end | |
end | |
# ---- At 24 seconds, dissonant vapours coil around the hall ---- | |
in_thread name: :atmospheric do | |
sleep 24 | |
live_loop :dissonance_pad do | |
check_stop | |
use_synth :hollow | |
play chord(:cs3, :minor7).choose, | |
release: 8, amp: 0.4 * get(:master_amp) | |
sleep 8 | |
end | |
end | |
# ---- At 32 seconds, the masked choir chants in reverse tongues ---- | |
in_thread name: :melody_in_d do | |
sleep 32 | |
forward_phrase = (ring :d4, :f4, :e4, :d4, :c4, :d4, :e4, :f4) | |
live_loop :masked_ball_rev, sync: :pad do | |
check_stop | |
with_fx :reverb, mix: 0.8, room: 0.9 do | |
with_fx :echo, phase: 1, mix: 0.5 do | |
use_synth :dark_ambience | |
# the chant walks backward, one heartbeat at a time | |
play forward_phrase.reverse.tick, | |
sustain: 0.6, release: 0.4, | |
amp: 0.9 * get(:master_amp) | |
end | |
end | |
sleep 1 | |
end | |
end | |
# ---- At 90 seconds the light fades, the doors slam shut ---- | |
in_thread name: :cinematic_fade do | |
sleep 90 # length of mortal patience | |
fade_secs = 16 # descent into silence | |
steps = 64 # small turns of the screw | |
step_sleep = fade_secs.to_f / steps | |
steps.times do | |
current_amp = get(:master_amp) | |
set :master_amp, [current_amp - (1.0 / steps), 0].max | |
sleep step_sleep | |
end | |
set :stop_flag, true # all sounds obey the hush | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment