2014-11-16 16:50:37 -05:00
|
|
|
#include "AudioThread.h"
|
|
|
|
#include "CubicSDRDefs.h"
|
|
|
|
#include <vector>
|
|
|
|
|
2014-11-22 22:33:32 -05:00
|
|
|
AudioThread::AudioThread(AudioThreadInputQueue *inputQueue) :
|
2014-12-04 19:03:02 -05:00
|
|
|
inputQueue(inputQueue), terminated(false) { // , stream(NULL)
|
2014-11-22 22:33:32 -05:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
AudioThread::~AudioThread() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-11-22 20:57:06 -05:00
|
|
|
void AudioThread::threadMain() {
|
2014-11-30 17:11:29 -05:00
|
|
|
std::cout << "Audio thread initializing.." << std::endl;
|
|
|
|
|
2014-12-04 19:03:02 -05:00
|
|
|
// PaError err;
|
|
|
|
// err = Pa_Initialize();
|
|
|
|
// if (err != paNoError) {
|
|
|
|
// std::cout << "Error starting portaudio :(" << std::endl;
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// int preferred_device = -1;
|
|
|
|
//
|
|
|
|
// outputParameters.device =
|
|
|
|
// (preferred_device != -1) ?
|
|
|
|
// preferred_device : Pa_GetDefaultOutputDevice();
|
|
|
|
// if (outputParameters.device == paNoDevice) {
|
|
|
|
// std::cout << "Error: No default output device.\n";
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// outputParameters.channelCount = 2;
|
|
|
|
// outputParameters.sampleFormat = paFloat32;
|
|
|
|
// outputParameters.suggestedLatency = Pa_GetDeviceInfo(
|
|
|
|
// outputParameters.device)->defaultHighOutputLatency;
|
|
|
|
// outputParameters.hostApiSpecificStreamInfo = NULL;
|
|
|
|
//
|
|
|
|
// stream = NULL;
|
|
|
|
//
|
|
|
|
// err = Pa_OpenStream(&stream, NULL, &outputParameters, AUDIO_FREQUENCY,
|
|
|
|
// paFramesPerBufferUnspecified, paClipOff, NULL, NULL);
|
|
|
|
|
|
|
|
// err = Pa_StartStream(stream);
|
|
|
|
// if (err != paNoError) {
|
|
|
|
// std::cout << "Error starting stream: " << Pa_GetErrorText(err)
|
|
|
|
// << std::endl;
|
|
|
|
// std::cout << "\tPortAudio error: " << Pa_GetErrorText(err) << std::endl;
|
|
|
|
// }
|
2014-11-22 22:56:33 -05:00
|
|
|
|
2014-11-23 19:39:27 -05:00
|
|
|
while (!terminated) {
|
2014-11-22 22:56:33 -05:00
|
|
|
AudioThreadInput inp;
|
|
|
|
inputQueue->pop(inp);
|
2014-11-23 19:39:27 -05:00
|
|
|
if (inp.data.size()) {
|
2014-12-04 19:03:02 -05:00
|
|
|
// Pa_WriteStream(stream, &inp.data[0], inp.data.size()/2);
|
2014-11-23 19:39:27 -05:00
|
|
|
}
|
2014-11-22 22:56:33 -05:00
|
|
|
}
|
2014-11-30 17:11:29 -05:00
|
|
|
|
2014-12-04 19:03:02 -05:00
|
|
|
// err = Pa_StopStream(stream);
|
|
|
|
// err = Pa_CloseStream(stream);
|
|
|
|
// Pa_Terminate();
|
2014-11-30 17:11:29 -05:00
|
|
|
|
|
|
|
std::cout << "Audio thread done." << std::endl;
|
2014-11-16 16:50:37 -05:00
|
|
|
}
|
|
|
|
|
2014-11-23 19:39:27 -05:00
|
|
|
void AudioThread::terminate() {
|
|
|
|
terminated = true;
|
|
|
|
AudioThreadInput endCond; // push an empty input to bump the queue
|
|
|
|
inputQueue->push(endCond);
|
|
|
|
}
|