-
Notifications
You must be signed in to change notification settings - Fork 4
/
delayfli.ny
46 lines (40 loc) · 1.53 KB
/
delayfli.ny
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
;nyquist plug-in
;version 1
;type process
;name "Delay (Stereo Flip)..."
;action "Applying delay, flipping stereo..."
;info "by David R. Sky\nReleased under terms of GNU Public License"
;control decay "Decay amount" real "dB" 3.0 0.0 24.0
;control delay "Delay time" real "seconds" 0.5 0.0 5.0
;control count "Number of delays" int "times" 10 1 100
;control norm-level "Normalization level" real "" 0.95 0.0 1.0
; Delay with Stereo Flip by David R. Sky
; December 2, 2004; updated January 3, 2006
; a delay effect which flips stereo channels with each delay
; Released under terms of the GNU Public License
; http://www.opensource.org/licenses/gpl-license.php
; Inspired by a sound effect in the opening track of
; Mike Oldfield's "Songs From Distant Earth"
; Thanks to Steven Jones for illustrating
; how to check for even/odd numbers
; set original and flipped audio samples
(let (s:orig s:flip i x)
(setq s:orig (vector (aref s 0) (aref s 1)))
(setq s:flip (vector (aref s 1) (aref s 0)))
(setq s (s-rest 0))
; function to produce next delay
(defun nextflip (i decay delay s s:orig s:flip)
(setf pos (* i delay))
(setf vol (* -1 i decay))
(if (evenp i) ; if i is even, do not flip
(sim (cue s) (at-abs pos (loud vol (cue s:orig))))
(sim (cue s) (at-abs pos (loud vol (cue s:flip))))))
; normalize function
(defun normalize (signal)
(setf x
(max (peak (aref signal 0) ny:all) (peak (aref signal 1) ny:all)))
(scale (/ norm-level x) signal))
; generating the delays
(normalize (simrep (i (+ 1 count))
(nextflip i decay delay s s:orig s:flip)))
) ; close let