aboutsummaryrefslogtreecommitdiffstats
path: root/lvz/audioeffectx.h
diff options
context:
space:
mode:
Diffstat (limited to 'lvz/audioeffectx.h')
-rw-r--r--lvz/audioeffectx.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/lvz/audioeffectx.h b/lvz/audioeffectx.h
new file mode 100644
index 0000000..090bb60
--- /dev/null
+++ b/lvz/audioeffectx.h
@@ -0,0 +1,151 @@
+/*
+ LVZ - An ugly C++ interface for writing LV2 plugins.
+ Copyright 2008-2012 David Robillard <http://drobilla.net>
+
+ This 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 3 of the License,
+ or (at your option) any later version.
+
+ This software 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 software. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef LVZ_AUDIOEFFECTX_H
+#define LVZ_AUDIOEFFECTX_H
+
+#include <stdint.h>
+#include <string.h>
+
+#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
+#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
+
+class AudioEffect;
+
+typedef int (*audioMasterCallback)(int, int ver, int, int, int, int);
+
+AudioEffect* createEffectInstance(audioMasterCallback audioMaster);
+
+enum LvzPinFlags {
+ kLvzPinIsActive = 1<<0,
+ kLvzPinIsStereo = 1<<1
+};
+
+struct LvzPinProperties {
+ LvzPinProperties() : label(NULL), flags(0) {}
+ char* label;
+ int flags;
+};
+
+enum LvzEventTypes {
+ kLvzMidiType = 0
+};
+
+struct LvzEvent {
+ int type;
+};
+
+struct LvzMidiEvent : public LvzEvent {
+ char* midiData;
+ int32_t deltaFrames;
+};
+
+struct LvzEvents {
+ int32_t numEvents;
+ LvzEvent** events;
+};
+
+#define DECLARE_LVZ_DEPRECATED(x) x
+
+class AudioEffect {
+public:
+ AudioEffect() {}
+ virtual ~AudioEffect() {}
+
+ virtual void setParameter(int32_t index, float value) = 0;
+ virtual void setParameterAutomated(int32_t index, float value) {}
+ virtual float getParameter(int32_t index) = 0;
+
+ virtual void masterIdle() {}
+};
+
+class AudioEffectX : public AudioEffect {
+public:
+ AudioEffectX(audioMasterCallback audioMaster, int32_t progs, int32_t params)
+ : URI("NIL")
+ , uniqueID("NIL")
+ , eventInput(NULL)
+ , sampleRate(44100)
+ , curProgram(0)
+ , numInputs(0)
+ , numOutputs(0)
+ , numParams(params)
+ , numPrograms(progs)
+ {
+ }
+
+ virtual void process (float **inputs, float **outputs, int32_t nframes) {}
+ virtual void processReplacing(float **inputs, float **outputs, int32_t nframes) = 0;
+
+ void setMidiEventType(LV2_URID urid) { midiEventType = urid; }
+ void setEventInput(const LV2_Atom_Sequence* seq) { eventInput = seq; }
+
+ virtual int32_t processEvents(LvzEvents* ev) { return 0; }
+
+ virtual const char* getURI() { return URI; }
+ virtual const char* getUniqueID() { return uniqueID; }
+ virtual float getSampleRate() { return sampleRate; }
+ virtual int32_t getNumInputs() { return numInputs; }
+ virtual int32_t getNumOutputs() { return numOutputs; }
+ virtual int32_t getNumParameters() { return numParams; }
+ virtual int32_t getNumPrograms() { return numPrograms; }
+
+ virtual void getParameterName(int32_t index, char *label) = 0;
+ virtual bool getProductString(char* text) = 0;
+ virtual void getProgramName(char *name) { name[0] = '\0'; }
+
+ virtual int32_t canDo(const char* text) { return false; }
+ virtual bool canHostDo(const char* act) { return false; }
+ virtual void canMono() {}
+ virtual void canProcessReplacing() {}
+ virtual void isSynth() {}
+ virtual void wantEvents() {}
+
+ virtual void setBlockSize(int32_t size) {}
+ virtual void setNumInputs(int32_t num) { numInputs = num; }
+ virtual void setNumOutputs(int32_t num) { numOutputs = num; }
+ virtual void setSampleRate(float rate) { sampleRate = rate; }
+ virtual void setProgram(int32_t prog) { curProgram = prog; }
+ virtual void setURI(const char* uri) { URI = uri; }
+ virtual void setUniqueID(const char* id) { uniqueID = id; }
+ virtual void suspend() {}
+ virtual void beginEdit(int32_t index) {}
+ virtual void endEdit(int32_t index) {}
+
+ virtual long dispatcher(long opCode, long index, long value, void *ptr, float opt) {
+ return 0;
+ }
+
+protected:
+ const char* URI;
+ const char* uniqueID;
+ const LV2_Atom_Sequence* eventInput;
+ LV2_URID midiEventType;
+ float sampleRate;
+ int32_t curProgram;
+ int32_t numInputs;
+ int32_t numOutputs;
+ int32_t numParams;
+ int32_t numPrograms;
+};
+
+extern "C" {
+AudioEffectX* lvz_new_audioeffectx();
+}
+
+#endif // LVZ_AUDIOEFFECTX_H