diff options
Diffstat (limited to 'muse_qt4_evolution/muse/auxplugin.cpp')
-rw-r--r-- | muse_qt4_evolution/muse/auxplugin.cpp | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/muse_qt4_evolution/muse/auxplugin.cpp b/muse_qt4_evolution/muse/auxplugin.cpp new file mode 100644 index 00000000..ad203c84 --- /dev/null +++ b/muse_qt4_evolution/muse/auxplugin.cpp @@ -0,0 +1,190 @@ +//============================================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// Copyright (C) 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. +//============================================================================= + +#include "globaldefs.h" +#include "auxplugin.h" +#include "gconfig.h" + +AuxPlugin* auxPlugin; + +//--------------------------------------------------------- +// AuxPlugin +//--------------------------------------------------------- + +AuxPlugin::AuxPlugin() + : Plugin(0) + { + } + +//--------------------------------------------------------- +// range +//--------------------------------------------------------- + +void AuxPlugin::range(int idx, double* min, double* max) const + { + switch(idx) { + case 0: // volume + *min = pow(10.0f, config.minSlider * 0.05f); + *max = pow(10.0f, config.maxSlider * 0.05f); + break; + case 1: // pan + *min = -1.0; + *max = 1.0; + break; + default: + printf("AuxPlugin::bad index\n"); + break; + } + } + +//--------------------------------------------------------- +// createPIF +//--------------------------------------------------------- + +PluginIF* AuxPlugin::createPIF(PluginI* pi) + { + AuxPluginIF* pif = new AuxPluginIF(pi); + pif->init(pi->plugin()); + return pif; + } + +//--------------------------------------------------------- +// isLog +//--------------------------------------------------------- + +bool AuxPlugin::isLog(int idx) const + { + return idx == 0 ? true : false; + } + +//--------------------------------------------------------- +// isBool +//--------------------------------------------------------- + +bool AuxPlugin::isBool(int) const + { + return false; + } + +//--------------------------------------------------------- +// isInt +//--------------------------------------------------------- + +bool AuxPlugin::isInt(int) const + { + return false; + } + +//--------------------------------------------------------- +// defaultValue +//--------------------------------------------------------- + +double AuxPlugin::defaultValue(int idx) const + { + return idx == 0 ? -70.0 : 0.0; + } + +//--------------------------------------------------------- +// AuxPluginIF +//--------------------------------------------------------- + +AuxPluginIF::AuxPluginIF(PluginI* pi) + : PluginIF(pi) + { + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(_buffer + i), 16, sizeof(float) * segmentSize); + } + +//--------------------------------------------------------- +// AuxPluginIF +//--------------------------------------------------------- + +AuxPluginIF::~AuxPluginIF() + { + for (int i = 0; i < MAX_CHANNELS; ++i) { + if (_buffer[i]) + free(_buffer[i]); + } + } + +//--------------------------------------------------------- +// apply +//--------------------------------------------------------- + +void AuxPluginIF::apply(unsigned nframes, float** s, float** /*dst*/) + { + // TODO: optimize copy away if there is no route + double vol[2]; + vol[0] = volume * (1.0 - pan); + vol[1] = volume * (1.0 + pan); + + for (int i = 0; i < pluginI->channel(); ++i) { + float* dst = _buffer[i]; + float* src = s[i]; + double v = vol[i]; + for (unsigned k = 0; k < nframes; ++k) + *dst++ = (*src++) * v; + } + } + +//--------------------------------------------------------- +// getParameterName +//--------------------------------------------------------- + +const char* AuxPluginIF::getParameterName(int i) const + { + if (i == 0) + return "Volume"; + else + return "Pan"; + } + +//--------------------------------------------------------- +// setParam +//--------------------------------------------------------- + +void AuxPluginIF::setParam(int i, double val) + { + if (i == 0) + volume = val; + else + pan = val; + } + +//--------------------------------------------------------- +// param +//--------------------------------------------------------- + +float AuxPluginIF::param(int i) const + { + return i == 0 ? volume : pan; + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- + +bool AuxPluginIF::init(Plugin* p) + { + volume = p->defaultValue(0); + pan = p->defaultValue(1); + return true; + } + |