From 71b3f37434853cc99abc7adc4c81d388c5fadb64 Mon Sep 17 00:00:00 2001 From: Steve Daulton Date: Wed, 19 Aug 2015 15:25:55 +0100 Subject: [PATCH] Fix for bug 1151 Extend available frequency range for Nyquist filter plug-ins. --- plug-ins/highpass.ny | 42 ++++++++++++++++++++--------------------- plug-ins/lowpass.ny | 45 ++++++++++++++++++++++---------------------- plug-ins/notch.ny | 39 ++++++++++++++++++++++++-------------- 3 files changed, 69 insertions(+), 57 deletions(-) diff --git a/plug-ins/highpass.ny b/plug-ins/highpass.ny index e5850a766..202657fa3 100644 --- a/plug-ins/highpass.ny +++ b/plug-ins/highpass.ny @@ -2,38 +2,38 @@ ;version 4 ;type process ;preview linear -;categories "http://lv2plug.in/ns/lv2core#HighpassPlugin" ;name "High Pass Filter..." ;action "Performing High Pass Filter..." ;author "Dominic Mazzoni" ;copyright "Released under terms of the GNU General Public License version 2" ;; highpass.ny by Dominic Mazzoni -;; Modified by David R. Sky -;; Updated by Steve Daulton June 2012, 2015. +;; Last updated August 2015 ;; Released under terms of the GNU General Public License version 2: ;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html . -;; To enable the Q control, remove one semicolon from the start of lines 20 and 34 - +;control range "Frequency range" choice "Hz,kHz" 0 +;control frequency "Frequency" real "" 1000 1 1000 ;control rolloff "Rolloff (dB per octave)" choice " 6 dB,12 dB,24 dB,36 dB,48 dB" 0 -;;control q "Filter quality (Q) for 12 dB rolloff" real "" 0.7071 .1 20 -;control frequency "Cutoff frequency (Hz)" real "" 1000 1 20000 -(cond - ((> frequency (/ *sound-srate* 2)) - (format nil - "Cutoff frequency is set at ~a Hz but must not~%~ - be greater than ~a Hz (half of the track sample rate)." - frequency - (truncate (/ *sound-srate* 2.0)))) - ((< frequency 1) - (format nil - "Cutoff frequency is set at ~a Hz~%but must be at least 1 Hz." - frequency)) -; ((= rolloff 1)(highpass2 s frequency (max (min q 20) 0.1))) - (T +(case range + (0 (setf f0 (format nil "~a Hz" frequency)) + (setf srate (format nil "~a Hz" *sound-srate*)) + (setf fmax (format nil "~a Hz" (/ *sound-srate* 2)))) + (T (setf f0 (format nil "~a kHz" frequency)) + (setf frequency (* frequency 1000)) + (setf srate (format nil "~a kHz" (/ *sound-srate* 1000))) + (setf fmax (format nil "~a kHz" (/ *sound-srate* 2000))))) + + +(if (>= frequency (/ *sound-srate* 2.0)) + (format nil "Error:\nFrequency (~a) too high for track sample rate.~%~%~ + Track sample rate is ~a~%~ + Frequency must be less than ~a." + f0 + srate + fmax) (funcall (nth rolloff '(hp highpass2 highpass4 highpass6 highpass8)) - *track* frequency))) + *track* frequency)) diff --git a/plug-ins/lowpass.ny b/plug-ins/lowpass.ny index 9d1ad7682..3b37b02f6 100644 --- a/plug-ins/lowpass.ny +++ b/plug-ins/lowpass.ny @@ -2,37 +2,38 @@ ;version 4 ;type process ;preview linear -;categories "http://lv2plug.in/ns/lv2core#LowpassPlugin" ;name "Low Pass Filter..." ;action "Performing Low Pass Filter..." ;author "Dominic Mazzoni" ;copyright "Released under terms of the GNU General Public License version 2" ;; lowpass.ny by Dominic Mazzoni -;; Modified by David R. Sky -;; Updated by Steve Daulton June 2012 +;; Last updated August 2015 ;; Released under terms of the GNU General Public License version 2: ;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html . -;; To enable the Q control, remove one semicolon from the start of lines 20 and 34 - +;control range "Frequency range" choice "Hz,kHz" 0 +;control frequency "Frequency" real "" 1000 1 1000 ;control rolloff "Rolloff (dB per octave)" choice " 6 dB,12 dB,24 dB,36 dB,48 dB" 0 -;;control q "Filter quality (Q) for 12 dB rolloff" real "" 0.7071 .1 20 -;control frequency "Cutoff frequency (Hz)" real "" 1000 1 20000 -(cond - ((> frequency (/ *sound-srate* 2)) - (format nil - "Cutoff frequency is set at ~a Hz but must not~%~ - be greater than ~a Hz (half of the track sample rate)." - frequency - (truncate (/ *sound-srate* 2.0)))) - ((< frequency 1) - (format nil - "Cutoff frequency is set at ~a Hz~%but must be at least 1 Hz." - frequency)) -; ((= rolloff 1)(lowpass2 s frequency (max (min q 20) 0.1))) - (T - (funcall + +(case range + (0 (setf f0 (format nil "~a Hz" frequency)) + (setf srate (format nil "~a Hz" *sound-srate*)) + (setf fmax (format nil "~a Hz" (/ *sound-srate* 2)))) + (T (setf f0 (format nil "~a kHz" frequency)) + (setf frequency (* frequency 1000)) + (setf srate (format nil "~a kHz" (/ *sound-srate* 1000))) + (setf fmax (format nil "~a kHz" (/ *sound-srate* 2000))))) + + +(if (>= frequency (/ *sound-srate* 2.0)) + (format nil "Error:\nFrequency (~a) too high for track sample rate.~%~%~ + Track sample rate is ~a~%~ + Frequency must be less than ~a." + f0 + srate + fmax) + (funcall (nth rolloff '(lp lowpass2 lowpass4 lowpass6 lowpass8)) - *track* frequency))) + *track* frequency)) diff --git a/plug-ins/notch.ny b/plug-ins/notch.ny index 7e6a97c91..4dccbed07 100644 --- a/plug-ins/notch.ny +++ b/plug-ins/notch.ny @@ -1,26 +1,37 @@ ;nyquist plug-in -;version 1 +;version 4 ;type process ;preview linear -;categories "http://lv2plug.in/ns/lv2core/#FilterPlugin" ;name "Notch Filter..." -;action "Performing Notch Filter..." +;action "Applying Notch Filter..." ;author "Steve Daulton and Bill Wharrie" ;copyright "Released under terms of the GNU General Public License version 2" -;control freq "Frequency" real "Hz" 60 0 10000 -;control q "Q (higher value reduces width)" real "" 1 0.1 20 - ;; notch.ny by Steve Daulton and Bill Wharrie, September 2010. +;; Last updated August 2015. ;; Released under terms of the GNU General Public License version 2: ;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html . -;; (multichan-expand) provides legacy support for old versions of Audacity -;; in which the (notch2) function only supports mono tracks. +;control range "Frequency range" choice "Hz,kHz" 0 +;control frequency "Frequency" real "" 60 1 1000 +;control q "Q (higher value reduces width)" real "" 1 0.1 20 -(cond - ((> freq (/ *sound-srate* 2.0))(format nil "Error:\nFrequency too high for track sample rate.")) - ((< freq 0)(format nil "Error:\nNegative frequency is invalid.")) - ((< q 0.01)(format nil "Error:\nWidth must be at least 0.01.")) - ((= freq 0) (format nil "Nothing to be done.")) - (T (multichan-expand #'notch2 s freq q))) + +(case range + (0 (setf f0 (format nil "~a Hz" frequency)) + (setf srate (format nil "~a Hz" *sound-srate*)) + (setf fmax (format nil "~a Hz" (/ *sound-srate* 2)))) + (T (setf f0 (format nil "~a kHz" frequency)) + (setf frequency (* frequency 1000)) + (setf srate (format nil "~a kHz" (/ *sound-srate* 1000))) + (setf fmax (format nil "~a kHz" (/ *sound-srate* 2000))))) + + +(if (>= frequency (/ *sound-srate* 2.0)) + (format nil "Error:\nFrequency (~a) too high for track sample rate.~%~%~ + Track sample rate is ~a~%~ + Frequency must be less than ~a." + f0 + srate + fmax) + (notch2 *track* frequency q))