;nyquist plug-in
;version 3
;type process
;categories "http://lv2plug.in/ns/lv2core#MixerPlugin"
;name "2-D Stereo Toolkit..."
;action "Fetch a cup of coffee..."
;info "by Robert J. Haenggi\nReleased under GPL v2.\n"
;;
;; rjh-stereo-tool.ny
;; Released under terms of the GNU General Public License version 2:
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
;; Plug-in version 1.4, July 2013
;; v1.0 July, 1st 2013
;; v 1.1 faster by about 33 % (3:00 m in 52 s)
;; v1.2: No messaging for aborted or finished playback
;; v1.3: Faster by about 25 % (3:00 m in 37 s; w.o. filter in 1:14 m
;; Added playback for left and right channel
;; Error message for play attempts on non-Windows OS
;; Only one Effect Parameter (context dependant)
;; Remove/isolation split into filtered and not filtered versions
;; Some catalog entries renamed
;; v1.4: Faster by about 25 % (3 min. in 27 sec; "Full Range" in 36 sec)
;; low/high cut renamed and range expanded
;; Control if high < low cut
; earlier warning about preview for non-Windows
;; Help control added
;; More items renamed
;; corrected faulty output length (for actions 3-5)
;;
;; Requires Audacity 2.0 or later, developed under Audacity 2.0.3
;;
;control cat "Action Catalog" choice "Remove Vocals,Isolate Vocals,Isolate Vocals (inverted),Remove Center (full Range),Isolate Center (full Range),Isolate Center (inverted; full Range),Fixed Rotation,Variable Rotation,Rotary (Deg. * 90),Rotary speeding up,Rotary slowing down,Fixed Pan,From L to Pan,From R to Pan,Fade to Pan,Fade from Pan,Delay* L (-) or R in Samples,Dissolve at Pan" 0
;control options "Options" choice "Apply Action,Show Analysis,Play and apply,Play only,Play Left,Play Right" 0
;control parameter "Rotation/Pan (Degrees) or Delay* (Samples)" real "" 0 -180 180
;control low-transition "(Vocal Removal/Isolation only)\nLow Frequency Cut in Hz" real "" 120 1 24000
;control high-transition "High Frequency Cut in Hz" real "" 9000 1 24000
;control help "Show Help:" choice "No. Run Effect,Overview,Selected Action" 0
;;
;; make aref shorter
(defmacro : (array index) (backquote (aref ,array ,index)))
;;
;; input corrections
(defmacro limit (symbol lower upper)
(backquote (min ,upper (max ,lower ,symbol))))
;;;
;;; Some statistical functions
;;
;; Running Sum
(defun sigma (sig)
(snd-biquad sig 1 0 0 1 0 0 0))
;;
;; Compares two sounds (S2 = A + B * S1)
(defun least-squares-xy (x y &key show)
(let* ((n (float (min (snd-length x ny:all)
(snd-length y ny:all))))
(t-n (/ (1- n) (snd-srate x)))
(bar-x (* (/ n) (snd-sref (sigma x) t-n)))
(bar-y (* (/ n) (snd-sref (sigma y) t-n)))
(x (diff x bar-x))
(y (diff y bar-y))
(s-xy (* (/ n) (snd-sref (sigma (prod x y)) t-n)))
(s-x2 (* (/ n) (snd-sref (sigma (prod x x)) t-n)))
(s-y2 (* (/ n) (snd-sref (sigma (prod y y)) t-n)))
(r (/ s-xy (sqrt (* s-x2 s-y2))))
(r2 (expt r 2.0))
(a1 (cond
((= s-x2 0) 0)
((= s-xy 0) 0)
(t (/ s-xy s-x2 ))))
(a0 (- bar-y (* a1 bar-x))))
(if show (format t
"Average x: ~a, y: ~a
Covariance x y: ~a
Average variance x: ~a, y: ~a
Standard deviation x: ~a, y: ~a
Coefficient of correlation: ~a
Coefficient of determination: ~a
Variation of residuals: ~a
y equals ~a plus ~a times x~%"
bar-x bar-y s-xy s-x2 s-y2 (sqrt s-x2) (sqrt s-y2) r r2 (* s-y2 (- 1 r2)) a0 a1))
(list r r2 a0 a1)))
;;
(defun between (val low high)
(and (> val low) (<= val high)))
;;
;; Summary for "Statistics only" option, fed with coeff. of correlation
(defun summary (corr)
(format nil "The left and right channels are correlated by about ~a %. This means:~%~a~%(see debug window for more details...)" (round (* corr 100))
(cond
((between corr 0.97 1.1)
" - The two channels are identical, i.e. dual mono.\n The center can't be removed.\n Any remaining difference may be caused by lossy encoding.")
((between corr 0.9 0.97)
" - The two Channels are strongly related, i.e. nearly mono or extremely panned.\n Most likely, the center extraction will be poor.")
((between corr 0.5 0.9)
" - A fairly good value, at least stereo in average and not too wide spread.")
((between corr 0.2 0.5)
" - An ideal value for Stereo.\n However, the center extraction depends also on the used reverb.")
((between corr -0.2 0.2)
" - The two channels are almost not related.\n Either you have only noise or the piece is mastered in a unbalanced manner.\n The center extraction can still be good though.")
((between corr -0.8 -0.2)
" - Although the Track is stereo, the field is obviously extra wide.\n This can cause strange effects.\n Especially when played by only one speaker.")
(t " - The two channels are nearly identical.\n Obviously, a pseudo stereo effect has been used\n to spread the signal over the physical distance between the speakers.\n Don't expect good results from a center removal."))))
;;;
;;; FFT Functionality
;;
;; different windows
(defun fft-window (fs type hop zeros)
(cond
; Bartlett, but first value > 0
((= type 0)
(if (= zeros 0)
(snd-pwl 0 fs
(list 0 (/ (float hop)) (1- hop) 1.0 (1- fs) 0.0 fs))
(progn (setf cut (truncate (- fs zeros 1)))
(snd-pwl 0 fs
(list 0 (/ (float hop))(- cut hop) 1.0 cut 0.0 fs 0.0 fs)))))
; Han
((= type 1)
(seq (control-srate-abs fs
(mult 0.5 (sum 1 (lfo (/ fs (* 2.0 hop)) (/ (- fs zeros) (get-duration fs)) *table* 270))))
(snd-const 0 0 fs (/ (float zeros) fs))))
; rectangle
(t (if (= fs hop) (snd-pwl 0 fs (list 0 1.0 fs 1.0 fs))
(snd-pwl 0 fs
(list 0 1.0 (1- hop) 1.0 hop 0.0 fs 0.0 fs))))))
;;
;; objects and classes
(setf fft-class (send class :new
'(sound length skip window function argument2) ))
(send fft-class :answer :next '() '(
(if argument2
(funcall function (snd-fft sound length skip window) argument2)
(funcall function (snd-fft sound length skip window)))))
(send fft-class :answer :isnew '(snd len skp win fn arg2) '(
(setf sound snd)
(setf length len)
(setf skip skp)
(setf window win)
(setf function fn)
(setf argument2 arg2)))
;;
;;; Short Time Fourier Transform
(defun stft (sound length skip window
&optional (function #'(lambda (fr) fr)) (argument2 nil))
(send fft-class :new sound length skip window function argument2))
;;
;; Power spectrum calculated from fft (as sound)
(defun power-spectrum (snd)
(let* ((*isr* (snd-srate snd))
(zero (snd-from-array 0 *isr* #(0))))
(mult 2 (snd-avg (seq zero (mult snd snd)) 2 2 op-average))))
;;
;; Make a weighted center (mono)
;; that can be substracted from L&R
(defun steer (side obj &aux (mid (send obj :next)))
(cond ((and mid side)
(let* ((sum (snd-from-array 0 2 mid))
(dif (snd-from-array 0 2 side))
(power-sum (power-spectrum sum))
(power-dif (power-spectrum dif))
(power-sum (snd-minv (snd-const 1.0e03 0 1 (1+ (/ fs 2))) (recip power-sum)))
(weight (snd-samples (sum 0.5 (mult -0.5 (clip (s-sqrt (mult power-dif power-sum)) 1.7))) ny:all)))
(do ((i low-transition (setq i (+ i 2)))) ((>= i high-transition))
(setf (: out i) (: weight (/ i 2)))
(setf (: out (1+ i)) (: weight (/ i 2))))
(snd-samples (mult (snd-from-array 0 1 mid) (snd-from-array 0 1 out)) fs)))
(t nil)))
;;
;; Median Filter for feature extraction (not used yet)
;;;
;;; Sound Pre-processing
;;
;; The following 4 functions implement
;; trigonometric entities for sounds
(defun s-trigon (*ssr* function &optional (phase pi))
(let* ((temp (make-array (1+ (* 2 *ssr*)))))
(snd-from-array 0 *ssr*
(dotimes (i (1+ (* 2 *ssr*)) temp)
(setf (: temp i)
(funcall function (- (* (/ pi 0.5 (* 2 *ssr*)) i) phase)))))))
;;
(defun s-cos (angle)
(if (numberp angle) (cos (* pi (/ angle 180.0)))
(shape (mult (/ 180.0) angle)
(s-trigon (truncate (snd-srate angle)) 'cos) 1.0)))
;;
(defun s-sin (angle)
(if (numberp angle) (sin (* pi (/ angle 180.0)))
(shape (mult (/ 180.0) angle)
(s-trigon (truncate (snd-srate angle)) 'sin) 1.0)))
;;
(defun s-tan (angle)
(if (numberp angle) (tan (* pi (/ angle 180.0)))
(mult (s-sin angle) (recip (sum 1e-015 (s-cos angle))))))
;;
;; rotate the stereo field around the center point
;; between the two speakers
;; Additionally, pan by time and gain difference.
(defun transform (snd &optional (p-ang 0) (delay 0) (width 1) ( cosine (s-cos (abs rotation))) (sine (s-sin (abs rotation))))
(let* ((theta (s-tan p-ang))
(lsbase (s-tan 30.0)); loudspeaker base (60 degrees)
(gain0 (diff (mult (diff theta lsbase) (recip (sum theta lsbase 1e-015)))))
(gain1 (recip (s-sqrt (sum 1 (mult gain0 gain0)))))
(gain0 (mult gain0 gain1))
(direction (/ (+ 1e-15 rotation) (abs (+ 1e-15 rotation))))
(channel (/ (lognot delay) (lognot (abs delay))))
(delay (/ delay (get-duration *sr*)))
(fft-offset (if (< cat 6) (/ hop (get-duration *sr*)) 0))
(dly-l (s-rest (+ fft-offset (* delay channel))))
(dly-r (s-rest (+ fft-offset (* delay (1- channel)))))
(L (seq dly-l (cue (sum (mult (s-min 1 (sum 0.5 (mult 0.5 width))) (: snd 0))
(mult (diff 1 width) (: snd 1)))) dly-r))
(R (seq dly-r (cue (sum (mult (s-min 1 (sum 0.5 (mult 0.5 width))) (: snd 1))
(mult (diff 1 width) (: snd 0)))) dly-l)))
(set '*norm* (s-min 1.4142 (recip (s-max gain0 gain1))))
(vector (mult gain0 (sum (mult cosine L) (mult (- direction) sine R)))
(mult gain1 (sum (mult direction sine L) (mult cosine R))))))
;;;
;;; main procedure
(defun catalog (&aux (degree (/ (abs rotation) 720.0)) snd
(original-len (/ (+ len hop (abs delay)) *sr*)) (dur (get-duration 1)))
(if (soundp s) (return-from catalog "This plug-in works only with stereo tracks.") (setf snd (vector (snd-copy (: s 0)) (snd-copy (: s 1)))))
(if (= options 1)
(return-from catalog (summary (nth 0 (least-squares-xy (: s 0) (: s 1) :show t)))))
(cond
((= cat 6); Fixed rotation
(setf output (transform snd)))
((= cat 7); Carousel - rotate degrees per s
(setf output (transform snd 0 0 1 (hzosc degree *table* 90) (hzosc degree))))
((= cat 8); Rotary speed x 90
(setf output (transform snd 0 0 1 (hzosc (/ (round (* 90 dur degree)) dur) *table* 90) (hzosc (/ (round (* 90 dur degree)) dur) ))))
((= cat 9); Rotary going up
(setf degree (mult (sum 1 (osc (hz-to-step (/ 0.5 dur))1 *table* 270)) (/ (round (* 45 dur degree)) dur)))
(setf output (transform snd 0 0 1 (hzosc degree *table* 90) (hzosc degree))))
((= cat 10); Rotary going down
(setf degree (mult (sum 1 (osc (hz-to-step (/ 0.5 dur))1 *table* 90)) (/ (round (* 45 dur degree)) dur)))
(setf output (transform snd 0 0 1 (hzosc degree *table* 90) (hzosc degree))))
((= cat 11); Fixed Pan
(setf rotation 0)
(setf output (transform snd (/ (limit parameter -179.9999 179.9999) 6.0))))
((= cat 12); From Left to Pan Angle
(psetq parameter (/ (limit parameter -179.9999 179.9999) 6.0)
rotation 0)
(setf output (transform snd (pwl 0 -29.9999 1 parameter 1))))
((= cat 13); From Right to Pan Angle
(psetq parameter (/ (limit parameter -179.9999 179.9999) 6.0)
rotation 0)
(setf output (transform snd (pwl 0 29.9999 1 parameter 1))))
((= cat 14); From Front to Pan Angle
(psetq parameter (/ (limit parameter -179.9999 179.9999) 6.0)
rotation 0)
(setf output (transform (hp (lp snd (pwe 0 (/ *sr* 2.0) 0.25 4000 1 10 1))
(pwe 0.5 20 1 200 1)) (pwl 1 parameter 1) delay 1 (pwe 0 1 1 0.5 1) (pwe 0 1e-10 1 0.5 1))))
((= cat 15); From Pan to Front
(psetq parameter (/ (limit parameter -179.9999 179.9999) 6.0)
rotation 0)
(setf output (transform (hp (lp snd (pwe 0 10 0.75 4000 1 (/ *sr* 2.0) 1))
(pwe 0 200 0.5 20 1 1 1)) (pwl 0 parameter 1 0 1) delay 1 (pwe 0 0.5 1 1 1) (pwe 0 0.5 1 1e-10 1))))
((= cat 16); Fixed Delay
(setf output (transform snd 0 (truncate parameter))))
((= cat 17); warp the signal
(psetq parameter (/ (limit parameter -179.9999 179.9999) 6.0)
rotation 0)
(let* ((dur (min 4 (get-duration 0.3)))
(sig (multichan-expand #'(lambda (s) (sim (s-rest 1) (sound-warp (integrate (pwe 0.5 1.1 1 0.25 1)) s))) snd)))
(setf output (transform (diff sig (mult (pwe 0 0.0001 0.7 0.35 0.85 0.45 1 0.8 1) (nrev sig dur 0.5))) parameter))))
(t; For everything that involves center isolation
(setf snd (transform snd))
(setf analyze-win (s-sqrt (fft-window fs type hop zs)))
(setf synthesis-win analyze-win)
(unless double-win (setf analyze-win (fft-window fs type hop zs))
(setf synthesis-win nil))
(setf sum-fft (stft (sum (: snd 0) (: snd 1)) fs hop analyze-win))
(setf dif-fft (stft (diff (: snd 0) (: snd 1)) fs hop analyze-win 'steer sum-fft))
(setf c (snd-ifft 0 *sr* dif-fft hop synthesis-win ))
(cond
((member cat '(0 3))
(setf output (vector (extract-abs (/ hop *sr*) original-len (diff (: snd 0) c))
(extract-abs (/ hop *sr*) original-len (diff (: snd 1) c)))))
((member cat '(1 4)) (setf output (extract-abs (/ hop *sr*) original-len c)))
((member cat '(2 5)) (setf output (extract-abs (/ hop *sr*) original-len (mult -1 c)))))))
(if (soundp output) (setf output (vector output output)))
(when (member options '(2 3 4 5))
(if (char/= *file-separator* #\\)
(return-from catalog "Sorry, but the play-options are only\navailable on Windows."))
;(setf dummy (/ (multichannel-max output 200000) (max 1e-20 (multichannel-max output 200000))))
;(format t "Peak ratio Input:Output for the first 200000 samples: ~a~%" dummy); That's only a dummy function to force pre-evaluation (about 4 s)
(s-save (mult *norm* volume
(case options (4 (: output 0)) (5 (: output 1)) (t output)))
ny:all "" :play t))
(if (member options '(3 4 5)) (return-from catalog s))
(if (member options '(0 2))
(mult *norm* output)))
;;;; Main
s; Return original audio if the preview is aborted
(case help
(0; no help
;;; we start with some variable assignements
(setf *sr* *sound-srate*)
;; hard coded STFT parameters
;; Change for experimental purposes
(setf type 1); -1 = square 0 =triangle 1 = Han
(setf double-win t); t = windows before and after
(setf fs (* 16 512)); fft-frame-size
(setf hop (* 7 512)); Hop (step size to advance)
(setf zs (- fs (* 2 hop))); zero-padding
;; Some input corrections
(setf rotation parameter)
; bins to be ignored (bass and treble)
(if (> cat 2) (psetq low-transition 0 high-transition 24000))
(let* ((ltrans (logior (truncate (/ (* 2 fs (limit low-transition 1 (/ *sr* 2.0))) *sr*)) 1))
(htrans (logior (limit (truncate (/ (* 2 fs high-transition) *sr*)) 1 (1- fs)) 1)))
(psetq low-transition (min ltrans htrans)
high-transition (max ltrans htrans)))
(setf out (snd-samples (snd-const 0.0 0 fs fs) fs)); holds the left/right weightings (removal)
(setf s-width 1)
(setf delay 0)
(setf volume 0.85)
(expand 120); remove for lower efficiency/more conservative memory management
(catalog))
(1; Help: Overview
"OVERVIEW
The 2D Stereo tool provides a lot of functions
to manipulate stereo tracks.
Choose the desired effect from the \"Action Catalog\".
Options menu:
Default is Applying the selected action.
\"Show Analysis\" gives you an idea how well any
Removal/Isolation wwil work.
The Play options do currently only work on Windows.
The quasi preview can be cancelled at any time.
In contrast to other plug-ins, the whole selection
will be played and you must re-launch the tool
after canceling.
\"Play only\" and the two remaining entries for
left and right will leave the tracks untouched.
Rotation/Pan or Delay:
It depends on the chosen action which parameter
can be set. Stereo field rotation is the default.
This applies also to removal/Isolation.
Low and High Cut:
- define the frequency Range that vocal removal
or isolation will work on. \"... Center\" affects
the whole frequency spectrum.
See the other help entries for more details.")
(2 (case cat
(0
"\"Remove Vocals\"
[Rotation - in degrees] [L/H-cut 120/9000 Hz]
[in: Stereo; out: Stereo]
[in: Dual Mono; out: Dual Mono (simple Band-stop)]
Removes center-panned audio within the frequency
range as it is defined by Low and High cut.
This is an easy way to produce a instant stereo
Karaoke or Sing-along track.
The algorithm works in the frequency domain, in
order to return a true stereo output.
You can specify an optional rotation angle if the
vocals are not in the center. Use +/-45 degrees
for hard left or right panned audio. Note that
the other side will be affected too. See the help
on \"Fixed Rotation\" for further information.
Tips:
- Raise the low cut frequency for female voices.
- Use high quality Audio (Wave or Flac).
- Don't process long selections like 20 minutes or
more. The program could crash due to lack of memory.")
(1
"\"Isolate Vocals\"
[Rotation in degrees] [L/H-cut 120/9000 Hz]
[in: Stereo; out: Dual Mono]
[in: Dual Mono; out: Dual Mono (simple Band-pass)]
Returns center-panned Audio, within the frequency
range as it is defined by Low and High Cut. Bass
and treble frequencies wil therefore not be
present in the returned audio.
Although The Track still has two channels, these
will in fact be identical, i.e. dual mono.
An optional Rotation angle can be set. Please keep
in mind that the rotation always goes thru the
center. An Angle of 30 degrees will therefore also
isolate the voices or instruments at -30 degrees.
Tips:
- This action is perfectly suited to return the
center channel if you want to create a 3.1 (or higher)
multi channel file.
- Use this effect on a duplicated track to give
the lead vocals more presence by adjusting the gain sliders.
- Also suited to reduce echo if the voice or
instrument is recorded by a stereo mic.")
(2
"\"Isolate Vocals (inverted)\"
[Rotation in degrees] [L/H-cut 120/9000 Hz]
[in: Stereo; out: Dual Mono]
[in: Dual Mono; out: Dual mono (simple Band-pass)]
This returns exactly the same as \"Isolate Vocals\"
except that it is multiplied by -1.
The purpose is to use it on a duplicated track.
In combination, the original and the new track will
play a vocal-less stereo version. The advantage is
that you can set the amount of voice attenuation.
Tips:
- Turn the gain of the new track down to get
some vocals back.
- Use other frequency cut-offs to similarly
manipulate the bass.
- Use the envelope tool or fade effects to keep
some original parts, e.g. the chorus.
- Apply a Rotary effect on the new track.
- Rotate the stereo field to track one singer
within a duet.")
(3
"\"Remove Center (full Range)\"
[Rotation in degrees, default 0.0]
[in: Stereo; out: Stereo]
[in: Dual Mono; out: Dual Mono (Silence)]
This will remove the whole center-panned audio
if the rotation is 0 degrees. The center includes
normally the Lead Vocals/Solos, Bass and Drums.
The returned sound is fully stereo.
Tips:
- This effect is best suited for the transcription
of left- or right-panned instruments.
- Use the \"Play Left (Right)\" options to listen
to instruments in isolation (e.g. rhythm guitar)
- ...or split the returned track to mono.
- Copy the original track and use a low-pass
filter on it to add back some Bass/Kick Drum.
- Use different angles (not over 45) to remove a
greater portion of the center.
- Remember to bring it back in balance with a
\"Fixed Rotation\".
- Audacity's built in Voice Removal offers a fast
method to predict the removal quality.
- However, digital artefacts are often less
prominent in this stereo version.")
(4
"\"Isolate Center (full Range)\"
[Rotation in degrees, default 0.0]
[in: Stereo; out: Dual Mono]
[in: Dual Mono; out: Dual Mono (same as in:)]
Returns the entire center-panned audio, inclusive
Bass and Drums, in dual mono.
But you can also specify a Rotation angle to catch
the sides - as mono too.
Some side audio wil still bleed into the center.
However, the attenuation is in most cases better
than a simple stereo-to-mono. The result depends
on how the tracks were panned in the first place.
Tips:
- Old Vinyl/shellac recordings can be cleaned
from crackling when they are transferred in
stereo or two versions were combined to a stereo track.
- In general, random noise that appears in either
of the two channels can be filtered out (if the
original was mono).
- You can retrieve the dry signal from
single instrument tracks that were processed by
a stereo reverb or similar effect.")
(5
"\"Isolate Center (full Range; inverted)\"
[Rotation in degrees, default 0.0]
[in: Stereo; out: Dual Mono]
[in: Dual Mono; out: Dual Mono (inverted)]
This returns exactly the same as \"Isolate Center\"
except that it is multiplied by -1.
The purpose is to use it on a duplicated track.
In combination, the original and the new track will
play a center-less stereo version. This gives you
the freedom to adjust the center/side mix.
Tips:
- Reduce the gain of the original to bring out
more lead and drums.
- Apply complementary Fades on the original and
the copy to gradually blend from only center to
only sides (with Fade-in on the original).
- produce a more convincing Manual Duck effect
by silencing the copy where the original should
be audible. Keep the gain high, where your voice
should replace the center.")
(6
"\"Fixed Rotation\"
[Rotation in degrees, default 0.0]
[in: two Channels; out: two Channels]
Rotates the whole stereo field around the
mid-point between the speakers.
Tips:
- Rotate by 45 deg. to bring the left channel into
the center (-45 for the right one).
- Dual mono sounds can also be rotated.
- +/- 90 deg. rotation give a maximal stereo width
to dual mono and narrow stereo sounds.
- Rotate 45 deg., split the channels, alter the
left one (compression, equalizer), make it
stereo again and rotate by -45 deg--this will
modify the stereo field (mid/side processing).
Table: ]+M= 0.5*(L+R); +S=0.5*(L-R); -S=0.5*(R-L)]
Degrees: Left: Center: Right: Notes:
0/360 +L 0 dg. +R no rotation
45 +S 90 dg. +M swap sides/center
90 -R 180 dg. +L L/R swap, max. width
135 -M 270 dg. +S swap sides/center
180/-180 -L 360 dg. -R inverted audio
225/-135 -S 90 dg. -M swap sides/center
270/-90 +R 180 dg. -L L/R swap, max. width
315/-45 +M 270 dg. -S swap sides/center")
(7
"\"Variable Rotation\"
[Rotation in degrees per second, default 0.0]
[in: two Channels; out: two Channels]
Rotates the stereo field continuously by x degrees
per second--stereo or dual mono.
There are actually two rotations in 360 degrees,
but the sound at 180 deg. is an inverted original.
Tips:
- Use this function prior to a vocal removal, this
wil tell you how much to rotate for a optimal
removal (i.e. 1 deg. per s, secons=degrees)
- Use \"Rotary\" for rotations that stop at the
original 0 degree phase (divide by 90)
- You can enter numbers that are higher than 180.0.
- Some audio can clip when rotated, so give
enough head-room or normalize afterwards.
- Combine this effect with variable panning,
(for example \"From L to Pan\") to produce special
movements (e.g. helicopter flight).")
(8
"\"Rotary (Deg. * 90),\"
[Rotation in value * 90 deg/s, default 0.0]
[in: two Channels; out: two Channels]
That's similar to \"Variable Rotation\" but the
degrees are multiplied by 90, thus 180.0 is
actually 16200.0 degrees/s. The rotation is such
corrected that it stops at 0 degrees phase.
Tips:
- Higher values than +/-180.0 can be entered
manually but are set to +/-180.0 on the next
plug-in start.
- for a final phase other than 0, use
\"Variable Rotation\" with degrees times 90.
- Very high values change the frequencies too.
- Put this action between \"Rotary speeding up\"
and \"Rotary slowing down\" for a Leslie effect.
- Apply different speeds on the same or other tracks.
- The effect is very strong when applied to the
whole mix. Apply it instead to isolated
vocals or a single instrument.")
(9
"\"Rotary speeding up\"
[Final Rotation value * 90 deg/s, default 0.0]
[in: two Channels; out: two Channels]
Increases the rotation speed gradually, beginning
with 0.0 deg/s. It automatically ends at a
0 degree phase. The highest acceleration is in
the middle (cosine).
Tips:
- Use this in front of the \"Rotary\" effect.
- Duplicate the original track. Use a Lowpass on
one track and a Highpass on the other (6 dB per
octave, cut off at 800 Hz).
- Vary the selection length and the final speed
for those tracks (The low one has in general
a slower attack and speed).
- You can also use this in front of
\"Variable Rotation\".
- 0.01111 (Rotary) = 1 degree (Rotation).")
(10
"\"Rotary slowing down\"
[Initial Rotation value * 90 deg/s, default 0.0]
[in: two Channels; out: two Channels]
Decreases the rotation speed gradually, ending
with 0.0 deg/s. It automatically starts and ends
at a 0 degree phase. The highest decay rate is in
the middle (cosine).
Tips:
- Use this after a \"Rotary\" effect.
- The slowing down time is normally consederably
longer than the speeding up phase.
- Split the frequencies as described under
\"Rotary speeding up\".
- Not always suited after \"Variable Rotation\".")
(11
"\"Fixed Pan\"
[Panning in degrees, default 0.0, limit +/-180]
[in: two Channels; out: two Channels]
Pans audio according to the tangent law. This
means that the middle is attenuated by 3 dB,
instead of 6 dB (Audacity default). Furthermore,
the position is given by an angle and not a linear
slider position (i.e. percentage).
Ideally, two speakers and the listener do build a
equilateral triangle. Thus, the left speaker is
at -30 degrees and the right one at 30 degrees, as
viewed from the listeners point. Hence, you have
to multiply the desired angle by 6 to pan a sound
to the right position for this particular
constellation (e.g. [real] 30=180 =hard right).
Tips:
- the stereo width will shrink to if you pan to one side.
- Stereo widening can push the width over the
physical limit (like a Rotation by 90 degrees).")
(12
"\"From L to Pan\"
[Panning in deg/s, default 0.0, limit +/-180]
[in: two Channels; out: two Channels]
")
(13
"\"From R to Pan\"
[Panning in deg/s, default 0.0, limit +/-180]
[in: two Channels; out: two Channels]
")
(14
"\"Fade to Pan\"
[Panning in deg/s, default 0.0, limit +/-180]
[in: two Channels; out: two Channels]
")
(15
"\"Fade from Pan\"
[Panning in deg/s, default 0.0, limit +/-180]
[in: two Channels; out: two Channels]
")
(16
"\"Delay* L (-) or R in Samples\"
[Delay in samples, default 0, no limit]
[in: two Channels; out: two Channels]
Delays the right channel (if the value is
positive) by the entered amount of samples. This is
similar to panning the audio towards left.
Tips:
- Make the sound fuller by delays of 100 to about
2000 samples.
- Values higher than about 2000 samples produce
a distinct echo--depending on the audio content.
- 1.5 times the sample rate in kHz give as a rule
of thumb the pan position for hard left/right.
Pan positions for a sample rate of 44.1 kHz:
% from center: Delay in ms: Delay in samples:
25 0.23 10.143
50 0.48 21.168
75 0.81 35.721
100 (L) 1.5 66.15")
(17
"\"Dissolve at Pan\"
[Panning in deg/s, default 0.0, limit +/-180]
[in: two Channels; out: two Channels]
"))))