X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/oscdsp.h diff --git a/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/oscdsp.h b/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/oscdsp.h new file mode 100644 index 0000000..4521d53 --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/oscdsp.h @@ -0,0 +1,71 @@ + +#ifndef __osc_dsp__ +#define __osc_dsp__ + +#include +#include "audio/audio.h" +#include "audio/dsp.h" +#include "OSCIO.h" + +/****************************************************************************** +******************************************************************************* + + OSC AUDIO INTERFACE + +******************************************************************************* +*******************************************************************************/ + +#define kMaxBuffer 4096 + +class oscdsp : public audio, public oscfaust::OSCIO { + dsp* fDsp; + float ** fInBuffers, **fOutBuffers; + + public: + oscdsp(const char * dst, int argc, char *argv[]) : OSCIO(dst), fDsp(0), fInBuffers(0), fOutBuffers(0) + { + for (int i = 1; i < argc-1; i++) + if (!strcmp(argv[i], "-iodst")) setDest (argv[i+1]); + } + virtual ~oscdsp() { stop(); } + + virtual bool init(const char*name, dsp* DSP) { + fDsp = DSP; + fDsp->init(44100); + fInBuffers = new float*[numInputs()]; + fOutBuffers = new float*[numOutputs()]; + for (int i= 0; i < numInputs(); i++) + fInBuffers[i] = new float[kMaxBuffer]; + for (int i= 0; i < numOutputs(); i++) + fOutBuffers [i] = new float[kMaxBuffer]; + return true; + } + + virtual bool start() { return true; } + virtual void stop() {} + + void compute( int nframes ) { + fDsp->compute(nframes, fInBuffers, fOutBuffers); + for (int i= 0; i < numOutputs(); i++) + send( nframes, fOutBuffers [i], i); + } + + void receive( int nvalues, float * val ) { + int inChans = numInputs(); + if (!inChans) { + compute(nvalues); + return; + } + + for (int i=0; i < nvalues; i++) { + int c = i % inChans; + int frame = i / inChans; + fInBuffers[c][frame] = val[i]; + } + compute (nvalues / inChans); + } + int numOutputs() const { return fDsp ? fDsp->getNumOutputs() : 0; } + int numInputs() const { return fDsp ? fDsp->getNumInputs() : 0; } +}; + +#endif