Mittwoch, September 23, 2026

Shaman Bell: Aufstieg der Büffel zur Melodie der Schlangen

# Welcome to Sonic Pi
# Shaman Bell — the rise of the buffalos to the snakes tune
# Aufstieg der Büffel zur Melodie der Schlangen
# von HAR-ASH MAH-HANI (2026)
use_debug false
set :bpm, 70
use_bpm get(:bpm)
#use_random_seed 314159
# Ritual call
live_loop :shaman_bell do
  sample :perc_bell, amp: 2, rate: 1
  cue :cue # Sendet das Zeichen für den Einsatz an sync :cue
  sleep get(:bpm) * 3 # einmaliger Ruf, viel Raum
end
# The drum (The earth pulse)
# Ritual‑Style Doppel‑Schlag (klassisches Schamanen‑Pattern)
live_loop :shaman_drum do
  with_fx :reverb, room: 0.7, mix: 0.5 do
    2.times do
      sample :bd_tek, amp: rrand(1.0, 1.4), cutoff: get(:bpm) # orig: 70
      sleep 0.12 + rrand(-0.01, 0.01)
    end
  end
  sleep 0.55 + rrand(-0.02, 0.02)
end
# Bell
with_fx :reverb, room: 0.9, mix: 0.6 do
  with_fx :echo, phase: 0.375, mix: 0.25 do
    # The melody
    live_loop :bell do
      use_bpm get(:bpm)
      amp_wave = (range 0.1, 0.025, step: 0.01).mirror.tick
      with_fx :slicer, phase: 0.5, mix: 0.3 do
        sample :perc_bell, rate: rrand(0.7875, 0.8125), amp: amp_wave
        sleep 0.55 + rrand(-0.02, 0.02)
      end
    end
    # The spirit
    live_loop :shaker do
      amp_wave = (range 0.2, 0.4, step: 0.05).mirror.tick
      with_fx :lpf do
        sample :perc_snap, rate: 1.2, amp: amp_wave
        sleep 0.25
      end
    end
    # The earth pulse …
    live_loop :shaker2 do
      sync :cue
      sleep 0.5
      amp = 1.0
      (get(:bpm) * 3).times do
        # … fade-out
        amp = amp - rrand(0.025, 0.05)
        sample :perc_snap2, amp: (amp > 0) ? amp : 0
        sleep 0.55 + rrand(-0.02, 0.02) / 3
      end
    end
  end
end
# BPM-Fade
live_loop :bpm_fade do
  sync :shaker
  start = get(:bpm) || 70
  stop  = rrand(60, 75)
  steps = [16,32,64].choose # orig: 64
  duration = [128].choose # orig: 128
  steps.times do |i|
    t = i.to_f / (steps - 1)
    curve = t ** 2 # quadratische Kurve
    bpm = start + (stop - start) * curve
    set :bpm, bpm
    sleep duration.to_f / steps
  end
  sleep rrand(0, 256)
end