This commit is contained in:
Demur Rumed 2025-04-20 21:32:46 +00:00
commit 164222b827
5 changed files with 31 additions and 32 deletions

View file

@ -10,7 +10,7 @@ class SfxExtractor {
s16 currentSfx; s16 currentSfx;
std::vector<int16_t> tempStorage; // Stores raw audio data for the sfx currently being ripped. std::vector<int16_t> tempStorage; // Stores raw audio data for the sfx currently being ripped.
int16_t* tempBuffer; // Raw pointer to the above vector. int16_t* tempBuffer; // Raw pointer to the above vector.
int progressMilestones[9]; // Implements progress reports after every 10 percent. int progressMilestones[9]; // Implements progress reports after every 10 percent.
// Check if a buffer contains meaningful audio output. // Check if a buffer contains meaningful audio output.
bool isAllZero(int16_t* buffer, size_t count); bool isAllZero(int16_t* buffer, size_t count);
// Find the beginning of a captured signal. // Find the beginning of a captured signal.
@ -19,8 +19,9 @@ class SfxExtractor {
void renderOutput(); void renderOutput();
void setup(); void setup();
void ripNextSfx(); void ripNextSfx();
void finished();// Also handles failure. void finished(); // Also handles failure.
void maybeGiveProgressReport(); void maybeGiveProgressReport();
public: public:
SfxExtractor(); SfxExtractor();

View file

@ -127,7 +127,7 @@ Sail* Sail::Instance;
#include "soh/resource/importer/BackgroundFactory.h" #include "soh/resource/importer/BackgroundFactory.h"
#include "soh/config/ConfigUpdaters.h" #include "soh/config/ConfigUpdaters.h"
#include "soh/ShipInit.hpp" #include "soh/ShipInit.hpp"
#if !defined(__SWITCH__) && !defined(__WIIU__) #if !defined(__SWITCH__) && !defined(__WIIU__)
#include "Enhancements/accessible-actors/ActorAccessibility.h" #include "Enhancements/accessible-actors/ActorAccessibility.h"
#endif #endif
@ -294,10 +294,10 @@ OTRGlobals::OTRGlobals() {
} }
} }
std::string sohAccessibilityPath = Ship::Context::GetPathRelativeToAppDirectory("accessibility.otr"); std::string sohAccessibilityPath = Ship::Context::GetPathRelativeToAppDirectory("accessibility.otr");
if (std::filesystem::exists(sohAccessibilityPath)) { if (std::filesystem::exists(sohAccessibilityPath)) {
OTRFiles.push_back(sohAccessibilityPath); OTRFiles.push_back(sohAccessibilityPath);
} }
std::sort(patchOTRs.begin(), patchOTRs.end(), [](const std::string& a, const std::string& b) { std::sort(patchOTRs.begin(), patchOTRs.end(), [](const std::string& a, const std::string& b) {
return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(), return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(),
@ -587,7 +587,8 @@ void OTRAudio_Thread() {
// 3 is the maximum authentic frame divisor. // 3 is the maximum authentic frame divisor.
s16 audio_buffer[SAMPLES_HIGH * NUM_AUDIO_CHANNELS * 3]; s16 audio_buffer[SAMPLES_HIGH * NUM_AUDIO_CHANNELS * 3];
for (int i = 0; i < AUDIO_FRAMES_PER_UPDATE; i++) { for (int i = 0; i < AUDIO_FRAMES_PER_UPDATE; i++) {
AudioMgr_CreateNextAudioBuffer(audio_buffer + i * (num_audio_samples * NUM_AUDIO_CHANNELS), num_audio_samples); AudioMgr_CreateNextAudioBuffer(audio_buffer + i * (num_audio_samples * NUM_AUDIO_CHANNELS),
num_audio_samples);
#if !defined(__SWITCH__) && !defined(__WIIU__) #if !defined(__SWITCH__) && !defined(__WIIU__)
// Give accessibility a chance to merge its own audio in. // Give accessibility a chance to merge its own audio in.
ActorAccessibility_MixAccessibleAudioWithGameAudio( ActorAccessibility_MixAccessibleAudioWithGameAudio(
@ -1252,9 +1253,9 @@ extern "C" void InitOTR() {
#endif #endif
OTRMessage_Init(); OTRMessage_Init();
#if !defined(__SWITCH__) && !defined(__WIIU__) #if !defined(__SWITCH__) && !defined(__WIIU__)
ActorAccessibility_Init(); ActorAccessibility_Init();
#endif #endif
OTRAudio_Init(); OTRAudio_Init();
OTRExtScanner(); OTRExtScanner();
VanillaItemTable_Init(); VanillaItemTable_Init();
@ -1537,7 +1538,7 @@ extern "C" void Graph_ProcessGfxCommands(Gfx* commands) {
last_update_rate = R_UPDATE_RATE; last_update_rate = R_UPDATE_RATE;
{ {
std::unique_lock<std::mutex> Lock(audio.mutex); std::unique_lock<std::mutex> Lock(audio.mutex);
while (audio.processing) { while (audio.processing) {
audio.cv_from_thread.wait(Lock); audio.cv_from_thread.wait(Lock);
} }
@ -2553,24 +2554,21 @@ void OTRAudio_SfxCaptureThread() {
} }
} }
extern "C" void OTRAudio_InstallSfxCaptureThread() { extern "C" void OTRAudio_InstallSfxCaptureThread() {
OTRAudio_Exit(); OTRAudio_Exit();
audio.running = true; audio.running = true;
audio.thread = std::thread(OTRAudio_SfxCaptureThread); audio.thread = std::thread(OTRAudio_SfxCaptureThread);
}
} extern "C" void OTRAudio_UninstallSfxCaptureThread() {
extern "C" void OTRAudio_UninstallSfxCaptureThread()
{
OTRAudio_Exit(); OTRAudio_Exit();
audio.running = true; audio.running = true;
audio.thread = std::thread(OTRAudio_Thread); audio.thread = std::thread(OTRAudio_Thread);
} }
std::unique_lock<std::mutex> OTRAudio_Lock() std::unique_lock<std::mutex> OTRAudio_Lock() {
{
return std::unique_lock<std::mutex>(audio.mutex); return std::unique_lock<std::mutex>(audio.mutex);
} }
//extern "C" void CheckTracker_OnMessageClose() { // extern "C" void CheckTracker_OnMessageClose() {
// CheckTracker::CheckTrackerDialogClosed(); // CheckTracker::CheckTrackerDialogClosed();
extern "C" void Gfx_UnregisterBlendedTexture(const char* name) { extern "C" void Gfx_UnregisterBlendedTexture(const char* name) {
gfx_unregister_blended_texture(name); gfx_unregister_blended_texture(name);
} }

View file

@ -164,7 +164,6 @@ void Gfx_TextureCacheDelete(const uint8_t* addr);
void SaveManager_ThreadPoolWait(); void SaveManager_ThreadPoolWait();
void CheckTracker_OnMessageClose(); void CheckTracker_OnMessageClose();
int32_t GetGIID(uint32_t itemID); int32_t GetGIID(uint32_t itemID);
GetItemID RetrieveGetItemIDFromItemID(ItemID itemID); GetItemID RetrieveGetItemIDFromItemID(ItemID itemID);
RandomizerGet RetrieveRandomizerGetFromItemID(ItemID itemID); RandomizerGet RetrieveRandomizerGetFromItemID(ItemID itemID);

View file

@ -196,16 +196,17 @@ void SohMenu::AddMenuSettings() {
.RaceDisable(false) .RaceDisable(false)
.Options(CheckboxOptions().Tooltip("Disables the automatic re-centering of the camera when idle.")); .Options(CheckboxOptions().Tooltip("Disables the automatic re-centering of the camera when idle."));
AddWidget(path, "Accessible Audio Cues", WIDGET_CVAR_CHECKBOX) AddWidget(path, "Accessible Audio Cues", WIDGET_CVAR_CHECKBOX)
.CVar("gA11yAudioInteraction") .CVar("gA11yAudioInteraction")
.RaceDisable(false) .RaceDisable(false)
.Options(CheckboxOptions().Tooltip("Enables accessibility audio cues")); .Options(CheckboxOptions().Tooltip("Enables accessibility audio cues"));
AddWidget(path, "Extract Sfx", WIDGET_CVAR_CHECKBOX)
.CVar("gExtractSfx")
.RaceDisable(false)
.Options(CheckboxOptions().Tooltip("Extracts the sfx to be used in accessible audio cues, must be run once for "
"the audio cues to play then restart game"));
AddWidget(path, "Extract Sfx", WIDGET_CVAR_CHECKBOX)
.CVar("gExtractSfx")
.RaceDisable(false)
.Options(CheckboxOptions().Tooltip("Extracts the sfx to be used in accessible audio cues, must be run once for the audio cues to play then restart game"));
AddWidget(path, "EXPERIMENTAL", WIDGET_SEPARATOR_TEXT).Options(TextOptions().Color(Colors::Orange)); AddWidget(path, "EXPERIMENTAL", WIDGET_SEPARATOR_TEXT).Options(TextOptions().Color(Colors::Orange));
AddWidget(path, "ImGui Menu Scaling", WIDGET_CVAR_COMBOBOX) AddWidget(path, "ImGui Menu Scaling", WIDGET_CVAR_COMBOBOX)
.CVar(CVAR_SETTING("ImGuiScale")) .CVar(CVAR_SETTING("ImGuiScale"))