/** * @author Edouard DUPIN * * @copyright 2011, Edouard DUPIN, all right reserved * * @license BSD 3 clauses (see license file) */ #include #include #include #include airtaudio::Interface* g_dac; static int airtAudioCallBack(void *_outputBuffer, void *_inputBuffer, unsigned int _nBufferFrames, double _streamTime, airtaudio::streamStatus _status, void* _userData) { if (_outputBuffer == NULL) { EWOLSA_ERROR("Null output buffer pointer"); return -1; } // Reset output data, in case ... memset(_outputBuffer, 0, _nBufferFrames*2*sizeof(int16_t)); // call music ewolsa::music::getData((int16_t*)_outputBuffer, _nBufferFrames, 2); // call Effects ewolsa::effects::getData((int16_t*)_outputBuffer, _nBufferFrames, 2); return 0; } void ewolsa::init(void) { if (g_dac != NULL) { EWOLSA_ERROR("multiple init requested ... at the audio system ..."); return; } ewolsa::effects::init(); ewolsa::music::init(); g_dac = new airtaudio::Interface(); if (g_dac == NULL) { EWOLSA_ERROR("Can not create AirTAudio interface"); return; } g_dac->instanciate(); if ( g_dac->getDeviceCount() < 1 ) { EWOLSA_ERROR("No audio devices found!"); return; } airtaudio::StreamParameters parameters; parameters.deviceId = g_dac->getDefaultOutputDevice(); parameters.nChannels = 2; parameters.firstChannel = 0; unsigned int bufferFrames = 256; EWOLSA_DEBUG("init Stream ..."); g_dac->openStream(¶meters, NULL, airtaudio::SINT16, 48000, &bufferFrames, &airtAudioCallBack, NULL); g_dac->startStream(); } void ewolsa::unInit(void) { if (g_dac == NULL) { EWOLSA_ERROR("multiple un-init requested ... at the audio system ..."); return; } ewolsa::effects::init(); ewolsa::music::init(); // Stop the stream g_dac->stopStream(); if ( g_dac->isStreamOpen() ) { g_dac->closeStream(); } delete(g_dac); g_dac = NULL; }