mirror of
https://github.com/izzy2lost/libultraship.git
synced 2026-06-19 01:16:13 -07:00
80 lines
2.3 KiB
C++
80 lines
2.3 KiB
C++
#include "ship/audio/Audio.h"
|
|
|
|
#include "ship/Context.h"
|
|
#include "ship/controller/controldeck/ControlDeck.h"
|
|
|
|
namespace Ship {
|
|
|
|
Audio::~Audio() {
|
|
SPDLOG_TRACE("destruct audio");
|
|
}
|
|
|
|
void Audio::InitAudioPlayer() {
|
|
switch (GetCurrentAudioBackend()) {
|
|
#ifdef _WIN32
|
|
case AudioBackend::WASAPI:
|
|
mAudioPlayer = std::make_shared<WasapiAudioPlayer>(this->mAudioSettings);
|
|
break;
|
|
#endif
|
|
case AudioBackend::SDL:
|
|
mAudioPlayer = std::make_shared<SDLAudioPlayer>(this->mAudioSettings);
|
|
break;
|
|
default:
|
|
mAudioPlayer = std::make_shared<NullAudioPlayer>(this->mAudioSettings);
|
|
break;
|
|
}
|
|
|
|
if (mAudioPlayer && !mAudioPlayer->Init()) {
|
|
// Failed to initialize system audio player.
|
|
// Fallback to Null if the native system player does not work.
|
|
SetCurrentAudioBackend(AudioBackend::NUL);
|
|
}
|
|
}
|
|
|
|
void Audio::Init() {
|
|
mAvailableAudioBackends = std::make_shared<std::vector<AudioBackend>>();
|
|
#ifdef _WIN32
|
|
mAvailableAudioBackends->push_back(AudioBackend::WASAPI);
|
|
#endif
|
|
mAvailableAudioBackends->push_back(AudioBackend::SDL);
|
|
mAvailableAudioBackends->push_back(AudioBackend::NUL);
|
|
|
|
SetCurrentAudioBackend(Context::GetInstance()->GetConfig()->GetCurrentAudioBackend());
|
|
}
|
|
|
|
std::shared_ptr<AudioPlayer> Audio::GetAudioPlayer() {
|
|
return mAudioPlayer;
|
|
}
|
|
|
|
AudioBackend Audio::GetCurrentAudioBackend() {
|
|
return mAudioBackend;
|
|
}
|
|
|
|
void Audio::SetCurrentAudioBackend(AudioBackend backend) {
|
|
mAudioBackend = backend;
|
|
Context::GetInstance()->GetConfig()->SetCurrentAudioBackend(GetCurrentAudioBackend());
|
|
Context::GetInstance()->GetConfig()->Save();
|
|
|
|
InitAudioPlayer();
|
|
}
|
|
|
|
std::shared_ptr<std::vector<AudioBackend>> Audio::GetAvailableAudioBackends() {
|
|
return mAvailableAudioBackends;
|
|
}
|
|
|
|
void Audio::SetAudioChannels(AudioChannelsSetting channels) {
|
|
if (mAudioSettings.ChannelSetting != channels) {
|
|
mAudioSettings.ChannelSetting = channels;
|
|
// Reinitialize the existing audio player with the new channel configuration
|
|
if (mAudioPlayer) {
|
|
mAudioPlayer->SetAudioChannels(channels);
|
|
}
|
|
}
|
|
}
|
|
|
|
AudioChannelsSetting Audio::GetAudioChannels() const {
|
|
return mAudioSettings.ChannelSetting;
|
|
}
|
|
|
|
} // namespace Ship
|