reverb bugfix

This commit is contained in:
gheskett
2021-08-03 05:15:56 -05:00
parent 2532de0ac6
commit 863aa2235c
2 changed files with 20 additions and 16 deletions

View File

@@ -1232,10 +1232,10 @@ void audio_reset_session(void) {
gSamplesPerFrameTarget = ALIGN16(gAiFrequency / 60);
gReverbDownsampleRate = preset->reverbDownsampleRate;
#ifdef BETTER_REVERB
if (gIsConsole)
reverbConsole = betterReverbConsoleDownsample;
if (IO_READ(DPC_PIPEBUSY_REG) == 0)
reverbConsole = 2; // Setting this to 1 will crash unless you increase the better reverb buffer (in which case it will just freeze instead)
else
reverbConsole = 2;
reverbConsole = betterReverbConsoleDownsample; // Console!
if (reverbConsole <= 0) {
reverbConsole = 1;
@@ -1245,9 +1245,9 @@ void audio_reset_session(void) {
consoleBetterReverb = TRUE;
}
if (gReverbDownsampleRate < reverbConsole)
gReverbDownsampleRate = reverbConsole;
reverbWindowSize /= (1 << (gReverbDownsampleRate - 1));
if (gReverbDownsampleRate < (1 << (reverbConsole - 1)))
gReverbDownsampleRate = (1 << (reverbConsole - 1));
reverbWindowSize /= gReverbDownsampleRate;
#endif
switch (gReverbDownsampleRate) {

View File

@@ -46,15 +46,15 @@ struct VolumeChange {
/* ----------------------------------------------------------REVERB PARAMETERS----------------------------------------------------------------- */
s16 *lastSamplePtrL;
s16 *lastSamplePtrR;
s32 gReverbRevIndex = 0x9A; // Affects decay time mostly; can be messed with at any time
s32 gReverbGainIndex = 0xA6; // Affects signal retransmitted back into buffers; can be messed with at any time
s32 gReverbWetSignal = 0xF3; // Amount of reverb specific output in final signal; can be messed with at any time
s32 gReverbDrySignal = 0x26; // Amount of original input in final signal (large values can cause terrible feedback!); can be messed with at any time
s32 gReverbRevIndex = 0x9A; // Affects decay time mostly; can be messed with
s32 gReverbGainIndex = 0xA6; // Affects signal retransmitted back into buffers; can be messed with
s32 gReverbWetSignal = 0xF3; // Amount of reverb specific output in final signal; can be messed with
s32 gReverbDrySignal = 0x26; // Amount of original input in final signal (large values can cause terrible feedback!); can be messed with
u32 delays[NUM_ALLPASS] = { // These values affect reverb delays, bigger values result in fatter echo (and more memory); can be messed with, but must be cumulatively smaller than BETTER_REVERB_SIZE/8
// These values affect reverb delays, bigger values result in fatter echo (and more memory); can be messed with, but must be cumulatively smaller than BETTER_REVERB_SIZE/8.
// If setting reverb downsample value to 1 (which currently does not work anyway), this must be BETTER_REVERB_SIZE/16.
// These values should never be changed
u32 delays[NUM_ALLPASS] = {
1080, 1352, 1200,
1384, 1048, 1352,
1200, 1232, 1432,
@@ -77,8 +77,12 @@ u32 allpassIdx[2][NUM_ALLPASS] = {
s32 tmpBuf[NUM_ALLPASS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
s32 ***delayBufs;
u8 consoleBetterReverb = TRUE;
s8 betterReverbConsoleDownsample = 3; // Set this to 4 if game is running too slow; set this to -1 to vanilla reverb on console only
u8 consoleBetterReverb = TRUE; // Do not change this line unless you know what you're doing; Please use the variable below instead.
// Setting this to 4 completely breaks game sound, so set this value to -1 to use vanilla reverb for console if this is too slow.
// You can change this value back and forth before audio_reset_session is called if different levels can tolerate the demand better than others.
// A higher downsample value hits the game's frequency limit sooner, which may cause the reverb to be off pitch. This is a vanilla level issue (and counter intuitive).
s8 betterReverbConsoleDownsample = 3;
/* --------------------------------------------------------END REVERB PARAMETERS--------------------------------------------------------------- */