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;