;; Oscillating Spin Scan ;; ;; Accumulates rotation angle on each beat, reversing direction ;; periodically for an oscillating effect. ;; ;; Required context: ;; - music: audio analyzer from (streaming:make-audio-analyzer ...) ;; ;; Provides scan: spin ;; Bind with: (bind spin :angle) ;; cumulative rotation angle ;; ;; Behavior: ;; - Rotates 14.4 degrees per beat (completes 360 in 25 beats) ;; - After 20-30 beats, reverses direction ;; - Creates a swinging/oscillating rotation effect ;; ;; Usage: ;; (include :path "../templates/scan-oscillating-spin.sexp") ;; ;; In frame: ;; (rotate frame :angle (bind spin :angle)) (scan spin (streaming:audio-beat music t) :init {:angle 0 :dir 1 :left 25} :step (if (> left 0) (dict :angle (+ angle (* dir 14.4)) :dir dir :left (- left 1)) (dict :angle angle :dir (* dir -1) :left (+ 20 (mod (streaming:audio-beat-count music t) 11)))))