diff options
author | Robert Jonsson <spamatica@gmail.com> | 2011-04-15 18:52:45 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2011-04-15 18:52:45 +0000 |
commit | 47a10173ea203de2036dd00791fe5c24fb673135 (patch) | |
tree | 6cb2e59a1e099adb30ec4f394097e33974c54ac4 /attic/muse2-oom/muse2/plugins/doublechorus | |
parent | 8edb9ca0e8e056faa0b488c947e7447a8148f880 (diff) |
removing unnecessary duplication
Diffstat (limited to 'attic/muse2-oom/muse2/plugins/doublechorus')
6 files changed, 0 insertions, 766 deletions
diff --git a/attic/muse2-oom/muse2/plugins/doublechorus/CMakeLists.txt b/attic/muse2-oom/muse2/plugins/doublechorus/CMakeLists.txt deleted file mode 100644 index 04ea864f..00000000 --- a/attic/muse2-oom/muse2/plugins/doublechorus/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -#============================================================================= -# MusE -# Linux Music Editor -# $Id:$ -# -# Copyright (C) 2002-2006 by Werner Schweer and others -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2. -# -# 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., 675 Mass Ave, Cambridge, MA 02139, USA. -#============================================================================= - -## -## List of source files to compile -## -file (GLOB doublechorus_source_files - doublechorus.cpp - doublechorusmodel.cpp - simplechorusmodel.cpp - ) - -## -## Define target -## -add_library ( doublechorus SHARED - ${doublechorus_source_files} - ) - - -## -## Compilation flags and target name -## -# tell cmake to name the target doublechorus.so instead of -# libdoublechorus.so -# -set_target_properties (doublechorus - PROPERTIES PREFIX "" - #COMPILE_FLAGS "-O3" - ) - -## -## Install location -## -install( TARGETS doublechorus - DESTINATION ${MusE_PLUGINS_DIR} - ) diff --git a/attic/muse2-oom/muse2/plugins/doublechorus/doublechorus.cpp b/attic/muse2-oom/muse2/plugins/doublechorus/doublechorus.cpp deleted file mode 100644 index 27d84336..00000000 --- a/attic/muse2-oom/muse2/plugins/doublechorus/doublechorus.cpp +++ /dev/null @@ -1,173 +0,0 @@ -//========================================================= -// DoubleChorus for MusE -// -// (C) Copyright 2006 Nil Geisweiller -//========================================================= - -#include "doublechorusmodel.h" -#include <stdio.h> - -//--------------------------------------------------------- -// instantiate doublechorus -// Construct a new plugin instance. -//--------------------------------------------------------- - -LADSPA_Handle instantiate(const LADSPA_Descriptor* /*Descriptor*/, - unsigned long samplerate) -{ - return new DoubleChorusModel(samplerate); -} - -//--------------------------------------------------------- -// connect PortTo doublechorus -// Connect a port to a data location. -//--------------------------------------------------------- - -void connect(LADSPA_Handle Instance, unsigned long port, - LADSPA_Data* data) -{ - ((DoubleChorusModel *)Instance)->port[port] = data; -} - -//--------------------------------------------------------- -// activate -//--------------------------------------------------------- - -void activate(LADSPA_Handle instance) -{ - ((DoubleChorusModel *)instance)->activate(); -} - -//--------------------------------------------------------- -// deactivate -//--------------------------------------------------------- - -void deactivate(LADSPA_Handle /*Instance*/) -{ -} - -//--------------------------------------------------------- -// run doublechorus -//--------------------------------------------------------- - -void run(LADSPA_Handle Instance, unsigned long n) -{ - ((DoubleChorusModel *)Instance)->processReplace(n); -} - -//--------------------------------------------------------- -// runAdding doublechorus -// *ADD* the output to the output buffer. -//--------------------------------------------------------- - -void runAdding(LADSPA_Handle Instance, unsigned long n) -{ - ((DoubleChorusModel *)Instance)->processMix(n); -} - -//--------------------------------------------------------- -// set doublechorus RunAddingGain -//--------------------------------------------------------- - -void setGain(LADSPA_Handle /*Instance*/, LADSPA_Data /*Gain*/) -{ - printf("TEST setGain\n"); - // ((DoubleChorusModel *)Instance)->m_fRunAddingGain = Gain; -} - -//--------------------------------------------------------- -// cleanup doublechorus -//--------------------------------------------------------- - -void cleanup(LADSPA_Handle Instance) -{ - delete (DoubleChorusModel *)Instance; -} - -static const char* portNames[] = { - "Input (Left)", - "Input (Right)", - "Output (Left)", - "Output (Right)", - "Pan 1", - "LFOFreq 1", - "Depth 1", - "Pan 2", - "LFOFreq 2", - "Depth 2", - "Dry/Wet" -}; - -LADSPA_PortDescriptor portDescriptors[] = { - LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, - LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO, - LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, - LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL, - LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL -}; - -LADSPA_PortRangeHint portRangeHints[] = { - { 0, 0.0, 0.0 }, - { 0, 0.0, 0.0 }, - { 0, 0.0, 0.0 }, - { 0, 0.0, 0.0 }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_HIGH, 0.0, 1.0 }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_HIGH, MINFREQ, MAXFREQ }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, 0.0, 1.0 }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, 0.0, 1.0 }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_MIDDLE, MINFREQ, MAXFREQ }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, 0.0, 1.0 }, - { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MIDDLE, 0.0, 1.0 }, -}; - -LADSPA_Descriptor descriptor = { - 1051, - "doublechorus1", - LADSPA_PROPERTY_HARD_RT_CAPABLE, - "DoubleChorus", - "Nil Geisweiller", - "GPL", - NBRPARAM + 4, - portDescriptors, - portNames, - portRangeHints, - 0, // impl. data - instantiate, - connect, - activate, - run, - runAdding, - setGain, - deactivate, - cleanup -}; - -//--------------------------------------------------------- -// _init -// called automatically when the plugin library is first -// loaded. -//--------------------------------------------------------- -void _init() { -} - -//--------------------------------------------------------- -// _fini -// called automatically when the library is unloaded. -//--------------------------------------------------------- -void _fini() { -} - -//--------------------------------------------------------- -// ladspa_descriptor -// Return a descriptor of the requested plugin type. -//--------------------------------------------------------- -const LADSPA_Descriptor* ladspa_descriptor(unsigned long i) { - return (i == 0) ? &descriptor : 0; -} - diff --git a/attic/muse2-oom/muse2/plugins/doublechorus/doublechorusmodel.cpp b/attic/muse2-oom/muse2/plugins/doublechorus/doublechorusmodel.cpp deleted file mode 100644 index 01def026..00000000 --- a/attic/muse2-oom/muse2/plugins/doublechorus/doublechorusmodel.cpp +++ /dev/null @@ -1,214 +0,0 @@ -//=========================================================================== -// -// doublechorusmodel -// -// Version 0.0.1 -// -// -// -// -// Copyright (c) 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 "doublechorusmodel.h" - -//--------------------------------------------------------- -// DoubleChorusModel -//--------------------------------------------------------- - -DoubleChorusModel::DoubleChorusModel(unsigned long samplerate) { - _simpleChorus1 = new SimpleChorusModel((float)samplerate); - _simpleChorus2 = new SimpleChorusModel((float)samplerate); - - param[0] = getPan1(); - param[1] = getLFOFreq1(); - param[2] = getDepth1(); - param[3] = getPan2(); - param[4] = getLFOFreq2(); - param[5] = getDepth2(); - param[6] = getDryWet(); -} - -DoubleChorusModel::~DoubleChorusModel() { - delete(_simpleChorus1); - delete(_simpleChorus2); -} - -//--------------------------------------------------------- -// activate -//--------------------------------------------------------- - -void DoubleChorusModel::activate() { - *port[4] = param[0]; - *port[5] = param[1]; - *port[6] = param[2]; - *port[7] = param[3]; - *port[8] = param[4]; - *port[9] = param[5]; - *port[10] = param[6]; -} - -//--------------------------------------------------------- -// processReplace -//--------------------------------------------------------- - -void DoubleChorusModel::processReplace(long n) { - float tmpLeftOutput1; - float tmpRightOutput1; - float tmpLeftOutput2; - float tmpRightOutput2; - //update parameters - if (param[0] != *port[4]) { - param[0] = *port[4]; - setPan1(param[0]); - } - if (param[1] != *port[5]) { - param[1] = *port[5]; - setLFOFreq1(param[1]); - } - if (param[2] != *port[6]) { - param[2] = *port[6]; - setDepth1(param[2]); - } - if (param[3] != *port[7]) { - param[3] = *port[7]; - setPan2(param[3]); - } - if (param[4] != *port[8]) { - param[4] = *port[8]; - setLFOFreq2(param[4]); - } - if (param[5] != *port[9]) { - param[5] = *port[9]; - setDepth2(param[5]); - } - if (param[6] != *port[10]) { - param[6] = *port[10]; - setDryWet(param[6]); - } - //process the effect - for (int i = 0; i < n; ++i) { - _simpleChorus1->process_chorus(port[0][i], port[1][i], - &tmpLeftOutput1, &tmpRightOutput1); - _simpleChorus2->process_chorus(port[0][i], port[1][i], - &tmpLeftOutput2, &tmpRightOutput2); - port[2][i] = _dryWet * (tmpLeftOutput1 + tmpLeftOutput2) - + (1.0 - _dryWet) * port[0][i]; - port[3][i] = _dryWet * (tmpRightOutput1 + tmpRightOutput2) - + (1.0 - _dryWet) * port[1][i]; - } -} - -void DoubleChorusModel::processMix(long n) { - float tmpLeftOutput1; - float tmpRightOutput1; - float tmpLeftOutput2; - float tmpRightOutput2; - //update parameters - if (param[0] != *port[4]) { - param[0] = *port[4]; - setPan1(param[0]); - } - if (param[1] != *port[5]) { - param[1] = *port[5]; - setLFOFreq1(param[1]); - } - if (param[2] != *port[6]) { - param[2] = *port[6]; - setDepth1(param[2]); - } - if (param[3] != *port[7]) { - param[3] = *port[7]; - setPan2(param[3]); - } - if (param[4] != *port[8]) { - param[4] = *port[8]; - setLFOFreq2(param[4]); - } - if (param[5] != *port[9]) { - param[5] = *port[9]; - setDepth2(param[5]); - } - if (param[6] != *port[10]) { - param[6] = *port[10]; - setDryWet(param[6]); - } - //process the effect - for (int i = 0; i < n; ++i) { - _simpleChorus1->process_chorus(port[0][i], port[1][i], - &tmpLeftOutput1, &tmpRightOutput1); - _simpleChorus2->process_chorus(port[0][i], port[1][i], - &tmpLeftOutput2, &tmpRightOutput2); - port[2][i] += _dryWet * (tmpLeftOutput1 + tmpLeftOutput2) - + (1.0 - _dryWet) * port[0][i]; - port[3][i] += _dryWet * (tmpRightOutput1 + tmpRightOutput2) - + (1.0 - _dryWet) * port[1][i]; - } -} - -//------------------------------------------------------------------ -// set parameters -//------------------------------------------------------------------ -void DoubleChorusModel::setPan1(float value) { - _simpleChorus1->setPan(value); -} -void DoubleChorusModel::setLFOFreq1(float value) { - _simpleChorus1->setLFOFreq(value); -} -void DoubleChorusModel::setDepth1(float value) { - _simpleChorus1->setDepth(value); -} -void DoubleChorusModel::setPan2(float value) { - _simpleChorus2->setPan(value); -} -void DoubleChorusModel::setLFOFreq2(float value) { - _simpleChorus2->setLFOFreq(value); -} -void DoubleChorusModel::setDepth2(float value) { - _simpleChorus2->setDepth(value); -} -void DoubleChorusModel::setDryWet(float value) { - _dryWet = value; -} - -//---------------------------------------------------------------- -// get parameters -//---------------------------------------------------------------- -float DoubleChorusModel::getPan1() { - return _simpleChorus1->getPan(); -} -float DoubleChorusModel::getLFOFreq1() { - return _simpleChorus1->getLFOFreq(); -} -float DoubleChorusModel::getDepth1() { - return _simpleChorus1->getDepth(); -} -float DoubleChorusModel::getPan2() { - return _simpleChorus2->getPan(); -} -float DoubleChorusModel::getLFOFreq2() { - return _simpleChorus2->getLFOFreq(); -} -float DoubleChorusModel::getDepth2() { - return _simpleChorus2->getDepth(); -} -float DoubleChorusModel::getDryWet() { - return _dryWet; -} diff --git a/attic/muse2-oom/muse2/plugins/doublechorus/doublechorusmodel.h b/attic/muse2-oom/muse2/plugins/doublechorus/doublechorusmodel.h deleted file mode 100644 index 40ce9f3f..00000000 --- a/attic/muse2-oom/muse2/plugins/doublechorus/doublechorusmodel.h +++ /dev/null @@ -1,72 +0,0 @@ -//=========================================================================== -// -// doublechorusmodel -// -// Version 0.0.1 -// -// -// -// -// Copyright (c) 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 __DOUBLECHORUSMODEL_H -#define __DOUBLECHORUSMODEL_H - -#include "simplechorusmodel.h" -#include "../../muse/ladspa.h" - -#define NBRPARAM 7 - -class SimpleChorusModel; - -class DoubleChorusModel { - SimpleChorusModel* _simpleChorus1; - SimpleChorusModel* _simpleChorus2; - - float _dryWet; //0.0 : dry, 1.0 : wet - - public: - LADSPA_Data* port[NBRPARAM + 4]; - float param[NBRPARAM]; - - DoubleChorusModel(unsigned long samplerate); - ~DoubleChorusModel(); - void processMix(long numsamples); - void processReplace(long numsamples); - void setPan1(float value); - void setLFOFreq1(float value); - void setDepth1(float value); - void setPan2(float value); - void setLFOFreq2(float value); - void setDepth2(float value); - void setDryWet(float value); - float getPan1(); - float getLFOFreq1(); - float getDepth1(); - float getPan2(); - float getLFOFreq2(); - float getDepth2(); - float getDryWet(); - - void activate(); -}; - -#endif diff --git a/attic/muse2-oom/muse2/plugins/doublechorus/simplechorusmodel.cpp b/attic/muse2-oom/muse2/plugins/doublechorus/simplechorusmodel.cpp deleted file mode 100644 index 72015465..00000000 --- a/attic/muse2-oom/muse2/plugins/doublechorus/simplechorusmodel.cpp +++ /dev/null @@ -1,157 +0,0 @@ -//=========================================================================== -// -// simplechorus -// -// Version 0.0.1 -// -// -// -// -// Copyright (c) 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 "simplechorusmodel.h" -#include <math.h> -#include <stdio.h> - -#define ABS(x) (x>=0?x:-x) - -// Linearly interpolate [ = a * (1 - f) + b * f] -inline float lin_interp(float f, float a, float b) { - return a + f * (b - a); -} - -// Cubic interpolation function -inline float cube_interp(const float fr, - const float inm1, - const float in, - const float inp1, - const float inp2) { - return in + 0.5f * fr * (inp1 - inm1 + - fr * (4.0f * inp1 + 2.0f * inm1 - 5.0f * in - inp2 + - fr * (3.0f * (in - inp1) - inm1 + inp2))); -} - -float SimpleChorusModel::sinus[MAXSINUSRESOLUTION]; -int SimpleChorusModel::useCount = 0; - -SimpleChorusModel::SimpleChorusModel(float samplerate) { - _sampleRate = samplerate; - //sinus - if (useCount++ == 0) - for(int i = 0; i < MAXSINUSRESOLUTION; i++) - sinus[i] = (float)(sin(((double)i * 2.0 * M_PI) / - (double)MAXSINUSRESOLUTION)); - _index = 0.0; - //init buffer - for(int i = 0; i < MAXBUFFERLENGTH; i++) { - _leftBuffer[i] = 0.0; - _rightBuffer[i] = 0.0; - } - _position = 0; - //initial parameters - _pan = 0.5; - _LFOFreq = 1.0; - _depth = 0.5; - setChorus(); -} - -SimpleChorusModel::~SimpleChorusModel() { -} - -void SimpleChorusModel::process_chorus(float leftInput, float rightInput, - float* leftOutput, float* rightOutput) { - float ocsDiff; - - _ocsDistance = _depthAmp * sinus[(int)_index]; - - ocsDiff = _ocsDistance - floorf(_ocsDistance); - - _past_position_left = MAXBUFFERLENGTH //to be sure that _past_position_left>0 - + _position - _leftMidDistance + (int)_ocsDistance; - _past_position_right = MAXBUFFERLENGTH - + _position - _rightMidDistance + (int)_ocsDistance; - - *leftOutput = _leftAmp * - lin_interp(ocsDiff, _leftBuffer[_past_position_left%MAXBUFFERLENGTH], - _leftBuffer[(_past_position_left+1)%MAXBUFFERLENGTH]); - *rightOutput = _rightAmp * - lin_interp(ocsDiff, _rightBuffer[_past_position_right%MAXBUFFERLENGTH], - _rightBuffer[(_past_position_right+1)%MAXBUFFERLENGTH]); - - _leftBuffer[_position] = leftInput; - _rightBuffer[_position] = rightInput; - - _position++; - _position %= MAXBUFFERLENGTH; - - _index += _inct; - _index = (_index<MAXSINUSRESOLUTION?_index:_index-MAXSINUSRESOLUTION); -} - -void SimpleChorusModel::setPan(float p) { - _pan = p; - setChorus(); -} -void SimpleChorusModel::setLFOFreq(float l) { - _LFOFreq = l; - setChorus(); -} -void SimpleChorusModel::setDepth(float d) { - _depth = d; - setChorus(); -} -void SimpleChorusModel::setSampleRate(float s) { - _sampleRate = s; - setChorus(); -} - -float SimpleChorusModel::getPan() { - return _pan; -} -float SimpleChorusModel::getLFOFreq() { - return _LFOFreq; -} -float SimpleChorusModel::getDepth() { - return _depth; -} - -void SimpleChorusModel::setChorus() { - //inct - _inct = (float)MAXSINUSRESOLUTION/_sampleRate * _LFOFreq; - //left & right amp - _leftAmp = lin_interp(1.0 - _pan, 1.0 - PANAMP, 1.0 + PANAMP); - _rightAmp = lin_interp(_pan, 1.0 - PANAMP, 1.0 + PANAMP); - //left & right midDistance - float leftmdm; //left mid distance in meter - float rightmdm; //right mid distance in meter - leftmdm = MIDSOURCEDISTANCE - EARSDISTANCE * (0.5 - _pan); - rightmdm = MIDSOURCEDISTANCE + EARSDISTANCE * (0.5 - _pan); - - _leftMidDistance = (int)(_sampleRate * leftmdm / SOUNDSPEED); - _rightMidDistance = (int)(_sampleRate * rightmdm / SOUNDSPEED); - - //depthAmp - _depthAmp = - _sampleRate * (MAXDEPTH * _depth) /SOUNDSPEED; - //filter coef - _filterCoef1 = 1 - COEFFILTER; - _filterCoef2 = COEFFILTER; -} diff --git a/attic/muse2-oom/muse2/plugins/doublechorus/simplechorusmodel.h b/attic/muse2-oom/muse2/plugins/doublechorus/simplechorusmodel.h deleted file mode 100644 index 797e7030..00000000 --- a/attic/muse2-oom/muse2/plugins/doublechorus/simplechorusmodel.h +++ /dev/null @@ -1,96 +0,0 @@ -//=========================================================================== -// -// simplechorus -// -// Version 0.0.1 -// -// -// -// -// Copyright (c) 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 __SIMPLECHORUSMODEL_H -#define __SIMPLECHORUSMODEL_H - -#define MAXBUFFERLENGTH 192000 -#define MAXSINUSRESOLUTION 192000 -#define MINFREQ 0.05 //in Hz -#define MAXFREQ 5.0 //in Hz -#define EARSDISTANCE 0.12 //in meter -#define MIDSOURCEDISTANCE 2.0 //in meter -#define MAXDEPTH 1.0 //in meter, radius -#define SOUNDSPEED 330.0 //in meter per second -#define MINDELAYSEC 0.01 //in second -#define MAXDELAYSEC 1.0 //in second -#define COEFFILTER 0.97576 //0.26795 -#define PANAMP 0.75 -//with cutoff = samplerate/256 -//following (2-cos(x)) - sqrt((2-cos(x))^2 - 1) with x = 2*pi*cutoff/samplerate -//#define M_PI 3.14159265358979 - -class SimpleChorusModel { - private : - //parameters - float _pan; - float _LFOFreq; - float _depth; - //parameter state - float _sampleRate; - float _depthAmp; - float _leftAmp; - float _rightAmp; - float _filterCoef1; - float _filterCoef2; - int _leftMidDistance; //distance of the left micro in samples - int _rightMidDistance; //distance of the right micro in samples - //state - float _inct; - float _index; //time at the scale of sampleRate - float _leftBuffer[MAXBUFFERLENGTH]; - float _rightBuffer[MAXBUFFERLENGTH]; - float _ocsDistance; //in sample, distance of the micro with initial position - int _past_position_left; - int _past_position_right; - int _position; - public : - static int useCount; - static float sinus[MAXSINUSRESOLUTION]; - - - void process_chorus(float leftInput, float rightInput, - float* leftOutput, float* rightOutput); - - void setPan(float); - void setLFOFreq(float); - void setDepth(float); - void setSampleRate(float); - float getPan(); - float getLFOFreq(); - float getDepth(); - - void setChorus(); - - SimpleChorusModel(float samplerate); - ~SimpleChorusModel(); - -}; - -#endif |