mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-02 16:49:41 +02:00
I've added some of the new plugin stuff to LV2, Nyquist, and Vamp so that they play better in the new system. They no longer get bunched in with the Audacity effects when sorting or grouping the menus. They have not been fully converted but they should be good for 2.1.0. Nyquist plugins now include ";author" and ";copyright" statements. Added the 4 new Nyquist plugins to the Windows build. Audiounits are still coming...had to push them to the back burner to get this other stuff out of the way. Scanning for new plugins has been improved so that newly discovered ones will be shown to the user when Audacity starts. Effects menu sorting has been fixed and improved. Disabling effect types in Preferences works again and you no longer have to restart Audacity for them the change to work. Effect usage in chains works again. Plugin registration dialog code simplified a bit. Group names in the pluginregistry are now base64 encoded. I never really thought about it, but wxFileConfig group names are case insensitive and since I was using the group name as the plugin ID, I ran into a conflict on Linux where there were two plugins with the same name, just different case. (And they were different plugins.) Hoping all of this will change when/if the config file gets converted to XML. (wx3 if finally including XML support) A fair amount of cleanup of this new code has been done and will continue as more stuff is converted.
158 lines
5.7 KiB
Common Lisp
158 lines
5.7 KiB
Common Lisp
;nyquist plug-in
|
|
;version 3
|
|
;type process
|
|
;preview enabled
|
|
;categories "http://lv2plug.in/ns/lv2core#UtilityPlugin"
|
|
;name "Vocal Remover..."
|
|
;action "Removing center-panned audio..."
|
|
;info "For reducing center-panned vocals"
|
|
;author "Steve Daulton"
|
|
;copyright "Released under terms of the GNU General Public License version 2"
|
|
|
|
;; This version of vocalremover.ny by Steve Daulton June 2013.
|
|
;;
|
|
;; based on Center pan Remover by David R. Sky November 12, 2004
|
|
;; Modified by Gale Andrews January 2008 to make full spectrum removal
|
|
;; the default, restore a single Help screen and restore error checking.
|
|
;; Thanks to David Hostetler for notes in his own vocal remover plug-in,
|
|
;; http://www.freelists.org/archives/audacity4blind/06-2006/msg00049.html
|
|
;;
|
|
;; Released under terms of the GNU General Public License version 2:
|
|
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
;control action "Remove vocals or view Help" choice "Remove vocals,View Help" 0
|
|
;control band-choice "Removal choice" choice "Simple (entire spectrum),Remove frequency band,Retain frequency band" 0
|
|
;control low-range "Lower frequency band limit (Hz)" string " " "500"
|
|
;control high-range "Upper frequency band limit (Hz)" string " " "2000"
|
|
|
|
|
|
; Initialize globals
|
|
(setf message "") ; empty output message
|
|
|
|
(defun help ()
|
|
(format nil
|
|
"Vocal Remover requires a stereo track. It works best with
|
|
lossless files like WAV or AIFF, rather than MP3 or
|
|
other compressed formats. It only removes vocals or other
|
|
audio that is panned to center (sounds equally loud in left
|
|
and right). Vocals may be mixed this way. Inverting one
|
|
channel then panning both to center cancels out any audio
|
|
which was originally center-panned, making it inaudible.
|
|
This can remove some parts of the audio you may want to
|
|
keep, such as drums, which are also often mixed to center.
|
|
If the vocals and other centered parts differ in pitch,
|
|
this can be solved by removing only selected frequencies.~%
|
|
Vocal Remover thus has three choices of removal method.
|
|
'Simple' inverts the entire frequency spectrum of one
|
|
channel. This may remove too much music if other parts of
|
|
the audio are centered as well as the vocals. In that case,
|
|
try the other choices. If the vocals are at a different
|
|
pitch than the other audio (such as a high female voice),
|
|
try 'Remove frequency band'. This only removes frequencies
|
|
between a lower and upper limit which you can enter in the
|
|
'Frequency band...' boxes. Experiment by entering what
|
|
sounds like the most significant frequency range of the
|
|
original vocals. If the other choices remove too much
|
|
audio in a particular frequency range (such as low drums
|
|
or bass), try 'Retain frequency band'. This only removes
|
|
frequencies outside the limits, retaining the others."))
|
|
|
|
(defun string-to-list (str)
|
|
(read (make-string-input-stream (format nil "(~a)" str))))
|
|
|
|
|
|
;;; ERROR CHECKING:
|
|
|
|
;; Check that selected audio is stereo
|
|
(defun check-stereo ()
|
|
(if (soundp s)
|
|
(setf message (format nil
|
|
"~%Vocal Remover requires an unsplit, stereo track.~%~
|
|
If you have a stereo track split into left and right~%~
|
|
channels, use 'Make Stereo Track' on the Track~%~
|
|
Drop-Down Menu, then run Vocal Remover again.~%"))))
|
|
|
|
;;; Check that frequency range is valid
|
|
(defun check-range ()
|
|
(setq low-range (first (string-to-list low-range)))
|
|
(setq high-range (first (string-to-list high-range)))
|
|
(if (or (not (numberp low-range))
|
|
(not (numberp high-range))
|
|
(< low-range 0)
|
|
(> low-range 20000)
|
|
(< high-range 0)
|
|
(> high-range 20000))
|
|
(progn
|
|
(if (= band-choice 1)
|
|
(setf band-type "remove")
|
|
(setf band-type "retain"))
|
|
(setf message (format nil
|
|
"~a~%~
|
|
Enter both a lower and an upper limit for the~%~
|
|
frequency band you want to ~a.~%~
|
|
You entered: \"~a\" \"~a\"~%~%~
|
|
Both values must be between 0 and 20000."
|
|
message
|
|
band-type
|
|
low-range
|
|
high-range)))
|
|
;; Else ensure that high-range > low-range.
|
|
(let ((temp low-range))
|
|
(when (> low-range high-range)
|
|
(setq low-range high-range)
|
|
(setq high-range temp))))
|
|
;; Range values must cannot be higher than Nyquist frequency.
|
|
(setq low-range (min low-range (/ *sound-srate* 2)))
|
|
(setq high-range (min high-range (/ *sound-srate* 2))))
|
|
|
|
|
|
(defun show-message ()
|
|
;; output to both message box and to debug window
|
|
;; Copying from debug window is supported on all platforms.
|
|
(when (= action 0) ; error
|
|
(setf message (format nil "Error.~%~a" message)))
|
|
(format t message)
|
|
(format nil message))
|
|
|
|
|
|
;;; DSP FUNCTIONS:
|
|
|
|
(defun bandpass (sig low high)
|
|
(lowpass8
|
|
(highpass8 sig low)
|
|
high))
|
|
|
|
(defun bandstop (sig low high)
|
|
(sum (lowpass8 sig low)
|
|
(highpass8 sig high)))
|
|
|
|
(defun CentrePanRemove ()
|
|
(cond
|
|
((= band-choice 1) ; remove frequencies inside range
|
|
(sum (aref s 0)
|
|
(mult -1 (aref s 1))
|
|
(bandstop (aref s 1) low-range high-range)))
|
|
((= band-choice 2) ; remove frequencies outside range
|
|
(sum (aref s 0)
|
|
(mult -1 (aref s 1))
|
|
(bandpass (aref s 1) low-range high-range)))
|
|
(t ; invert and add right to left channel
|
|
(sum (aref s 0)
|
|
(mult -1 (aref s 1))))))
|
|
|
|
|
|
;;; MAIN PROGRAM:
|
|
|
|
(cond
|
|
((= action 1) ; Show help
|
|
(setf message (help)))
|
|
((= band-choice 0) ; Remove full spectrum
|
|
(check-stereo))
|
|
(t ; Remove band limited
|
|
(check-stereo)
|
|
(check-range)))
|
|
|
|
(if (= (length message) 0)
|
|
(CentrePanRemove)
|
|
(show-message))
|