From de82dea7f199bb49efd9cc100a875bd54f677ffb Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Tue, 19 Mar 2024 19:48:18 +0200 Subject: [PATCH] more sound improvements --- src/audio_core/sdl_audio.cpp | 32 ++++++++++++++++++++++++++++++-- src/audio_core/sdl_audio.h | 3 ++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/audio_core/sdl_audio.cpp b/src/audio_core/sdl_audio.cpp index 99977ca2f..0a5ed4a65 100644 --- a/src/audio_core/sdl_audio.cpp +++ b/src/audio_core/sdl_audio.cpp @@ -3,13 +3,17 @@ #include #include "sdl_audio.h" +#include + namespace Audio { int SDLAudio::AudioInit() { return SDL_InitSubSystem(SDL_INIT_AUDIO); } -int SDLAudio::AudioOutOpen(int type, u32 samples_num, u32 freq, u32 format) { +int SDLAudio::AudioOutOpen(int type, u32 samples_num, u32 freq, + Libraries::AudioOut::OrbisAudioOutParam format) { + using Libraries::AudioOut::OrbisAudioOutParam; std::scoped_lock lock{m_mutex}; for (int id = 0; id < portsOut.size(); id++) { auto& port = portsOut[id]; @@ -19,8 +23,32 @@ int SDLAudio::AudioOutOpen(int type, u32 samples_num, u32 freq, u32 format) { port.samples_num = samples_num; port.freq = freq; port.format = format; + + switch (format) { + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_S16_MONO: + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_FLOAT_MONO: + port.channels_num = 1; + break; + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_S16_STEREO: + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_FLOAT_STEREO: + port.channels_num = 2; + break; + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_S16_8CH: + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_FLOAT_8CH: + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_S16_8CH_STD: + case OrbisAudioOutParam::ORBIS_AUDIO_OUT_PARAM_FORMAT_FLOAT_8CH_STD: + port.channels_num = 8; + break; + default: + UNREACHABLE_MSG("Unknown format"); + } + + for (int i = 0; i < port.channels_num; i++) { + port.volume[i] = Libraries::AudioOut::SCE_AUDIO_OUT_VOLUME_0DB; + } + return id + 1; } - return id + 1; + } return -1; // all ports are used diff --git a/src/audio_core/sdl_audio.h b/src/audio_core/sdl_audio.h index 0e3a7217b..2cc5e7d06 100644 --- a/src/audio_core/sdl_audio.h +++ b/src/audio_core/sdl_audio.h @@ -6,6 +6,7 @@ #include #include "src/common/types.h" +#include namespace Audio { @@ -15,7 +16,7 @@ public: virtual ~SDLAudio() = default; int AudioInit(); - int AudioOutOpen(int type, u32 samples_num, u32 freq, u32 format); + int AudioOutOpen(int type, u32 samples_num, u32 freq, Libraries::AudioOut::OrbisAudioOutParam format); private: struct PortOut {