Files
squeezelite-esp32/components/spotify/cspot/bell/main/audio-sinks/unix/PortAudioSink.cpp
T
2023-05-06 23:50:26 +02:00

58 lines
1.6 KiB
C++

#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);
}