diff options
author | Robert Jonsson <spamatica@gmail.com> | 2011-03-07 19:01:11 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2011-03-07 19:01:11 +0000 |
commit | e40fc849149dd97c248866a4a1d026dda5e57b62 (patch) | |
tree | b12b358f3b3a0608001d30403358f8443118ec5f /attic/muse2-oom/muse2/synti/simpledrums2/ssplugin.h | |
parent | 1bd4f2e8d9745cabb667b043171cad22c8577768 (diff) |
clean3
Diffstat (limited to 'attic/muse2-oom/muse2/synti/simpledrums2/ssplugin.h')
-rw-r--r-- | attic/muse2-oom/muse2/synti/simpledrums2/ssplugin.h | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/attic/muse2-oom/muse2/synti/simpledrums2/ssplugin.h b/attic/muse2-oom/muse2/synti/simpledrums2/ssplugin.h new file mode 100644 index 00000000..64e80921 --- /dev/null +++ b/attic/muse2-oom/muse2/synti/simpledrums2/ssplugin.h @@ -0,0 +1,173 @@ +// +// C++ Interface: plugin +// +// Description: +// +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +// Additions/modifications: Mathias Lundgren <lunar_shuttle@users.sf.net>, (C) 2004 +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef __PLUGIN_H__ +#define __PLUGIN_H__ + +#include <QFileInfo> + +#include <ladspa.h> +#include <math.h> + +//--------------------------------------------------------- +// Port +//--------------------------------------------------------- + +struct Port { + float val; + }; + +//--------------------------------------------------------- +// Plugin +//--------------------------------------------------------- + +class Plugin + { + protected: + QFileInfo fi; + + public: + Plugin(const QFileInfo* f); + virtual ~Plugin() {} + virtual QString label() const { return QString(); } + virtual QString name() const { return QString(); } + virtual unsigned long id() const { return 0; } + virtual QString maker() const { return QString(); } + virtual QString copyright() const { return QString(); } + virtual int parameter() const { return 0; } + virtual int inports() const { return 0; } + virtual int outports() const { return 0; } + virtual bool inPlaceCapable() const { return false; } + + virtual bool isLog(int) const { return false; } + virtual bool isBool(int) const { return false; } + virtual bool isInt(int) const { return false; } + virtual float defaultValue(int) const { return 0.0f; } + virtual void range(int, float* min, float* max) const { + *min = 0.0f; + *max = 1.0f; + } + virtual const char* getParameterName(int /*param*/) const { return ""; } + QString lib() const { return fi.baseName(); } + QString path() const { return fi.absolutePath(); } + }; + +//--------------------------------------------------------- +// LadspaPlugin +//--------------------------------------------------------- + +class LadspaPlugin : public Plugin + { + LADSPA_Descriptor_Function ladspa; + const LADSPA_Descriptor* plugin; + LADSPA_Handle handle; + bool active; + + Port* controls; + Port* inputs; + Port* outputs; + + protected: + int _parameter; + std::vector<int> pIdx; //control port numbers + + int _inports; + std::vector<int> iIdx; //input port numbers + + int _outports; + std::vector<int> oIdx; //output port numbers + + bool _inPlaceCapable; + + public: + LadspaPlugin(const QFileInfo* f, const LADSPA_Descriptor_Function, const LADSPA_Descriptor* d); + virtual ~LadspaPlugin(); + virtual QString label() const { return QString(plugin->Label); } + virtual QString name() const { return QString(plugin->Name); } + virtual unsigned long id() const { return plugin->UniqueID; } + virtual QString maker() const { return QString(plugin->Maker); } + virtual QString copyright() const { return QString(plugin->Copyright); } + virtual int parameter() const { return _parameter; } + virtual int inports() const { return _inports; } + virtual int outports() const { return _outports; } + virtual bool inPlaceCapable() const { return _inPlaceCapable; } + const LADSPA_Descriptor* ladspaDescriptor() const { return plugin; } + virtual bool isLog(int k) const { + LADSPA_PortRangeHint r = plugin->PortRangeHints[pIdx[k]]; + return LADSPA_IS_HINT_LOGARITHMIC(r.HintDescriptor); + } + virtual bool isBool(int k) const { + return LADSPA_IS_HINT_TOGGLED(plugin->PortRangeHints[pIdx[k]].HintDescriptor); + } + virtual bool isInt(int k) const { + LADSPA_PortRangeHint r = plugin->PortRangeHints[pIdx[k]]; + return LADSPA_IS_HINT_INTEGER(r.HintDescriptor); + } + virtual void range(int i, float*, float*) const; + virtual const char* getParameterName(int i) const { + return plugin->PortNames[pIdx[i]]; + } + virtual float defaultValue(int) const; + virtual float getControlValue(int k) const { + return controls[k].val; + } + + int getGuiControlValue(int parameter) const; + float convertGuiControlValue(int parameter, int val) const; + + bool instantiate(); + bool start(); + void stop(); + void connectInport(int k, LADSPA_Data* datalocation); + void connectOutport(int k, LADSPA_Data* datalocation); + void process(unsigned long); + void setParam(int i, float val); + + }; + + +static inline float fast_log2 (float val) + { + /* don't use reinterpret_cast<> because that prevents this + from being used by pure C code (for example, GnomeCanvasItems) + */ + int* const exp_ptr = (int *)(&val); + int x = *exp_ptr; + const int log_2 = ((x >> 23) & 255) - 128; + x &= ~(255 << 23); + x += 127 << 23; + *exp_ptr = x; + val = ((-1.0f/3) * val + 2) * val - 2.0f/3; // (1) + return (val + log_2); + } + +static inline float fast_log10 (const float val) + { + return fast_log2(val) / 3.312500f; + } + +//--------------------------------------------------------- +// PluginList +//--------------------------------------------------------- + +typedef std::list<Plugin*>::iterator iPlugin; + +class PluginList : public std::list<Plugin*> { + public: + Plugin* find(const QString& file, const QString& name); + PluginList() {} + }; + +extern void SS_initPlugins(); +extern PluginList plugins; + +#endif |