summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/muse/plugin.h
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/muse/plugin.h')
-rw-r--r--muse_qt4_evolution/muse/plugin.h218
1 files changed, 218 insertions, 0 deletions
diff --git a/muse_qt4_evolution/muse/plugin.h b/muse_qt4_evolution/muse/plugin.h
new file mode 100644
index 00000000..c01a1f18
--- /dev/null
+++ b/muse_qt4_evolution/muse/plugin.h
@@ -0,0 +1,218 @@
+//=============================================================================
+// 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.
+//=============================================================================
+
+#ifndef __PLUGIN_H__
+#define __PLUGIN_H__
+
+#include "ladspa.h"
+#include "globals.h"
+
+namespace AL {
+ class Xml;
+ };
+using AL::Xml;
+
+class PluginIF;
+class PluginGui;
+class PluginI;
+class LadspaPluginIF;
+class AudioTrack;
+class Ctrl;
+
+#define AUDIO_IN (LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT)
+#define AUDIO_OUT (LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT)
+
+//---------------------------------------------------------
+// Plugin
+//---------------------------------------------------------
+
+class Plugin {
+
+ protected:
+ int _instances;
+ QFileInfo fi;
+
+ public:
+ Plugin(const QFileInfo* f);
+ virtual ~Plugin() {}
+
+ int instances() const { return _instances; }
+ virtual void incInstances(int val) { _instances += val; }
+
+ QString lib() const { return fi.baseName(); }
+ QString path() const { return fi.absolutePath(); }
+
+ 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 PluginIF* createPIF(PluginI*) = 0;
+
+ virtual void range(int, double* min, double* max) const {
+ *min = 0.0f;
+ *max = 1.0f;
+ }
+
+ 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 double defaultValue(int) const { return 0.0f; }
+ };
+
+//---------------------------------------------------------
+// PluginList
+//---------------------------------------------------------
+
+typedef std::list<Plugin*>::iterator iPlugin;
+
+class PluginList : public std::list<Plugin*> {
+ public:
+ Plugin* find(const QString&, const QString&);
+ PluginList() {}
+ };
+
+//---------------------------------------------------------
+// PluginIF
+// plugin instance interface
+//---------------------------------------------------------
+
+class PluginIF {
+ protected:
+ PluginI* pluginI;
+
+ public:
+ PluginIF(PluginI* pi) { pluginI = pi; }
+ virtual ~PluginIF() {}
+
+ PluginI* pluginInstance() { return pluginI; }
+ const PluginI* pluginInstance() const { return pluginI; }
+
+ virtual void apply(unsigned nframes, float** src, float** dst) = 0;
+ virtual void activate() = 0;
+ virtual void deactivate() = 0;
+ virtual void cleanup() = 0;
+ virtual void setParam(int i, double val) = 0;
+ virtual float param(int i) const = 0;
+ virtual const char* getParameterName(int) const { return ""; }
+ virtual const char* getParameterLabel(int) const { return 0; }
+ virtual const char* getParameterDisplay(int, float) const { return 0; }
+ virtual bool hasGui() const { return false; }
+ virtual bool guiVisible() const { return false; }
+ virtual void showGui(bool) {}
+ };
+
+//---------------------------------------------------------
+// PluginI
+// plugin instance
+//---------------------------------------------------------
+
+class PluginI {
+ Plugin* _plugin;
+ AudioTrack* _track;
+
+ int instances;
+ PluginIF** pif;
+
+ int _channel;
+
+ PluginGui* _gui;
+ bool _on;
+
+ QString _name;
+ QString _label;
+
+ std::vector<Ctrl*> controllerList;
+
+ void makeGui();
+
+ protected:
+ bool initControlValues;
+ friend class LadspaPluginIF;
+
+ public:
+ PluginI(AudioTrack*);
+ ~PluginI();
+
+ Plugin* plugin() const { return _plugin; }
+ bool on() const { return _on; }
+ void setOn(bool val) { _on = val; }
+ PluginGui* gui() const { return _gui; }
+
+ bool initPluginInstance(Plugin*, int channels);
+ void setChannels(int);
+ int channel() const { return _channel; }
+ void apply(unsigned nframes, int ports, float** b1, float** b2);
+
+ void activate();
+ void deactivate();
+ QString label() const { return _label; }
+ QString name() const { return _name; }
+ QString lib() const { return _plugin->lib(); }
+
+ AudioTrack* track() const { return _track; }
+
+ void writeConfiguration(Xml&, bool);
+ void writeConfiguration1(Xml&, bool); // without end tag!
+ bool readConfiguration(QDomNode, bool*);
+
+ void showGui();
+ void showGui(bool);
+ bool guiVisible() const;
+
+ bool hasNativeGui() const { return pif[0]->hasGui(); }
+ void showNativeGui(bool f) { return pif[0]->showGui(f); }
+ bool nativeGuiVisible() const { return pif[0]->guiVisible(); }
+
+ void setControllerList(Ctrl* cl) { controllerList.push_back(cl); }
+ Ctrl* controller(int idx) const { return controllerList[idx]; }
+ bool setParameter(const QString& s, double val);
+ void setParam(int i, double val);
+ double param(int i) const { return pif[0]->param(i); }
+
+ const char* getParameterName(int i) const { return pif[0]->getParameterName(i); }
+ const char* getParameterLabel(int i) const { return pif[0]->getParameterLabel(i); }
+ const char* getParameterDisplay(int i, float v) const { return pif[0]->getParameterDisplay(i, v); }
+
+ void range(int i, double* min, double* max) const {
+ _plugin->range(i, min, max);
+ }
+ double defaultValue(int i) const { return _plugin->defaultValue(i); }
+ bool inPlaceCapable() const { return _plugin->inPlaceCapable(); }
+
+ bool isLog(int k) const { return _plugin->isLog(k); }
+ bool isBool(int k) const { return _plugin->isBool(k); }
+ bool isInt(int k) const { return _plugin->isInt(k); }
+
+ PluginIF* pluginIF(int idx) { return pif[idx]; }
+ };
+
+extern void initPlugins();
+extern PluginList plugins;
+
+#endif
+