From 657784c1a9bf557d2d8ac8f00ff9e2ee11cd2e0d Mon Sep 17 00:00:00 2001 From: Nil Geisweiller Date: Wed, 13 Dec 2006 13:53:00 +0000 Subject: add deicsonzefilter.h deicsonzefilter.cpp --- muse/synti/deicsonze/deicsonzefilter.cpp | 67 ++++++++++++++++++++++++++++++++ muse/synti/deicsonze/deicsonzefilter.h | 59 ++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 muse/synti/deicsonze/deicsonzefilter.cpp create mode 100644 muse/synti/deicsonze/deicsonzefilter.h diff --git a/muse/synti/deicsonze/deicsonzefilter.cpp b/muse/synti/deicsonze/deicsonzefilter.cpp new file mode 100644 index 00000000..d4bef946 --- /dev/null +++ b/muse/synti/deicsonze/deicsonzefilter.cpp @@ -0,0 +1,67 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzefilter.cpp +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#include "deicsonzefilter.h" + +LowFilter::LowFilter() { + _li = 0.0; + _ri = 0.0; + _lo = 0.0; + _ro = 0.0; +} + +void LowFilter::setSamplerate(int sr) { + _samplerate = sr; +} + +void LowFilter::setCutoff(double cut) { + _cutoff = cut; + float w = 2.0 * (float)_samplerate; + float fCut = _cutoff * 2.0 * M_PI; + float norm = 1.0 / (fCut + w); + _a = fCut * norm; + _b = (w - fCut) * norm; +} + +void LowFilter::process(float* leftSamples, float* rightSamples, unsigned n) { + float cl, cr; + for(unsigned i = 0; i < n; i++) { + cl = leftSamples[i]; + cr = rightSamples[i]; + + leftSamples[i] = _a * (cl + _li) + _b * _lo; + rightSamples[i] = _a * (cr + _ri) + _b * _ro; + + _li = cl; + _ri = cr; + _lo = leftSamples[i]; + _ro = rightSamples[i]; + } +} + diff --git a/muse/synti/deicsonze/deicsonzefilter.h b/muse/synti/deicsonze/deicsonzefilter.h new file mode 100644 index 00000000..fc92142a --- /dev/null +++ b/muse/synti/deicsonze/deicsonzefilter.h @@ -0,0 +1,59 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzefilter.h +// +// +// Copyright (c) 2004-2006 Nil Geisweiller +// +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA or point your web browser to http://www.gnu.org. +//=========================================================================== + +#ifndef __DEICSONZEFILTER_H +#define __DEICSONZEFILTER_H + +#include + +class LowFilter { + private: + int _samplerate; + + double _cutoff; //frequency cutoff + float _a; + float _b; + + float _li; //last left input sample + float _ri; //last right input sample + float _lo; //last left output sample + float _ro; //last right output sample + public: + LowFilter(); + ~LowFilter() {} + + void setSamplerate(int sr); + void setCutoff(double cut); + //int getSamplerate(); + //double getCutoff(); + + void process(float* leftSamples, float* RightSamples, unsigned n); +}; + +#endif /* __DEICSONZEFILTER_H */ -- cgit v1.2.3