Shipwright/libultraship/libultraship/SDLAudioPlayer.cpp

42 lines
1.3 KiB
C++

#include "SDLAudioPlayer.h"
#include "spdlog/spdlog.h"
namespace Ship {
bool SDLAudioPlayer::Init(void) {
if (SDL_Init(SDL_INIT_AUDIO) != 0) {
SPDLOG_ERROR("SDL init error: %s\n", SDL_GetError());
return false;
}
SDL_AudioSpec want, have;
SDL_zero(want);
want.freq = this->GetSampleRate();
want.format = AUDIO_S16;
want.channels = 2;
want.samples = 1024;
want.callback = NULL;
Device = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
if (Device == 0) {
SPDLOG_ERROR("SDL_OpenAudio error: {}", SDL_GetError());
return false;
}
SDL_PauseAudioDevice(Device, 0);
return true;
}
int SDLAudioPlayer::Buffered(void) {
// 4 is sizeof(int16_t) * num_channels (2 for stereo)
return SDL_GetQueuedAudioSize(Device) / 4;
}
int SDLAudioPlayer::GetDesiredBuffered(void) {
return 2480;
}
void SDLAudioPlayer::Play(const uint8_t* Buffer, uint32_t BufferLen) {
if (Buffered() < 6000) {
// Don't fill the audio buffer too much in case this happens
SDL_QueueAudio(Device, Buffer, BufferLen);
}
}
}