mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2026-05-22 21:17:45 +01:00
58 lines
1.6 KiB
C++
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);
|
|
}
|