mirror of
https://github.com/CTCaer/RetroArch.git
synced 2025-02-24 05:31:15 +00:00
fix rwebaudio time drift
fixes audio getting stuck in an always fast state
This commit is contained in:
parent
19facdb066
commit
0256156a6b
@ -41,8 +41,8 @@ var LibraryRWebAudio = {
|
||||
|
||||
fillBuffer: function(buf, samples) {
|
||||
var count = 0;
|
||||
var leftBuffer = RA.buffers[RA.bufIndex].getChannelData(0);
|
||||
var rightBuffer = RA.buffers[RA.bufIndex].getChannelData(1);
|
||||
const leftBuffer = RA.buffers[RA.bufIndex].getChannelData(0);
|
||||
const rightBuffer = RA.buffers[RA.bufIndex].getChannelData(1);
|
||||
while (samples && RA.bufOffset !== RA.BUFFER_SIZE) {
|
||||
leftBuffer[RA.bufOffset] = {{{ makeGetValue('buf', 'count * 8', 'float') }}};
|
||||
rightBuffer[RA.bufOffset] = {{{ makeGetValue('buf', 'count * 8 + 4', 'float') }}};
|
||||
@ -74,7 +74,7 @@ var LibraryRWebAudio = {
|
||||
block: function() {
|
||||
do {
|
||||
RA.process();
|
||||
} while (RA.bufIndex === RA.numBuffers - 1);
|
||||
} while (RA.bufIndex === RA.numBuffers);
|
||||
}
|
||||
},
|
||||
|
||||
@ -112,16 +112,17 @@ var LibraryRWebAudio = {
|
||||
var count = 0;
|
||||
|
||||
while (samples) {
|
||||
if (RA.bufIndex === RA.numBuffers) {
|
||||
if (RA.nonblock) break;
|
||||
else RA.block();
|
||||
}
|
||||
|
||||
var fill = RA.fillBuffer(buf, samples);
|
||||
samples -= fill;
|
||||
count += fill;
|
||||
buf += fill * 8;
|
||||
|
||||
if (RA.bufOffset === RA.BUFFER_SIZE) {
|
||||
if (RA.bufIndex === RA.numBuffers - 1) {
|
||||
if (RA.nonblock) break;
|
||||
else RA.block();
|
||||
}
|
||||
RA.queueAudio();
|
||||
}
|
||||
}
|
||||
@ -146,7 +147,6 @@ var LibraryRWebAudio = {
|
||||
RWebAudioFree: function() {
|
||||
RA.bufIndex = 0;
|
||||
RA.bufOffset = 0;
|
||||
return;
|
||||
},
|
||||
|
||||
RWebAudioBufferSize: function() {
|
||||
@ -156,6 +156,12 @@ var LibraryRWebAudio = {
|
||||
RWebAudioWriteAvail: function() {
|
||||
RA.process();
|
||||
return ((RA.numBuffers - RA.bufIndex) * RA.BUFFER_SIZE - RA.bufOffset) * 8;
|
||||
},
|
||||
|
||||
RWebAudioRecalibrateTime: function() {
|
||||
if (RA.startTime) {
|
||||
RA.startTime = window['performance']['now']() - RA.context.currentTime * 1000;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -44,6 +44,8 @@
|
||||
#include "../../tasks/tasks_internal.h"
|
||||
#include "../../file_path_special.h"
|
||||
|
||||
void RWebAudioRecalibrateTime(void);
|
||||
|
||||
static unsigned emscripten_fullscreen_reinit;
|
||||
|
||||
static EM_BOOL emscripten_fullscreenchange_cb(int event_type,
|
||||
@ -64,6 +66,8 @@ static void emscripten_mainloop(void)
|
||||
unsigned sleep_ms = 0;
|
||||
int ret;
|
||||
|
||||
RWebAudioRecalibrateTime();
|
||||
|
||||
if (emscripten_fullscreen_reinit != 0)
|
||||
{
|
||||
if (--emscripten_fullscreen_reinit == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user