From b47b01409dcd4c925f4d56b8312de611abb87118 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 15 Nov 2024 19:32:24 -0300 Subject: [PATCH] reverbs are causing distortion --- src/audio/audio_heap.c | 3 +++ src/audio/audio_synthesis.c | 4 ++-- src/engine/fox_game.c | 16 +++++++++++----- src/engine/fox_std_lib.c | 17 +++++++++++++---- src/port/Engine.cpp | 23 +++++++++++++++-------- 5 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/audio/audio_heap.c b/src/audio/audio_heap.c index 0aa5eaca..8229d1df 100644 --- a/src/audio/audio_heap.c +++ b/src/audio/audio_heap.c @@ -720,6 +720,8 @@ void AudioHeap_Init(void) { gSynthReverbs[i].useReverb = 0; } + // LTODO: Reverbs are causing distortion. + /* gNumSynthReverbs = spec->numReverbs; for (i = 0; i < gNumSynthReverbs; i++) { settings = &spec->reverbSettings[i]; @@ -756,6 +758,7 @@ void AudioHeap_Init(void) { } } } + */ AudioLoad_InitSampleDmaBuffers(gNumNotes); gPreloadSampleStackTop = 0; D_8014C1B4 = 0x1000; diff --git a/src/audio/audio_synthesis.c b/src/audio/audio_synthesis.c index 4ced77ab..93ddd5e9 100644 --- a/src/audio/audio_synthesis.c +++ b/src/audio/audio_synthesis.c @@ -786,8 +786,8 @@ Acmd* AudioSynth_DoOneAudioUpdate(s16* aiBuf, s32 aiBufLen, Acmd* aList, s32 upd u8 sp84[0x3C]; NoteSubEu* temp_v0; s16 count; - s16 i; - s32 j; + s16 i = 0; + s32 j = 0; count = 0; if (gNumSynthReverbs == 0) { diff --git a/src/engine/fox_game.c b/src/engine/fox_game.c index 146bf415..f96b1d9c 100644 --- a/src/engine/fox_game.c +++ b/src/engine/fox_game.c @@ -358,6 +358,10 @@ extern u8 gAudioSpecId; extern int audBuffer; extern AudioBufferParameters gAudioBufferParams; extern int countermin; + +extern unsigned short samples_high; +extern unsigned short samples_low; + void Game_Update(void) { s32 i; u8 partialFill; @@ -626,8 +630,10 @@ void Game_Update(void) { } RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); - Graphics_DisplaySmallText(10, 190, 1.0f, 1.0f, "SEC:"); - Graphics_DisplaySmallNumber(90, 190, countermin); + Graphics_DisplaySmallText(10, 180, 1.0f, 1.0f, "SAM_HIGH:"); + Graphics_DisplaySmallNumber(90, 180, samples_high + audBuffer); + Graphics_DisplaySmallText(10, 190, 1.0f, 1.0f, "SAM_LOW:"); + Graphics_DisplaySmallNumber(90, 190, samples_low + audBuffer); Graphics_DisplaySmallText(10, 200, 1.0f, 1.0f, "AUDIOBUF:"); Graphics_DisplaySmallNumber(90, 200, audBuffer); Graphics_DisplaySmallText(10, 210, 1.0f, 1.0f, "AUDIOSPEC:"); @@ -635,9 +641,9 @@ void Game_Update(void) { Graphics_DisplaySmallText(10, 220, 1.0f, 1.0f, "TICKS:"); Graphics_DisplaySmallNumber(90, 220, gAudioBufferParams.ticksPerUpdate); if (gControllerPress[0].button & L_JPAD) { - //audBuffer-=10; - } else if (gControllerPress[0].button & R_JPAD) { - // audBuffer+=10; + // audBuffer-=1; + } else if (gControllerPress[0].button & R_JPAD) { + // audBuffer+=1; } } diff --git a/src/engine/fox_std_lib.c b/src/engine/fox_std_lib.c index b3c4e9c4..42efaf4a 100644 --- a/src/engine/fox_std_lib.c +++ b/src/engine/fox_std_lib.c @@ -31,7 +31,11 @@ void Lib_Texture_Scroll(u16* texture, s32 width, s32 height, u8 mode) { u16 tempPxl; s32 u; s32 v; - return; + + // LTODO: figure out why this function crashes in other levels + if ((gCurrentLevel != LEVEL_SOLAR)) { + return; + } // LTodo: [HD-Textures] This is broken switch (mode) { @@ -83,7 +87,12 @@ void Lib_Texture_Mottle(u16* dst, u16* src, u8 mode) { u8* dst8; u8* src8; s32 offset; - return; + + // LTODO: figure out why this function crashes in other levels + // CAUSES CORRUPTION!!!! + if ((gCurrentLevel != LEVEL_SOLAR) || (gGameState == GSTATE_MAP)) { + return; + } // LTodo: [HD-Textures] This is broken dst = LOAD_ASSET(dst); @@ -601,7 +610,7 @@ void Lib_TextureRect_CI8(Gfx** gfxPtr, u8* texture, u16* palette, u32 width, u32 } void Lib_TextureRect_RGBA16(Gfx** gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, - f32 yScale) { + f32 yScale) { gDPSetTileCustom((*gfxPtr)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, height, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -615,7 +624,7 @@ void Lib_TextureRect_RGBA16(Gfx** gfxPtr, u16* texture, u32 width, u32 height, f } void Lib_TextureRect_RGBA16_MirX(Gfx** gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, - f32 yScale) { + f32 yScale) { gDPSetTileCustom((*gfxPtr)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, height, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 3342717c..cb01a048 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -25,7 +25,7 @@ #include #include #include "audio/GameAudio.h" -//#include "sf64audio_provisional.h" +// #include "sf64audio_provisional.h" #include #include @@ -35,7 +35,7 @@ namespace fs = std::filesystem; -//extern "C" AudioBufferParameters gAudioBufferParams; +// extern "C" AudioBufferParameters gAudioBufferParams; #include @@ -72,7 +72,7 @@ GameEngine::GameEngine() { } this->context = - Ship::Context::CreateInstance("Starship", "ship", "starship.cfg.json", OTRFiles, {}, 3, { 44100, 1024, 2480 }); + Ship::Context::CreateInstance("Starship", "ship", "starship.cfg.json", OTRFiles, {}, 3, { 44100, 1024*2, 2480*2 }); auto loader = context->GetResourceManager()->GetResourceLoader(); loader->RegisterResourceFactory(std::make_shared(), RESOURCE_FORMAT_BINARY, @@ -158,12 +158,16 @@ void GameEngine::StartFrame() const { #define SAMPLES_LOW 720 #define NUM_AUDIO_CHANNELS 2 -extern "C" s32 audBuffer = 0; +extern "C" u16 audBuffer = 0; #include extern "C" volatile s32 gAudioTaskCountQ; int frames = 0; extern "C" int countermin = 0; + +extern "C" unsigned short samples_high = SAMPLES_HIGH; +extern "C" unsigned short samples_low = SAMPLES_LOW; + void GameEngine::HandleAudioThread() { #ifdef PIPE_DEBUG std::ofstream outfile("audio.bin", std::ios::binary | std::ios::app); @@ -179,13 +183,15 @@ void GameEngine::HandleAudioThread() { } } - //gVIsPerFrame = 2; + // gVIsPerFrame = 2; #define AUDIO_FRAMES_PER_UPDATE (gVIsPerFrame > 0 ? gVIsPerFrame : 1) std::unique_lock Lock(audio.mutex); int samples_left = AudioPlayerBuffered(); - u32 num_audio_samples = samples_left < AudioPlayerGetDesiredBuffered() ? SAMPLES_HIGH : SAMPLES_LOW; + u32 num_audio_samples = samples_left < AudioPlayerGetDesiredBuffered() + ? (((samples_high ) ) ) + : (((samples_low)) ); frames++; @@ -199,8 +205,9 @@ void GameEngine::HandleAudioThread() { num_audio_samples); } #ifdef PIPE_DEBUG - if(outfile.is_open()){ - outfile.write(reinterpret_cast(audio_buffer), num_audio_samples * (sizeof(int16_t) * NUM_AUDIO_CHANNELS * AUDIO_FRAMES_PER_UPDATE)); + if (outfile.is_open()) { + outfile.write(reinterpret_cast(audio_buffer), + num_audio_samples * (sizeof(int16_t) * NUM_AUDIO_CHANNELS * AUDIO_FRAMES_PER_UPDATE)); } #endif AudioPlayerPlayFrame((u8*) audio_buffer,