Skip to content

Instantly share code, notes, and snippets.

@harryf
Created June 10, 2025 20:08
Show Gist options
  • Save harryf/0fad26c5e2212e6cdb5a7ba7d2c26f8c to your computer and use it in GitHub Desktop.
Save harryf/0fad26c5e2212e6cdb5a7ba7d2c26f8c to your computer and use it in GitHub Desktop.
Midnight Requiem of the Masked Rite ( play with https://sonic-pi.net/ )
# 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