| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | #include "PortAudioSink.h"PortAudioSink::PortAudioSink() {  Pa_Initialize();  this->setParams(44100, 2, 16);}bool PortAudioSink::setParams(uint32_t sampleRate, uint8_t channelCount,                              uint8_t bitDepth) {  if (stream) {    Pa_StopStream(stream);  }  PaStreamParameters outputParameters;  outputParameters.device = Pa_GetDefaultOutputDevice();  if (outputParameters.device == paNoDevice) {    printf("PortAudio: Default audio device not found!\n");    // exit(0);  }  printf("PortAudio: Default audio device not found!\n");  outputParameters.channelCount = channelCount;  switch (bitDepth) {    case 32:      outputParameters.sampleFormat = paInt32;      break;    case 24:      outputParameters.sampleFormat = paInt24;      break;    case 16:      outputParameters.sampleFormat = paInt16;      break;    case 8:      outputParameters.sampleFormat = paInt8;      break;    default:      outputParameters.sampleFormat = paInt16;      break;  }  outputParameters.suggestedLatency = 0.050;  outputParameters.hostApiSpecificStreamInfo = NULL;  PaError err = Pa_OpenStream(&stream, NULL, &outputParameters, sampleRate,                              4096 / (channelCount * bitDepth / 8), paClipOff,                              NULL,  // blocking api                              NULL);  Pa_StartStream(stream);  return !err;}PortAudioSink::~PortAudioSink() {  Pa_StopStream(stream);  Pa_Terminate();}void PortAudioSink::feedPCMFrames(const uint8_t* buffer, size_t bytes) {  Pa_WriteStream(stream, buffer, bytes / 4);}
 |