ScoreGeneratorVst.hpp

Go to the documentation of this file.
00001 
00022 #ifndef __SCOREGENERATORVST_H
00023 #define __SCOREGENERATORVST_H
00024 
00025 // Hack to compile all this GNU stuff on Windows.
00026 #ifdef _MSC_VER
00027 #include <windows.h>
00028 #include <mmsystem.h>
00029 #endif
00030 
00031 #include "public.sdk/source/vst2.x/audioeffectx.h"
00032 #include "Shell.hpp"
00033 #include <list>
00034 #include <vector>
00035 #include <map>
00036 #include <Python.h>
00037 
00038 class ScoreGeneratorVstFltk;
00039 
00040 struct SILENCE_PUBLIC Preset
00041 {
00042   std::string name;
00043   std::string text;
00044 };
00045 
00046 struct SILENCE_PUBLIC ScoreGeneratorEvent
00047 {
00048   double start;
00049   double duration;
00050   VstMidiEvent vstMidiEvent;
00051 };
00052 
00053 class SILENCE_PUBLIC ScoreGeneratorVst :
00054   public AudioEffectX,
00055   public csound::Shell
00056 {
00057 protected:
00058   enum
00059     {
00060       kNumInputs = 2
00061     };
00062   enum
00063     {
00064       kNumOutputs = 2
00065     };
00066   enum
00067     {
00068       kNumPrograms = 10
00069     };
00070   std::multimap<double, ScoreGeneratorEvent> scoreGeneratorEvents;
00071   std::vector<VstMidiEvent> vstMidiEventsBuffer;
00072   VstEvents *vstEventsPointer;
00073   double vstFramesPerSecond;
00074   double vstSecondsPerFrame;
00075   double vstCurrentBlockStart;
00076   double vstCurrentBlockStartFrame;
00077   double vstInputLatency;
00078   double vstInputLatencySeconds;
00079   bool vstTransportActive;
00080   char alive;
00081   ScoreGeneratorVstFltk *scoreGeneratorVstFltk;
00082   PyObject *score;
00083 public:
00084   std::vector<Preset> bank;
00085   // AudioEffectX overrides.
00086   ScoreGeneratorVst(audioMasterCallback audioMaster);
00087   virtual ~ScoreGeneratorVst();
00088   virtual AEffEditor *getEditor();
00089   virtual bool getEffectName(char* name);
00090   virtual bool getVendorString(char* name);
00091   virtual bool getProductString(char* name);
00092   virtual VstPlugCategory getPlugCategory();
00093   virtual VstInt32 canDo(char* text);
00094   virtual bool getInputProperties(VstInt32 index, VstPinProperties* properties);
00095   virtual bool getOutputProperties(VstInt32 index, VstPinProperties* properties);
00096   virtual bool keysRequired();
00097   virtual VstInt32 getProgram();
00098   virtual void setProgram(VstInt32 program);
00099   virtual void setProgramName(char *name);
00100   virtual void getProgramName(char *name);
00101   virtual bool copyProgram(VstInt32 destination);
00102   virtual bool getProgramNameIndexed(VstInt32 category, VstInt32 index, char* text);
00103   virtual VstInt32 getChunk(void** data, bool isPreset);
00104   virtual VstInt32 setChunk(void* data, VstInt32 byteSize, bool isPreset);
00105   virtual void suspend();
00106   virtual void resume();
00107   virtual VstInt32 processEvents(VstEvents *vstEvents);
00108   virtual void process(float **inputs, float **outputs, VstInt32 sampleFrames);
00109   virtual void processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames);
00110 
00111   // Peculiar to ScoreGeneratorVst.
00112   ScoreGeneratorVst();
00113   virtual std::string getText();
00114   virtual void setText(const std::string text);
00115   virtual bool synchronizeScore(VstInt32 blockSize);
00116   virtual void reset();
00117   virtual void openFile(std::string filename);
00118   virtual void openView(bool doRun = true);
00119   virtual void closeView();
00120   // Score generator functions.
00128   virtual int generate();
00132   virtual void clearEvents();
00139   virtual void sendEvents(VstInt32 frames);
00140   // Shell overrides.
00145   virtual void open();
00151   virtual int runScript(std::string script_);
00156   virtual size_t event(double start, double duration, double status, double channel, double data1, double data2);
00161   virtual void log(char *message);
00162   virtual void logv(char *format,...);
00163 };
00164 
00165 #endif
00166 

Generated on Tue Apr 14 11:00:49 2009 for Csound and CsoundAC by  doxygen 1.5.8