1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#ifndef VstNetworkExporter_hxx
#define VstNetworkExporter_hxx
#include "audioeffectx.h"
#include <CLAM/Network.hxx>
#include <CLAM/ControlSource.hxx>
#include <CLAM/AudioSource.hxx>
#include <CLAM/AudioSink.hxx>
namespace CLAM
{
//-------------------------------------------------------------------------------------------------------
class VstNetworkExporter : public AudioEffectX
{
template<class T>
class ConnectorInfo
{
public:
std::string name;
T* processing;
};
class ExternControlInfo
{
public:
std::string name;
ControlSource* processing;
float lastvalue, min, max;
};
typedef std::vector< ExternControlInfo > VSTInControlList;
typedef std::vector< ConnectorInfo< CLAM::AudioSource > > VSTInPortList;
typedef std::vector< ConnectorInfo< CLAM::AudioSink > > VSTOutPortList;
public:
typedef VstNetworkExporter Plugin;
VstNetworkExporter (
const std::string & networkContent,
VstInt32 uniqueId,
const std::string & effectName,
const std::string & productString,
const std::string & vendor,
VstInt32 version);
VstNetworkExporter (
audioMasterCallback audioMaster,
const std::string & networkContent,
VstInt32 uniqueId,
const std::string & effectName,
const std::string & productString,
const std::string & vendor,
VstInt32 version);
~VstNetworkExporter ();
Plugin * createEffect(audioMasterCallback audioMaster);
bool ok() const { return true; }
// * VST AudioEffectX API *
// Processes
virtual void processReplacing (float **inputs, float **outputs, VstInt32 sampleFrames);
// Program
virtual void setProgramName (char *name);
virtual void getProgramName (char *name);
// Parameters
virtual void setParameter (VstInt32 index, float value);
virtual float getParameter (VstInt32 index);
virtual void getParameterLabel (VstInt32 index, char *label);
virtual void getParameterDisplay (VstInt32 index, char *text);
virtual void getParameterName (VstInt32 index, char *text);
// Metadata
virtual bool getEffectName (char* name);
virtual bool getVendorString (char* text);
virtual bool getProductString (char* text);
virtual VstInt32 getVendorVersion ();
virtual VstPlugCategory getPlugCategory () { return kPlugCategEffect; }
protected:
std::string _programName;
CLAM::Network _network;
VSTInControlList mInControlList;
VSTInPortList mReceiverList;
VSTOutPortList mSenderList;
unsigned mClamBufferSize, mExternBufferSize;
private:
CLAM::Network& GetNetwork() { return _network; }
int GetNumberOfParameters(const std::string & networkXmlContent);
void LocateConnections();
void ProcessInputControls();
void UpdatePortFrameAndHopSize();
VstInt32 _uniqueId;
std::string _embeddedNetwork;
std::string _effectName;
std::string _productString;
std::string _vendor;
VstInt32 _version;
};
}
#endif
|