summaryrefslogtreecommitdiff
path: root/src/port
diff options
context:
space:
mode:
authorTortuga veloz <danielcampora@outlook.es>2025-03-12 14:20:15 +0100
committerAlejandro Asenjo Nitti <96613413+sonicdcer@users.noreply.github.com>2025-03-24 02:50:18 -0400
commit798f6fbe1febdf77d22a15f8b98b19dbf0c363c9 (patch)
tree9d78a163ab94a3bfe3dc404d737a177133c693c1 /src/port
parent94553db6c146d01aa7bcf8ed24069acaac0de3db (diff)
Add 6-channel audio support.
Diffstat (limited to 'src/port')
-rw-r--r--src/port/Engine.cpp17
-rw-r--r--src/port/ui/ImguiUI.cpp2
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();
}