diff options
| author | Tortuga veloz <danielcampora@outlook.es> | 2025-03-12 14:20:15 +0100 |
|---|---|---|
| committer | Alejandro Asenjo Nitti <96613413+sonicdcer@users.noreply.github.com> | 2025-03-24 02:50:18 -0400 |
| commit | 798f6fbe1febdf77d22a15f8b98b19dbf0c363c9 (patch) | |
| tree | 9d78a163ab94a3bfe3dc404d737a177133c693c1 /src/port | |
| parent | 94553db6c146d01aa7bcf8ed24069acaac0de3db (diff) | |
Add 6-channel audio support.
Diffstat (limited to 'src/port')
| -rw-r--r-- | src/port/Engine.cpp | 17 | ||||
| -rw-r--r-- | src/port/ui/ImguiUI.cpp | 2 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 87cd9dd9..592660f9 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -166,7 +166,8 @@ GameEngine::GameEngine() { auto window = std::make_shared<Fast::Fast3dWindow>(std::vector<std::shared_ptr<Ship::GuiWindow>>({})); - this->context->Init(archiveFiles, {}, 3, { 32000, 1024, 1680 }, window, controlDeck); + AudioSurroundSetting surroundSetting = Ship::Context::GetInstance()->GetConfig()->GetCurrentAudioSurround(); + this->context->Init(archiveFiles, {}, 3, { 32000, 1024, 1680, surroundSetting }, window, controlDeck); #ifndef __SWITCH__ Ship::Context::GetInstance()->GetLogger()->set_level( @@ -341,7 +342,7 @@ void GameEngine::StartFrame() const { #endif -#define NUM_AUDIO_CHANNELS 2 +#define MAX_NUM_AUDIO_CHANNELS 6 extern "C" u16 audBuffer = 0; #include <sf64audio_provisional.h> @@ -371,6 +372,7 @@ void GameEngine::HandleAudioThread() { // gVIsPerFrame = 2; #define AUDIO_FRAMES_PER_UPDATE (gVIsPerFrame > 0 ? gVIsPerFrame : 1) +#define MAX_AUDIO_FRAMES_PER_UPDATE 3 // Compile-time constant with max value of gVIsPerFrame std::unique_lock<std::mutex> Lock(audio.mutex); int samples_left = AudioPlayerBuffered(); @@ -382,19 +384,22 @@ void GameEngine::HandleAudioThread() { countermin++; } - s16 audio_buffer[SAMPLES_HIGH * NUM_AUDIO_CHANNELS * 3] = { 0 }; + const int32_t num_audio_channels = GetNumAudioChannels(); + + s16 audio_buffer[SAMPLES_HIGH * MAX_NUM_AUDIO_CHANNELS * MAX_AUDIO_FRAMES_PER_UPDATE] = { 0 }; for (int i = 0; i < AUDIO_FRAMES_PER_UPDATE; i++) { - AudioThread_CreateNextAudioBuffer(audio_buffer + i * (num_audio_samples * NUM_AUDIO_CHANNELS), + AudioThread_CreateNextAudioBuffer(audio_buffer + i * (num_audio_samples * num_audio_channels), num_audio_samples); } #ifdef PIPE_DEBUG if (outfile.is_open()) { outfile.write(reinterpret_cast<char*>(audio_buffer), - num_audio_samples * (sizeof(int16_t) * NUM_AUDIO_CHANNELS * AUDIO_FRAMES_PER_UPDATE)); + num_audio_samples * (sizeof(int16_t) * num_audio_channels * AUDIO_FRAMES_PER_UPDATE)); } #endif AudioPlayerPlayFrame((u8*) audio_buffer, - num_audio_samples * (sizeof(int16_t) * NUM_AUDIO_CHANNELS * AUDIO_FRAMES_PER_UPDATE)); + num_audio_samples * (sizeof(int16_t) * num_audio_channels * AUDIO_FRAMES_PER_UPDATE)); + audio.processing = false; audio.cv_from_thread.notify_one(); } diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index addf058a..32dc2f41 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -171,6 +171,8 @@ void DrawSettingsMenu(){ if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) { UIWidgets::ReEnableComponent(""); } + + UIWidgets::PaddedEnhancementCheckbox("Surround 5.1 (needs reload)", "gSurroundAudio", true, false); ImGui::EndMenu(); } |
