more sound improvements

This commit is contained in:
georgemoralis 2024-03-19 19:48:18 +02:00
parent c9076e4ef9
commit de82dea7f1
2 changed files with 32 additions and 3 deletions

View file

@ -3,13 +3,17 @@
#include <SDL.h>
#include "sdl_audio.h"
#include <common/assert.h>
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

View file

@ -6,6 +6,7 @@
#include <mutex>
#include "src/common/types.h"
#include <core/libraries/libsceaudioout.h>
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 {