summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--soh/include/z64audio.h4
-rw-r--r--soh/soh/OTRGlobals.cpp2
-rw-r--r--soh/src/code/audio_load.c4
-rw-r--r--soh/src/code/z_kankyo.c11
4 files changed, 16 insertions, 5 deletions
diff --git a/soh/include/z64audio.h b/soh/include/z64audio.h
index 9a50c1510..b1b3bb06e 100644
--- a/soh/include/z64audio.h
+++ b/soh/include/z64audio.h
@@ -18,7 +18,9 @@
#define AIBUF_LEN 0x580
-#define CALC_RESAMPLE_FREQ(sampleRate) (sampleRate / (s32)gAudioContext.audioBufferParameters.frequency)
+#define CALC_RESAMPLE_FREQ(sampleRate) ((float)sampleRate / (s32)gAudioContext.audioBufferParameters.frequency)
+
+extern bool gUseLegacySD;
typedef enum {
/* 0 */ ADSR_STATE_DISABLED,
diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp
index 5afd97fb2..d43818acf 100644
--- a/soh/soh/OTRGlobals.cpp
+++ b/soh/soh/OTRGlobals.cpp
@@ -639,7 +639,7 @@ extern "C" SoundFontSample* ResourceMgr_LoadAudioSample(const char* path)
// OTRTODO: Grab loop data from wav
sampleC->loop = (AdpcmLoop*)malloc(sizeof(AdpcmLoop));
sampleC->loop->start = 0;
- sampleC->loop->end = sampleC->size / 2;
+ sampleC->loop->end = sampleC->size / 2; // OTRTODO: This calculation is probably incorrect... Sometimes it goes past the sample, sometimes it stops too early...
sampleC->loop->count = 0;
sampleC->sampleRateMagicValue = 'RIFF';
sampleC->sampleRate = sampleRate;
diff --git a/soh/src/code/audio_load.c b/soh/src/code/audio_load.c
index 0732d2fa3..3056a442b 100644
--- a/soh/src/code/audio_load.c
+++ b/soh/src/code/audio_load.c
@@ -1421,6 +1421,10 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
uintptr_t bankStart = ResourceMgr_LoadFileRaw(_AudiobankSegmentRomStart);
uintptr_t tableStart = ResourceMgr_LoadFileRaw(_AudiotableSegmentRomStart);
+ // If we have the old audioseq files present (and this is a 32-bit build), use the legacy audio system
+ if (seqStart != NULL && bankStart != NULL && tableStart != NULL)
+ gUseLegacySD = true;
+
fontStart = bankStart;
AudioLoad_InitTable(gAudioContext.sequenceTable, seqStart, 0);
diff --git a/soh/src/code/z_kankyo.c b/soh/src/code/z_kankyo.c
index 9f7518374..6f1fc0c8f 100644
--- a/soh/src/code/z_kankyo.c
+++ b/soh/src/code/z_kankyo.c
@@ -2093,9 +2093,14 @@ void func_80075B44(GlobalContext* globalCtx) {
case 7:
Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_1 << 4 | NATURE_CHANNEL_CRITTER_3,
CHANNEL_IO_PORT_1, 0);
- if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0) {
- Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_4 << 4 | NATURE_CHANNEL_CRITTER_5,
- CHANNEL_IO_PORT_1, 1);
+ if (globalCtx->envCtx.unk_EE[0] == 0 && globalCtx->envCtx.unk_F2[0] == 0)
+ {
+ // OTRTODO: This is where corrupt audio happens. Commenting this out seems to not introduce any side effects?
+ // Further investigation is needed...
+
+ if (gUseLegacySD)
+ Audio_SetNatureAmbienceChannelIO(NATURE_CHANNEL_CRITTER_4 << 4 | NATURE_CHANNEL_CRITTER_5,
+ CHANNEL_IO_PORT_1, 1);
}
globalCtx->envCtx.unk_E0++;
break;