diff options
Diffstat (limited to 'attic/muse_qt4_evolution/muse/vst.cpp')
-rw-r--r-- | attic/muse_qt4_evolution/muse/vst.cpp | 1063 |
1 files changed, 0 insertions, 1063 deletions
diff --git a/attic/muse_qt4_evolution/muse/vst.cpp b/attic/muse_qt4_evolution/muse/vst.cpp deleted file mode 100644 index f91d1322..00000000 --- a/attic/muse_qt4_evolution/muse/vst.cpp +++ /dev/null @@ -1,1063 +0,0 @@ -//============================================================================= -// MusE -// Linux Music Editor -// $Id:$ -// -// Copyright (C) 2002-2006 by Werner Schweer and others -// This code is based on jack_fst: -// Copyright (C) 2004 Paul Davis <paul@linuxaudiosystems.com> -// Torben Hohn <torbenh@informatik.uni-bremen.de> -// -// 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 "config.h" - -#ifdef VST_SUPPORT - -#include "al/al.h" -#include <fst.h> -#include <vst/aeffectx.h> -#include <jack/jack.h> - -#include "vst.h" -#include "globals.h" -#include "synth.h" -#include "jackaudio.h" -#include "midi.h" -#include "al/xml.h" -#include "song.h" -#include "audio.h" -#include "widgets/utils.h" - -extern "C" void fst_error(const char *fmt, ...); -extern JackAudio* jackAudio; - -//--------------------------------------------------------- -// jfstReserveMem -//--------------------------------------------------------- - -static void jfstReserveMem(int size) - { - char buf[size]; - - for (int i = 0; i < size; ++i) - buf[i] = (char)(i % 256); - } - -//--------------------------------------------------------- -// vstHostCallback -//--------------------------------------------------------- - -static long vstHostCallback(AEffect* effect, - long opcode, long index, long value, void* ptr, float opt) - { - static VstTimeInfo _timeInfo; - - VstPluginIF* pluginIF = effect ? (VstPluginIF*) effect->user : 0; - - jack_position_t jack_pos; - jack_transport_state_t tstate; - - switch (opcode) { - case audioMasterAutomate: - // index, value, returns 0 - if (pluginIF) { - PluginI* pi = pluginIF->pluginInstance(); - // pi->setParam(index, opt); - CVal cval; - cval.f = opt; - song->setControllerVal(pi->track(), pi->controller(index), cval); - } - return 0; - - case audioMasterVersion: - // vst version, currently 2 (0 for older) - return 2200; - - case audioMasterCurrentId: - // returns the unique id of a plug that's currently - // loading - return 0; - - case audioMasterIdle: - // call application idle routine (this will - // call effEditIdle for all open editors too) - effect->dispatcher(effect, effEditIdle, 0, 0, NULL, 0.0f); - return 0; - - case audioMasterPinConnected: - // inquire if an input or output is beeing connected; - // index enumerates input or output counting from zero: - // value is 0 for input and != 0 otherwise. note: the - // return value is 0 for <true> such that older versions - // will always return true. - return 1; - - case audioMasterWantMidi: - // <value> is a filter which is currently ignored - return 0; - - case audioMasterGetTime: - // returns const VstTimeInfo* (or 0 if not supported) - // <value> should contain a mask indicating which fields are required - // (see valid masks above), as some items may require extensive - // conversions - - memset(&_timeInfo, 0, sizeof(_timeInfo)); - - if (effect) { - tstate = jackAudio->transportQuery(&jack_pos); - - _timeInfo.samplePos = jack_pos.frame; - _timeInfo.sampleRate = jack_pos.frame_rate; - _timeInfo.flags = 0; - - if ((value & (kVstBarsValid|kVstTempoValid)) && (jack_pos.valid & JackPositionBBT)) { - _timeInfo.tempo = jack_pos.beats_per_minute; - _timeInfo.timeSigNumerator = (long) floor (jack_pos.beats_per_bar); - _timeInfo.timeSigDenominator = (long) floor (jack_pos.beat_type); - _timeInfo.flags |= (kVstBarsValid|kVstTempoValid); - } - if (tstate == JackTransportRolling) { - _timeInfo.flags |= kVstTransportPlaying; - } - } - else { - _timeInfo.samplePos = 0; - _timeInfo.sampleRate = AL::sampleRate; - } - return (long)&_timeInfo; - - case audioMasterProcessEvents: - // VstEvents* in <ptr> - return 0; - - case audioMasterSetTime: - // VstTimenfo* in <ptr>, filter in <value>, not supported - - case audioMasterTempoAt: - // returns tempo (in bpm * 10000) at sample frame location passed in <value> - return 0; - - case audioMasterGetNumAutomatableParameters: - return 0; - - case audioMasterGetParameterQuantization: - // returns the integer value for +1.0 representation, - // or 1 if full single float precision is maintained - // in automation. parameter index in <value> (-1: all, any) - return 0; - - case audioMasterIOChanged: - // numInputs and/or numOutputs has changed - return 0; - - case audioMasterNeedIdle: - // plug needs idle calls (outside its editor window) - return 0; - - case audioMasterSizeWindow: - // index: width, value: height - return 0; - - case audioMasterGetSampleRate: - return 0; - - case audioMasterGetBlockSize: - return 0; - - case audioMasterGetInputLatency: - return 0; - - case audioMasterGetOutputLatency: - return 0; - - case audioMasterGetPreviousPlug: - // input pin in <value> (-1: first to come), returns cEffect* - return 0; - - case audioMasterGetNextPlug: - // output pin in <value> (-1: first to come), returns cEffect* - - case audioMasterWillReplaceOrAccumulate: - // returns: 0: not supported, 1: replace, 2: accumulate - return 0; - - case audioMasterGetCurrentProcessLevel: - // returns: 0: not supported, - // 1: currently in user thread (gui) - // 2: currently in audio thread (where process is called) - // 3: currently in 'sequencer' thread (midi, timer etc) - // 4: currently offline processing and thus in user thread - // other: not defined, but probably pre-empting user thread. - return 0; - - case audioMasterGetAutomationState: - // returns 0: not supported, 1: off, 2:read, 3:write, 4:read/write - // offline - return 0; - - case audioMasterOfflineStart: - case audioMasterOfflineRead: - // ptr points to offline structure, see below. return 0: error, 1 ok - return 0; - - case audioMasterOfflineWrite: - // same as read - return 0; - - case audioMasterOfflineGetCurrentPass: - case audioMasterOfflineGetCurrentMetaPass: - return 0; - - case audioMasterSetOutputSampleRate: - // for variable i/o, sample rate in <opt> - return 0; - - case audioMasterGetSpeakerArrangement: - // (long)input in <value>, output in <ptr> - return 0; - - case audioMasterGetVendorString: - // fills <ptr> with a string identifying the vendor (max 64 char) - strcpy ((char*) ptr, "LAD"); - return 0; - - case audioMasterGetProductString: - // fills <ptr> with a string with product name (max 64 char) - strcpy ((char*) ptr, "FreeST"); - - case audioMasterGetVendorVersion: - // returns vendor-specific version - return 1000; - - case audioMasterVendorSpecific: - // no definition, vendor specific handling - return 0; - - case audioMasterSetIcon: - // void* in <ptr>, format not defined yet - return 0; - - case audioMasterCanDo: - // string in ptr, see below - return 0; - - case audioMasterGetLanguage: - // see enum - return 0; - - case audioMasterOpenWindow: - // returns platform specific ptr - return 0; - - case audioMasterCloseWindow: - // close window, platform specific handle in <ptr> - return 0; - - case audioMasterGetDirectory: - // get plug directory, FSSpec on MAC, else char* - return 0; - - case audioMasterUpdateDisplay: - // something has changed, update 'multi-fx' display - effect->dispatcher(effect, effEditIdle, 0, 0, NULL, 0.0f); - return 0; - - case audioMasterBeginEdit: - // begin of automation session (when mouse down), parameter index in <index> - return 0; - - case audioMasterEndEdit: - // end of automation session (when mouse up), parameter index in <index> - return 0; - - case audioMasterOpenFileSelector: - // open a fileselector window with VstFileSelect* in <ptr> - return 0; - - default: - break; - } - return 0; - } - - -//--------------------------------------------------------- -// FstPlugin -//--------------------------------------------------------- - -FstPlugin::FstPlugin() - { - _fst = 0; - } - -//--------------------------------------------------------- -// ~FstPlugin -//--------------------------------------------------------- - -FstPlugin::~FstPlugin() - { - if (_fst) { - destroyEditor(); - fst_close(_fst); - _fst = 0; - } - } - -//--------------------------------------------------------- -// instantiate -//--------------------------------------------------------- - -void FstPlugin::instantiate(FSTHandle* fstHandle, void* p) - { - _fst = fst_instantiate(fstHandle, vstHostCallback, p); - if (_fst == 0) { - printf("FstPlugin::instantiate:: cannot instantiate plugin\n"); - return; - } - AEffect* plugin = _fst->plugin; - version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, 0, 0.0f); - } - -//--------------------------------------------------------- -// numInputs -//--------------------------------------------------------- - -int FstPlugin::numInputs() const - { - return _fst->plugin->numInputs; - } - -//--------------------------------------------------------- -// numOutputs -//--------------------------------------------------------- - -int FstPlugin::numOutputs() const - { - return _fst->plugin->numOutputs; - } - -//--------------------------------------------------------- -// numParameter -//--------------------------------------------------------- - -int FstPlugin::numParameter() const - { - return _fst->plugin->numParams; - } - -//--------------------------------------------------------- -// setSampleRate -//--------------------------------------------------------- - -void FstPlugin::setSampleRate(float sr) - { - AEffect* plugin = _fst->plugin; - plugin->dispatcher(plugin, effSetSampleRate, 0, 0, 0, sr); - } - -//--------------------------------------------------------- -// setBlockSize -//--------------------------------------------------------- - -void FstPlugin::setBlockSize(int bs) - { - AEffect* plugin = _fst->plugin; - plugin->dispatcher(plugin, effSetBlockSize, 0, bs, 0, 0.0f); - } - -//--------------------------------------------------------- -// mainsChanged -//--------------------------------------------------------- - -void FstPlugin::mainsChanged(bool on) - { - AEffect* plugin = _fst->plugin; - plugin->dispatcher(plugin, effMainsChanged, 0, on, 0, 0.0f); - } - -//--------------------------------------------------------- -// setProgram -//--------------------------------------------------------- - -void FstPlugin::setProgram(int p) - { - AEffect* plugin = _fst->plugin; - plugin->dispatcher(plugin, effSetProgram, 0, p, 0, 0.0f); - } - -//--------------------------------------------------------- -// hasGui -//--------------------------------------------------------- - -bool FstPlugin::hasGui() const - { - return _fst->plugin->flags & effFlagsHasEditor; - } - -//--------------------------------------------------------- -// canReplacing -//--------------------------------------------------------- - -bool FstPlugin::canReplacing() - { - return _fst->plugin->flags & effFlagsCanReplacing; - } - -//--------------------------------------------------------- -// runEditor -//--------------------------------------------------------- - -bool FstPlugin::runEditor() - { - return fst_run_editor(_fst); - } - -//--------------------------------------------------------- -// destroyEditor -//--------------------------------------------------------- - -void FstPlugin::destroyEditor() - { - fst_destroy_editor(_fst); - } - -//--------------------------------------------------------- -// getVstVersion -//--------------------------------------------------------- - -int FstPlugin::getVstVersion() - { - return version; - } - -//--------------------------------------------------------- -// setParameter -//--------------------------------------------------------- - -void FstPlugin::setParameter(int idx, float value) - { - AEffect* plugin = _fst->plugin; - plugin->setParameter(plugin, idx, value); - } - -//--------------------------------------------------------- -// getParameter -//--------------------------------------------------------- - -float FstPlugin::getParameter(int idx) - { - AEffect* plugin = _fst->plugin; - return plugin->getParameter(plugin, idx); - } - -//--------------------------------------------------------- -// processReplacing -//--------------------------------------------------------- - -void FstPlugin::processReplacing(float** ins, float** outs, int n) - { - AEffect* plugin = _fst->plugin; - plugin->processReplacing(plugin, ins, outs, n); - } - -//--------------------------------------------------------- -// process -//--------------------------------------------------------- - -void FstPlugin::process(float** ins, float** outs, int n) - { - AEffect* plugin = _fst->plugin; - plugin->process(plugin, ins, outs, n); - } - -//--------------------------------------------------------- -// putEvent -//--------------------------------------------------------- - -void FstPlugin::putEvent(const MidiEvent& ev) - { - AEffect* plugin = _fst->plugin; - static struct VstEvents events; - static struct VstMidiEvent event; - events.numEvents = 1; - events.reserved = 0; - events.events[0] = (VstEvent*)(&event); - - event.type = kVstMidiType; - event.byteSize = 24; - event.deltaFrames = 0; - event.flags = 0; - event.detune = 0; - event.noteLength = 0; - event.noteOffset = 0; - event.reserved1 = 0; - event.reserved2 = 0; - event.noteOffVelocity = 0; - switch (ev.type()) { - case ME_PITCHBEND: - { - int a = ev.dataA() + 8192; - int b = a >> 7; - event.midiData[0] = (ev.type() | ev.channel()) & 0xff; - event.midiData[1] = a & 0x7f; - event.midiData[2] = b & 0x7f; - event.midiData[3] = 0; - } - break; - - case ME_CONTROLLER: - case ME_NOTEON: - default: - event.midiData[0] = (ev.type() | ev.channel()) & 0xff; - event.midiData[1] = ev.dataA() & 0xff; - event.midiData[2] = ev.dataB() & 0xff; - event.midiData[3] = 0; - break; - } - plugin->dispatcher(plugin, effProcessEvents, 0, 0, &events, 0.0f); - } - -//--------------------------------------------------------- -// getParameterName -//--------------------------------------------------------- - -const char* FstPlugin::getParameterName(int idx) const - { - static char dsp[8]; - dsp[0] = 0; - AEffect* effect = _fst->plugin; - effect->dispatcher(effect, effGetParamName, idx, 0, &dsp, 0.0f); - return dsp; - } - -//--------------------------------------------------------- -// getParameterLabel -//--------------------------------------------------------- - -const char* FstPlugin::getParameterLabel(int idx) const - { - static char dsp[8]; - dsp[0] = 0; - AEffect* effect = _fst->plugin; - effect->dispatcher(effect, effGetParamLabel, idx, 0, &dsp, 0.0f); - return dsp; - } - -//--------------------------------------------------------- -// getParameterDisplay -//--------------------------------------------------------- - -const char* FstPlugin::getParameterDisplay(int idx, float val) const - { - static char dsp[8]; - dsp[0] = 0; - AEffect* effect = _fst->plugin; - effect->dispatcher(effect, effGetParamDisplay, idx, 0, &dsp, val); - return dsp; - } - -//--------------------------------------------------------- -// scanVstDir -//--------------------------------------------------------- - -static void scanVstDir(const QString& s) - { - if (debugMsg) - printf("scan vst plugin dir <%s>\n", s.toLatin1().data()); - QDir pluginDir(s, QString("*.dll"), QDir::Unsorted, QDir::Files); - if (pluginDir.exists()) { - const QFileInfoList list = pluginDir.entryInfoList(); - for (int i = 0; i < list.size(); ++i) { - QFileInfo fi = list.at(i); - char* path = strdup(fi.filePath().toLatin1().data()); - FSTInfo* info = fst_get_info(path); - if (info) { - // - // simple hack: - // plugins with no inputs are treated - // as software synthesizer - // - // if (info->wantEvents && info->numOutputs) { - if (info->numInputs == 0 && info->numOutputs) { - if (debugMsg) - printf(" add vsti synti <%s>\n", fi.fileName().toLatin1().data()); - synthis.push_back(new VstSynth(&fi)); - fst_free_info(info); - } - else if (info->numInputs && info->numOutputs) { - if (debugMsg) - printf(" add vst plugin <%s>\n", fi.fileName().toLatin1().data()); - plugins.push_back(new VstPlugin(&fi, info)); - } - } - free(path); - } - } - } - -//--------------------------------------------------------- -// fstSignalHandler -//--------------------------------------------------------- - -static void fstSignalHandler(int sig, siginfo_t* /*info*/, void* /*context*/) - { - fst_error("fst signal handler %d, thread = 0x%x", sig, pthread_self ()); - //if (sig == SIGSEGV || sig == SIGABRT) { - char*p = 0; - *p = 0; -// } - fatalError("fst signal"); - } - -//--------------------------------------------------------- -// initVST -//--------------------------------------------------------- - -void initVST() - { - jfstReserveMem(1000000); - - if (fst_init(fstSignalHandler)) { - printf("initVST failed\n"); - return; - } - char* vstPath = getenv("VST_PATH"); - if (vstPath == 0) - vstPath = "/usr/lib/vst:/usr/local/lib/vst"; - - char* p = vstPath; - while (*p != '\0') { - char* pe = p; - while (*pe != ':' && *pe != '\0') - pe++; - - int n = pe - p; - if (n) { - char* buffer = new char[n + 1]; - strncpy(buffer, p, n); - buffer[n] = '\0'; - scanVstDir(QString(buffer)); - delete[] buffer; - } - p = pe; - if (*p == ':') - p++; - } - } - -//--------------------------------------------------------- -// guiVisible -//--------------------------------------------------------- - -bool VstSynthIF::guiVisible() const - { - return _guiVisible; - } - -//--------------------------------------------------------- -// showGui -//--------------------------------------------------------- - -void VstSynthIF::showGui(bool v) - { - if (v == guiVisible()) - return; - if (v) - _fst->runEditor(); - else - _fst->destroyEditor(); - _guiVisible = v; - } - -//--------------------------------------------------------- -// receiveEvent -//--------------------------------------------------------- - -MidiEvent VstSynthIF::receiveEvent() - { - return MidiEvent(); - } - -//--------------------------------------------------------- -// hasGui -//--------------------------------------------------------- - -bool VstSynthIF::hasGui() const - { - return _fst->hasGui(); - } - -//--------------------------------------------------------- -// incInstances -//--------------------------------------------------------- - -void VstSynth::incInstances(int val) - { - _instances += val; - if (_instances == 0 && fstHandle) { - fst_unload(fstHandle); - fstHandle = 0; - } - } - -//--------------------------------------------------------- -// init -//--------------------------------------------------------- - -bool VstSynthIF::init(FSTHandle* h) - { - _fst = new FstPlugin(); - _fst->instantiate(h, 0); - _fst->setSampleRate(AL::sampleRate); - _fst->setBlockSize(segmentSize); - _fst->mainsChanged(true); - _fst->setProgram(0); - return true; - } - -//--------------------------------------------------------- -// channels -//--------------------------------------------------------- - -int VstSynthIF::channels() const - { - return _fst->numOutputs(); - } - -//--------------------------------------------------------- -// createSIF -//--------------------------------------------------------- - -SynthIF* VstSynth::createSIF(SynthI* s) - { - VstSynthIF* sif = new VstSynthIF(s); - ++_instances; - const char* path = info.filePath().toLatin1().data(); - - if (fstHandle == 0) { - fstHandle = fst_load(path); - if (fstHandle == 0) { - printf("SynthIF:: cannot load vst plugin %s\n", path); - return 0; - } - } - sif->init(fstHandle); - return sif; - } - -//--------------------------------------------------------- -// deactivate3 -//--------------------------------------------------------- - -void VstSynthIF::deactivate3() - { - if (_fst) { - delete _fst; - _fst = 0; - } - } - -//--------------------------------------------------------- -// ~VstSynthIF -//--------------------------------------------------------- - -VstSynthIF::~VstSynthIF() - { - deactivate3(); - } - -//--------------------------------------------------------- -// setParameter -//--------------------------------------------------------- - -void VstSynthIF::setParameter(int idx, float value) - { - _fst->setParameter(idx, value); - } - -//--------------------------------------------------------- -// write -//--------------------------------------------------------- - -void VstSynthIF::write(Xml& xml) const - { - //--------------------------------------------- - // dump current state of synth - //--------------------------------------------- - - int params = _fst->numParameter(); - for (int i = 0; i < params; ++i) { - float f = _fst->getParameter(i); - xml.tag("param", f); - } - } - -//--------------------------------------------------------- -// getData -//--------------------------------------------------------- - -void VstSynthIF::getData(MidiEventList* el, unsigned pos, int ports, unsigned n, float** buffer) - { - unsigned int endPos = pos + n; - iMidiEvent i = el->begin(); - for (; i != el->end(); ++i) { - if (i->time() >= endPos) - break; - putEvent(*i); - } - el->erase(el->begin(), i); - - int outputs = _fst->numOutputs(); - if (ports < outputs) { - float* ob[outputs]; - float fp[n * (outputs-ports)]; // dummy output buffer - for (int i = 0; i < outputs; ++i) { - if (i < ports) - ob[i] = buffer[i]; - else - ob[i] = fp + n * (i-ports); - } - if (_fst->canReplacing()) - _fst->processReplacing(0, ob, n); - else { - for (int i = 0; i < outputs; ++i) - memset(ob[i], 0, n * sizeof(float)); - _fst->process(0, ob, n); - } - } - else { - if (_fst->canReplacing()) - _fst->processReplacing(0, buffer, n); - else { - for (int i = 0; i < outputs; ++i) - memset(buffer[i], 0, n * sizeof(float)); - _fst->process(0, buffer, n); - } - } - } - -//--------------------------------------------------------- -// putEvent -//--------------------------------------------------------- - -bool VstSynthIF::putEvent(const MidiEvent& ev) - { - if (midiOutputTrace) - ev.dump(); - _fst->putEvent(ev); - return false; - } - -//--------------------------------------------------------- -// VstPlugin -//--------------------------------------------------------- - -VstPlugin::VstPlugin(const QFileInfo* fi, FSTInfo* i) - : Plugin(fi) - { - info = i; - fstHandle = 0; - } - -//--------------------------------------------------------- -// VstPlugin -//--------------------------------------------------------- - -VstPlugin::~VstPlugin() - { - fst_free_info(info); - } - -//--------------------------------------------------------- -// createPIF -//--------------------------------------------------------- - -PluginIF* VstPlugin::createPIF(PluginI* pi) - { - VstPluginIF* pif = new VstPluginIF(pi); - ++_instances; - const char* path = fi.filePath().toLatin1().data(); - - if (fstHandle == 0) { - fstHandle = fst_load(path); - if (fstHandle == 0) { - printf("SynthIF:: cannot load vst plugin %s\n", path); - return 0; - } - } - pif->init(fstHandle); - return pif; - } - -//--------------------------------------------------------- -// parameter -//--------------------------------------------------------- - -int VstPlugin::parameter() const - { - return info->numParams; - } - -//--------------------------------------------------------- -// inports -//--------------------------------------------------------- - -int VstPlugin::inports() const - { - return info->numInputs; - } - -//--------------------------------------------------------- -// outports -//--------------------------------------------------------- - -int VstPlugin::outports() const - { - return info->numOutputs; - } - -//--------------------------------------------------------- -// id -//--------------------------------------------------------- - -unsigned long VstPlugin::id() const - { - return info->UniqueID; - } - -//--------------------------------------------------------- -// VstPluginIF -//--------------------------------------------------------- - -VstPluginIF::VstPluginIF(PluginI* pi) - : PluginIF(pi) - { - _fst = 0; - _guiVisible = false; - } - -VstPluginIF::~VstPluginIF() - { - if (_fst == 0) - return; - delete _fst; - } - -//--------------------------------------------------------- -// init -//--------------------------------------------------------- - -bool VstPluginIF::init(FSTHandle* h) - { - _fst = new FstPlugin(); - _fst->instantiate(h, this); - _fst->setSampleRate(AL::sampleRate); - _fst->setBlockSize(segmentSize); - _fst->mainsChanged(true); - _fst->setProgram(0); - return true; - } - -//--------------------------------------------------------- -// hasGui -//--------------------------------------------------------- - -bool VstPluginIF::hasGui() const - { - return _fst->hasGui(); - } - -//--------------------------------------------------------- -// showGui -//--------------------------------------------------------- - -void VstPluginIF::showGui(bool v) - { - if (v == guiVisible()) - return; - if (v) - _fst->runEditor(); - else - _fst->destroyEditor(); - _guiVisible = v; - } - -//--------------------------------------------------------- -// getParameterName -//--------------------------------------------------------- - -const char* VstPluginIF::getParameterName(int idx) const - { - return _fst->getParameterName(idx); - } - -//--------------------------------------------------------- -// getParameterLabel -//--------------------------------------------------------- - -const char* VstPluginIF::getParameterLabel(int idx) const - { - return _fst->getParameterLabel(idx); - } - -//--------------------------------------------------------- -// getParameterDisplay -//--------------------------------------------------------- - -const char* VstPluginIF::getParameterDisplay(int idx, float val) const - { - return _fst->getParameterDisplay(idx, val); - } - -//--------------------------------------------------------- -// apply -//--------------------------------------------------------- - -void VstPluginIF::apply(unsigned nframes, float** src, float** dst) - { - if (_fst->canReplacing()) - _fst->processReplacing(src, dst, nframes); - else { - int n = _fst->numOutputs(); - - for (int i = 0; i < n; ++i) - memset(dst[i], 0, sizeof(float) * nframes); - _fst->process(src, dst, nframes); - } - } - -//--------------------------------------------------------- -// setParam -//--------------------------------------------------------- - -void VstPluginIF::setParam(int i, double val) - { - _fst->setParameter(i, val); - } - -//--------------------------------------------------------- -// param -//--------------------------------------------------------- - -float VstPluginIF::param(int i) const - { - return _fst->getParameter(i); - } - -#else -void initVST() {} -#endif - |