Files
libultraship/src/ship/audio/Audio.cpp
T

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