mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-20 13:23:45 -07:00
Added GetSampleRate function
This commit is contained in:
parent
9cf537eaff
commit
3dc33b6f84
4 changed files with 19 additions and 18 deletions
|
@ -11,5 +11,6 @@ namespace Ship {
|
||||||
virtual int Buffered(void) = 0;
|
virtual int Buffered(void) = 0;
|
||||||
virtual int GetDesiredBuffered(void) = 0;
|
virtual int GetDesiredBuffered(void) = 0;
|
||||||
virtual void Play(const uint8_t* buf, uint32_t len) = 0;
|
virtual void Play(const uint8_t* buf, uint32_t len) = 0;
|
||||||
|
constexpr int GetSampleRate() const { return 44100; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace Ship
|
||||||
// Create stream
|
// Create stream
|
||||||
pa_sample_spec ss;
|
pa_sample_spec ss;
|
||||||
ss.format = PA_SAMPLE_S16LE;
|
ss.format = PA_SAMPLE_S16LE;
|
||||||
ss.rate = 32000;
|
ss.rate = this->GetSampleRate();
|
||||||
ss.channels = 2;
|
ss.channels = 2;
|
||||||
|
|
||||||
pa_buffer_attr attr;
|
pa_buffer_attr attr;
|
||||||
|
|
|
@ -2,40 +2,40 @@
|
||||||
#include "spdlog/spdlog.h"
|
#include "spdlog/spdlog.h"
|
||||||
|
|
||||||
namespace Ship {
|
namespace Ship {
|
||||||
bool SDLAudioPlayer::Init(void) {
|
bool SDLAudioPlayer::Init(void) {
|
||||||
if (SDL_Init(SDL_INIT_AUDIO) != 0) {
|
if (SDL_Init(SDL_INIT_AUDIO) != 0) {
|
||||||
SPDLOG_ERROR("SDL init error: %s\n", SDL_GetError());
|
SPDLOG_ERROR("SDL init error: %s\n", SDL_GetError());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SDL_AudioSpec want, have;
|
SDL_AudioSpec want, have;
|
||||||
SDL_zero(want);
|
SDL_zero(want);
|
||||||
want.freq = 44000;
|
want.freq = this->GetSampleRate();
|
||||||
want.format = AUDIO_S16;
|
want.format = AUDIO_S16;
|
||||||
want.channels = 2;
|
want.channels = 2;
|
||||||
want.samples = 1024;
|
want.samples = 1024;
|
||||||
want.callback = NULL;
|
want.callback = NULL;
|
||||||
Device = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
|
Device = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
|
||||||
if (Device == 0) {
|
if (Device == 0) {
|
||||||
SPDLOG_ERROR("SDL_OpenAudio error: {}", SDL_GetError());
|
SPDLOG_ERROR("SDL_OpenAudio error: {}", SDL_GetError());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SDL_PauseAudioDevice(Device, 0);
|
SDL_PauseAudioDevice(Device, 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDLAudioPlayer::Buffered(void) {
|
int SDLAudioPlayer::Buffered(void) {
|
||||||
// 4 is sizeof(int16_t) * num_channels (2 for stereo)
|
// 4 is sizeof(int16_t) * num_channels (2 for stereo)
|
||||||
return SDL_GetQueuedAudioSize(Device) / 4;
|
return SDL_GetQueuedAudioSize(Device) / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDLAudioPlayer::GetDesiredBuffered(void) {
|
int SDLAudioPlayer::GetDesiredBuffered(void) {
|
||||||
return 1680;
|
return 1680;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLAudioPlayer::Play(const uint8_t* Buffer, uint32_t BufferLen) {
|
void SDLAudioPlayer::Play(const uint8_t* Buffer, uint32_t BufferLen) {
|
||||||
if (Buffered() < 6000) {
|
if (Buffered() < 6000) {
|
||||||
// Don't fill the audio buffer too much in case this happens
|
// Don't fill the audio buffer too much in case this happens
|
||||||
SDL_QueueAudio(Device, Buffer, BufferLen);
|
SDL_QueueAudio(Device, Buffer, BufferLen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -30,8 +30,8 @@ namespace Ship {
|
||||||
WAVEFORMATEX desired;
|
WAVEFORMATEX desired;
|
||||||
desired.wFormatTag = WAVE_FORMAT_PCM;
|
desired.wFormatTag = WAVE_FORMAT_PCM;
|
||||||
desired.nChannels = 2;
|
desired.nChannels = 2;
|
||||||
desired.nSamplesPerSec = 44100;
|
desired.nSamplesPerSec = this->GetSampleRate();
|
||||||
desired.nAvgBytesPerSec = 44100 * 2 * 2;
|
desired.nAvgBytesPerSec = desired.nSamplesPerSec * 2 * 2;
|
||||||
desired.nBlockAlign = 4;
|
desired.nBlockAlign = 4;
|
||||||
desired.wBitsPerSample = 16;
|
desired.wBitsPerSample = 16;
|
||||||
desired.cbSize = 0;
|
desired.cbSize = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue