| 154 | } |
| 155 | |
| 156 | bool AudioService::Init() |
| 157 | { |
| 158 | PROFILE_CPU_NAMED("Audio.Init"); |
| 159 | PROFILE_MEM(Audio); |
| 160 | const auto settings = AudioSettings::Get(); |
| 161 | const bool mute = CommandLine::Options.Mute.IsTrue() || settings->DisableAudio; |
| 162 | |
| 163 | // Pick a backend to use |
| 164 | AudioBackend* backend = nullptr; |
| 165 | #if AUDIO_API_NONE |
| 166 | if (mute) |
| 167 | backend = New<AudioBackendNone>(); |
| 168 | #endif |
| 169 | #if AUDIO_API_PS4 |
| 170 | if (!backend) |
| 171 | backend = New<AudioBackendPS4>(); |
| 172 | #endif |
| 173 | #if AUDIO_API_PS5 |
| 174 | if (!backend) |
| 175 | backend = New<AudioBackendPS5>(); |
| 176 | #endif |
| 177 | #if AUDIO_API_SWITCH |
| 178 | if (!backend) |
| 179 | backend = New<AudioBackendSwitch>(); |
| 180 | #endif |
| 181 | #if AUDIO_API_OPENAL |
| 182 | if (!backend) |
| 183 | backend = New<AudioBackendOAL>(); |
| 184 | #endif |
| 185 | #if AUDIO_API_XAUDIO2 |
| 186 | if (!backend) |
| 187 | backend = New<AudioBackendXAudio2>(); |
| 188 | #endif |
| 189 | #if AUDIO_API_NONE |
| 190 | if (!backend) |
| 191 | backend = New<AudioBackendNone>(); |
| 192 | #else |
| 193 | if (mute) |
| 194 | LOG(Warning, "Cannot use mute audio. Null Audio Backend not available on this platform."); |
| 195 | #endif |
| 196 | if (backend == nullptr) |
| 197 | { |
| 198 | LOG(Error, "Failed to create audio backend."); |
| 199 | return true; |
| 200 | } |
| 201 | AudioBackend::Instance = backend; |
| 202 | |
| 203 | LOG(Info, "Audio system initialization... (backend: {0})", AudioBackend::Name()); |
| 204 | |
| 205 | EnableHRTF = settings->EnableHRTF; |
| 206 | if (AudioBackend::Init()) |
| 207 | { |
| 208 | LOG(Warning, "Failed to initialize audio backend."); |
| 209 | } |
| 210 | if (EnableHRTF && EnumHasNoneFlags(AudioBackend::Features(), AudioBackend::FeatureFlags::HRTF)) |
| 211 | { |
| 212 | LOG(Warning, "HRTF audio is not supported."); |
| 213 | EnableHRTF = false; |