Fix temporary audio distortions affecting some Macs and iOS devices

This commit is contained in:
Lior Halphon
2024-05-27 23:02:54 +03:00
parent 5408fe8dd2
commit e5e9cf145a
2 changed files with 13 additions and 11 deletions

View File

@@ -453,7 +453,8 @@ static void debuggerReloadCallback(GB_gameboy_t *gb)
if (_audioBufferPosition < nFrames) {
_audioBufferNeeded = nFrames;
[_audioLock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.125]];
[_audioLock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:(double)(_audioBufferNeeded - _audioBufferPosition) / sampleRate]];
_audioBufferNeeded = 0;
}
if (_stopping || GB_debugger_is_stopped(&_gb)) {
@@ -466,7 +467,7 @@ static void debuggerReloadCallback(GB_gameboy_t *gb)
// Not enough audio
memset(buffer, 0, (nFrames - _audioBufferPosition) * sizeof(*buffer));
memcpy(buffer, _audioBuffer, _audioBufferPosition * sizeof(*buffer));
_audioBufferPosition = 0;
// Do not reset the audio position to avoid more underflows
}
else if (_audioBufferPosition < nFrames + 4800) {
memcpy(buffer, _audioBuffer, nFrames * sizeof(*buffer));

View File

@@ -736,7 +736,8 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp)
if (_audioBufferPosition < nFrames) {
_audioBufferNeeded = nFrames;
[_audioLock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.125]];
[_audioLock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:(double)(_audioBufferNeeded - _audioBufferPosition) / sampleRate]];
_audioBufferNeeded = 0;
}
if (_stopping) {
@@ -749,7 +750,7 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp)
// Not enough audio
memset(buffer, 0, (nFrames - _audioBufferPosition) * sizeof(*buffer));
memcpy(buffer, _audioBuffer, _audioBufferPosition * sizeof(*buffer));
_audioBufferPosition = 0;
// Do not reset the audio position to avoid more underflows
}
else if (_audioBufferPosition < nFrames + 4800) {
memcpy(buffer, _audioBuffer, nFrames * sizeof(*buffer));