svcore
1.9
|
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ 00002 00003 /* 00004 Sonic Visualiser 00005 An audio file viewer and annotation editor. 00006 Centre for Digital Music, Queen Mary, University of London. 00007 00008 This program is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU General Public License as 00010 published by the Free Software Foundation; either version 2 of the 00011 License, or (at your option) any later version. See the file 00012 COPYING included with this distribution for more information. 00013 */ 00014 00015 /* 00016 This is a modified version of a source file from the 00017 Rosegarden MIDI and audio sequencer and notation editor. 00018 This file copyright 2000-2006 Chris Cannam and Richard Bown. 00019 */ 00020 00021 #ifndef _LADSPAPLUGININSTANCE_H_ 00022 #define _LADSPAPLUGININSTANCE_H_ 00023 00024 #include <vector> 00025 #include <set> 00026 #include <QString> 00027 00028 #include "api/ladspa.h" 00029 #include "RealTimePluginInstance.h" 00030 00031 // LADSPA plugin instance. LADSPA is a variable block size API, but 00032 // for one reason and another it's more convenient to use a fixed 00033 // block size in this wrapper. 00034 // 00035 class LADSPAPluginInstance : public RealTimePluginInstance 00036 { 00037 public: 00038 virtual ~LADSPAPluginInstance(); 00039 00040 virtual bool isOK() const { return m_instanceHandles.size() != 0; } 00041 00042 int getClientId() const { return m_client; } 00043 virtual QString getPluginIdentifier() const { return m_identifier; } 00044 int getPosition() const { return m_position; } 00045 00046 virtual std::string getIdentifier() const; 00047 virtual std::string getName() const; 00048 virtual std::string getDescription() const; 00049 virtual std::string getMaker() const; 00050 virtual int getPluginVersion() const; 00051 virtual std::string getCopyright() const; 00052 00053 virtual void run(const Vamp::RealTime &rt, size_t count = 0); 00054 00055 virtual unsigned int getParameterCount() const; 00056 virtual void setParameterValue(unsigned int parameter, float value); 00057 virtual float getParameterValue(unsigned int parameter) const; 00058 virtual float getParameterDefault(unsigned int parameter) const; 00059 virtual int getParameterDisplayHint(unsigned int parameter) const; 00060 00061 virtual ParameterList getParameterDescriptors() const; 00062 virtual float getParameter(std::string) const; 00063 virtual void setParameter(std::string, float); 00064 00065 virtual size_t getBufferSize() const { return m_blockSize; } 00066 virtual size_t getAudioInputCount() const { return m_instanceCount * m_audioPortsIn.size(); } 00067 virtual size_t getAudioOutputCount() const { return m_instanceCount * m_audioPortsOut.size(); } 00068 virtual sample_t **getAudioInputBuffers() { return m_inputBuffers; } 00069 virtual sample_t **getAudioOutputBuffers() { return m_outputBuffers; } 00070 00071 virtual size_t getControlOutputCount() const { return m_controlPortsOut.size(); } 00072 virtual float getControlOutputValue(size_t n) const; 00073 00074 virtual bool isBypassed() const { return m_bypassed; } 00075 virtual void setBypassed(bool bypassed) { m_bypassed = bypassed; } 00076 00077 virtual size_t getLatency(); 00078 00079 virtual void silence(); 00080 virtual void setIdealChannelCount(size_t channels); // may re-instantiate 00081 00082 virtual std::string getType() const { return "LADSPA Real-Time Plugin"; } 00083 00084 protected: 00085 // To be constructed only by LADSPAPluginFactory 00086 friend class LADSPAPluginFactory; 00087 00088 // Constructor that creates the buffers internally 00089 // 00090 LADSPAPluginInstance(RealTimePluginFactory *factory, 00091 int client, 00092 QString identifier, 00093 int position, 00094 unsigned long sampleRate, 00095 size_t blockSize, 00096 int idealChannelCount, 00097 const LADSPA_Descriptor* descriptor); 00098 00099 void init(int idealChannelCount = 0); 00100 void instantiate(unsigned long sampleRate); 00101 void cleanup(); 00102 void activate(); 00103 void deactivate(); 00104 00105 // Connection of data (and behind the scenes control) ports 00106 // 00107 void connectPorts(); 00108 00109 int m_client; 00110 int m_position; 00111 std::vector<LADSPA_Handle> m_instanceHandles; 00112 size_t m_instanceCount; 00113 const LADSPA_Descriptor *m_descriptor; 00114 00115 std::vector<std::pair<unsigned long, LADSPA_Data*> > m_controlPortsIn; 00116 std::vector<std::pair<unsigned long, LADSPA_Data*> > m_controlPortsOut; 00117 00118 std::vector<int> m_audioPortsIn; 00119 std::vector<int> m_audioPortsOut; 00120 00121 size_t m_blockSize; 00122 sample_t **m_inputBuffers; 00123 sample_t **m_outputBuffers; 00124 bool m_ownBuffers; 00125 size_t m_sampleRate; 00126 float *m_latencyPort; 00127 bool m_run; 00128 00129 bool m_bypassed; 00130 }; 00131 00132 #endif // _LADSPAPLUGININSTANCE_H_ 00133