;nyquist plug-in
;version 1
;type process
;name "Reduce Noise..."
;action "Reducing Noise..."
;info "by Robert J. Haenggi\nReleased under GPL v2.\n"

;; reduce-noise.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.0, December 2012 
;; requires Audacity 1.3.12 or later, developed under Audacity 2.0.2

;; A moving average filter is used to reduce noise 
;; and smooth the wave form 
;; m = length of the moving average filter
(defun reduce (s &optional (m 23))
  (let* ((old-peak (peak  s (* 30 (truncate *sound-srate*))))
  (periodic  (snd-avg (aref (yin (force-srate (/ *sound-srate* 4)s) 43.35 115.35  4410) 1) 7 1 op-average)))
  (setf  s (integrate (snd-avg  (slope  s) m 1 op-average)))
  (setf s (hp (mult s (diff 1 periodic ))   250))
  (mult s (/ old-peak   (peak  s (truncate (* 30 *sound-srate*)))))))

(multichan-expand 'reduce s)


