From 0e24ea1ca99a1f9d8096d04ec7da888e382a7d0b Mon Sep 17 00:00:00 2001 From: Frank-74 Date: Tue, 4 Dec 2018 03:54:44 +0000 Subject: [PATCH 1/3] [Audio] Code cleanup and slightly smaller buffer. --- Source/Project64-audio/AudioMain.cpp | 31 +++++++++------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/Source/Project64-audio/AudioMain.cpp b/Source/Project64-audio/AudioMain.cpp index 34eeb5dba..a62b5d11e 100644 --- a/Source/Project64-audio/AudioMain.cpp +++ b/Source/Project64-audio/AudioMain.cpp @@ -85,14 +85,15 @@ EXPORT void CALL AiDacrateChanged(int SystemType) WriteTrace(TraceAudioInterface, TraceNotice, "Unknown/reserved bits in AI_DACRATE_REG set. 0x%08X", *g_AudioInfo.AI_DACRATE_REG); } - uint32_t video_clock = 0; + uint32_t video_clock = 0; int32_t BufferSize = 0; double audio_clock = 0; double framerate = 29.97; + switch (SystemType) { case SYSTEM_NTSC: video_clock = 48681812; break; - case SYSTEM_PAL: video_clock = 49656530; break; + case SYSTEM_PAL: video_clock = 49656530; framerate = 25; break; case SYSTEM_MPAL: video_clock = 48628316; break; } - uint32_t Frequency = video_clock / (g_Dacrate + 1); + uint32_t Frequency = (video_clock / (g_Dacrate + 1)); if (Frequency < 4000) { @@ -101,28 +102,16 @@ EXPORT void CALL AiDacrateChanged(int SystemType) } else { - int32_t BufferSize = 0; double audio_clock = 0; double framerate = 0; - - if (g_settings->FPSBuffer() == true) + if (g_settings->FPSBuffer() == false && SystemType != SYSTEM_PAL) { - framerate = 59.94004; - if (SystemType == SYSTEM_PAL) { framerate = 50; } + framerate = 30.475; // Needed for Body Harvest (U) } - else + if (g_settings->TinyBuffer() == false) { - framerate = 60.95; // Needed for Body Harvest (U) - if (SystemType == SYSTEM_PAL) { framerate = 50.79166; } + framerate = (framerate / 2); } - if (g_settings->TinyBuffer() == true) - { - audio_clock = ((video_clock / framerate) * 2); - } - else - { - audio_clock = ((video_clock / framerate) * 4); - } - - BufferSize = (int32_t)audio_clock / (g_Dacrate) + 1 & ~0x1; + audio_clock = (video_clock / framerate); + BufferSize = (int32_t)(audio_clock / (g_Dacrate + 1)) & ~0x1; g_SoundDriver->AI_SetFrequency(Frequency, BufferSize); } } From af6c354efc1b24c5dc83183525d3d0fff0c98535 Mon Sep 17 00:00:00 2001 From: Frank-74 Date: Tue, 4 Dec 2018 05:14:35 +0000 Subject: [PATCH 2/3] [Audio] 30 / 1.001 is the exact NTSC fps 30 / 1.001 = 29.97002997002997002997002997003 --- Source/Project64-audio/AudioMain.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Project64-audio/AudioMain.cpp b/Source/Project64-audio/AudioMain.cpp index a62b5d11e..53bd31467 100644 --- a/Source/Project64-audio/AudioMain.cpp +++ b/Source/Project64-audio/AudioMain.cpp @@ -85,7 +85,8 @@ EXPORT void CALL AiDacrateChanged(int SystemType) WriteTrace(TraceAudioInterface, TraceNotice, "Unknown/reserved bits in AI_DACRATE_REG set. 0x%08X", *g_AudioInfo.AI_DACRATE_REG); } - uint32_t video_clock = 0; int32_t BufferSize = 0; double audio_clock = 0; double framerate = 29.97; + uint32_t video_clock = 0; int32_t BufferSize = 0; + double audio_clock = 0; double framerate = (30 / 1.001); switch (SystemType) { From 9936933f6849dea47151334e5aa47b64357c217e Mon Sep 17 00:00:00 2001 From: Frank-74 Date: Tue, 4 Dec 2018 06:32:31 +0000 Subject: [PATCH 3/3] [Audio] Fix typo in buffersize It caused clicks in goldeneye / pd without +1. --- Source/Project64-audio/AudioMain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Project64-audio/AudioMain.cpp b/Source/Project64-audio/AudioMain.cpp index 53bd31467..7bfb4036c 100644 --- a/Source/Project64-audio/AudioMain.cpp +++ b/Source/Project64-audio/AudioMain.cpp @@ -112,7 +112,7 @@ EXPORT void CALL AiDacrateChanged(int SystemType) framerate = (framerate / 2); } audio_clock = (video_clock / framerate); - BufferSize = (int32_t)(audio_clock / (g_Dacrate + 1)) & ~0x1; + BufferSize = (int32_t)(audio_clock / (g_Dacrate + 1)) + 1 & ~0x1; g_SoundDriver->AI_SetFrequency(Frequency, BufferSize); } }