X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpretor/preprocessor/faust-0.9.47mr3/architecture/audio/portaudio-dsp.h diff --git a/interpretor/preprocessor/faust-0.9.47mr3/architecture/audio/portaudio-dsp.h b/interpretor/preprocessor/faust-0.9.47mr3/architecture/audio/portaudio-dsp.h deleted file mode 100644 index 726a906..0000000 --- a/interpretor/preprocessor/faust-0.9.47mr3/architecture/audio/portaudio-dsp.h +++ /dev/null @@ -1,192 +0,0 @@ -/************************************************************************ - - IMPORTANT NOTE : this file contains two clearly delimited sections : - the ARCHITECTURE section (in two parts) and the USER section. Each section - is governed by its own copyright and license. Please check individually - each section for license and copyright information. -*************************************************************************/ - -/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ - -/************************************************************************ - FAUST Architecture File - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This Architecture section 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 program 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 program; If not, see . - - EXCEPTION : As a special exception, you may create a larger work - that contains this FAUST architecture section and distribute - that work under terms of your choice, so long as this FAUST - architecture section is not modified. - - - ************************************************************************ - ************************************************************************/ - - -#ifndef __portaudio_dsp__ -#define __portaudio_dsp__ - -#include -#include -#include - -#include "audio.h" -#include "dsp.h" - -#define max(x,y) (((x)>(y)) ? (x) : (y)) - -static int audioCallback(const void *ibuf, void *obuf, unsigned long frames, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags, void * drv); -//---------------------------------------------------------------------------- -static void pa_error(int err) -{ - if (err != paNoError) { - printf( "PortAudio error: %s\n", Pa_GetErrorText( err ) ); - } -} - -/****************************************************************************** -******************************************************************************* - - PORT AUDIO INTERFACE - -******************************************************************************* -*******************************************************************************/ -class portaudio : public audio { - - dsp* fDsp; - PaStream* fAudioStream; - long fSampleRate, fBufferSize; - //---------------------------------------------------------------------------- - // number of physical input and output channels of the PA device - //---------------------------------------------------------------------------- - int fDevNumInChans; - int fDevNumOutChans; - - //---------------------------------------------------------------------------- - // tables of noninterleaved input and output channels for FAUST - //---------------------------------------------------------------------------- - float* fInChannel[256]; - float* fOutChannel[256]; - - //---------------------------------------------------------------------------- - // allocated the noninterleaved input and output channels for FAUST - //---------------------------------------------------------------------------- - void allocChannels (int size, int numInChan, int numOutChan) - { - assert (numInChan < 256); - assert (numOutChan < 256); - - for (int i = 0; i < numInChan; i++) { - fInChannel[i] = (float*) calloc (size, sizeof(float)); - for (int j = 0; j < size; j++) - fInChannel[i][j] = 0.0; - } - - for (int i = 0; i < numOutChan; i++) { - fOutChannel[i] = (float*) calloc (size, sizeof(float)); - for (int j = 0; j < size; j++) - fOutChannel[i][j] = 0.0; - } - } - - public: - portaudio(long srate, long bsize) : fDsp(0), fAudioStream(0), - fSampleRate(srate), fBufferSize(bsize), fDevNumInChans(0), fDevNumOutChans(0) {} - virtual ~portaudio() { stop(); } - - virtual bool init(const char* name, dsp* DSP){ - fDsp = DSP; - pa_error(Pa_Initialize()); - - const PaDeviceInfo* idev = Pa_GetDeviceInfo(Pa_GetDefaultInputDevice()); - const PaDeviceInfo* odev = Pa_GetDeviceInfo(Pa_GetDefaultOutputDevice()); - - fDevNumInChans = (fDsp->getNumInputs() > 0) ? idev->maxInputChannels : 0 ; - fDevNumOutChans = (fDsp->getNumOutputs() > 0) ? odev->maxOutputChannels : 0; - - PaStreamParameters inputParameters; - PaStreamParameters outputParameters; - - inputParameters.device = Pa_GetDefaultInputDevice(); - inputParameters.sampleFormat = paFloat32; - inputParameters.channelCount = fDevNumInChans; - inputParameters.hostApiSpecificStreamInfo = 0; - - outputParameters.device = Pa_GetDefaultOutputDevice(); - outputParameters.sampleFormat = paFloat32; - outputParameters.channelCount = fDevNumOutChans; - outputParameters.hostApiSpecificStreamInfo = 0; - - PaError err; - if ((err = Pa_IsFormatSupported( - ((fDevNumInChans > 0) ? &inputParameters : 0), - ((fDevNumOutChans > 0) ? &outputParameters : 0), fSampleRate)) != 0) { - printf("stream format is not supported err = %d\n", err); - return false; - } - - allocChannels(fBufferSize, max(fDevNumInChans, fDsp->getNumInputs()), max(fDevNumOutChans, fDsp->getNumOutputs())); - fDsp->init(fSampleRate); - return true; - } - - virtual bool start() { - pa_error(Pa_OpenDefaultStream(&fAudioStream, fDevNumInChans, fDevNumOutChans, paFloat32, fSampleRate, fBufferSize, audioCallback, this)); - Pa_StartStream(fAudioStream); - return true; - } - - virtual void stop() { - if (fAudioStream) { - Pa_StopStream (fAudioStream); - Pa_CloseStream(fAudioStream); - fAudioStream = 0; - } - } - - int processAudio(const float *ibuf, float *obuf, unsigned long frames) { - const float* fInputBuffer = ibuf; - float* fOutputBuffer = obuf; - - // split input samples - for (unsigned long s = 0; s < frames; s++) { - for (int c = 0; c < fDevNumInChans; c++) { - fInChannel[c][s] = fInputBuffer[c + s*fDevNumInChans]; - } - } - - // process samples - fDsp->compute(frames, fInChannel, fOutChannel); - - // merge output samples - for (unsigned long s = 0; s < frames; s++) { - for (int c = 0; c < fDevNumOutChans; c++) { - fOutputBuffer[c + s*fDevNumOutChans] = fOutChannel[c][s]; - } - } - return 0; - } -}; - -//---------------------------------------------------------------------------- -// Port Audio Callback -//---------------------------------------------------------------------------- -static int audioCallback(const void *ibuf, void *obuf, unsigned long frames, const PaStreamCallbackTimeInfo*, PaStreamCallbackFlags, void * drv) -{ - portaudio * pa = (portaudio*) drv; - return pa->processAudio ((const float*)ibuf, (float*)obuf, frames); -} - -#endif