INT32 DAUDIO_GetDirectAudioDeviceCount() { return (INT32) getAudioDeviceCount(); }
int startNativeAudio(int inDeviceId, unsigned int channels) { if(getAudioDeviceCount() < 1) { return -1; } // stop before stopNativeAudio(); // create new audio = new RtAudio(); std::cout << "RtAudio Version " << RtAudio::getVersion() << std::endl; if(inDeviceId<0) { inDeviceId = audio->getDefaultInputDevice(); } RtAudio::DeviceInfo deviceInfo = audio->getDeviceInfo(inDeviceId); unsigned int bufferFrames = _BUFFER_FRAMES; unsigned int sampleRate = _SAMPLE_RATE; if(channels > deviceInfo.inputChannels) { channels = deviceInfo.inputChannels; } // make input parameters RtAudio::StreamParameters iParams; iParams.deviceId = inDeviceId; iParams.nChannels = channels; iParams.firstChannel = 0; // stream options RtAudio::StreamOptions options; // options.flags |= RTAUDIO_NONINTERLEAVED; bufferBytes = bufferFrames * channels * sizeof(MY_TYPE); // TODO bufferLength = channels * _SAMPLE_RATE; currentBufferIndex = 0; audioBuffer = (MY_TYPE*)malloc(bufferLength * sizeof(MY_TYPE)); if(audioBuffer == NULL) { stopNativeAudio(); return -1; } try { audio->openStream(NULL, &iParams, RT_FORMAT, sampleRate, &bufferFrames, &input, (void*)&data, &options); } catch (RtError& e) { std::cout << e.getMessage() << std::endl; stopNativeAudio(); return -1; } data.bufferBytes = bufferBytes; data.channels = channels; try { audio->startStream(); } catch (RtError& e) { std::cout << e.getMessage() << std::endl; stopNativeAudio(); return -1; } return 0; // success }