Fix Audio Driver (Emscripten)

Fix sound crack in Fierfox, fix core frozen when load rom
This commit is contained in:
dalter 2016-08-02 20:53:23 +03:00 committed by GitHub
parent fb2b53e589
commit 0026a5d08e

View File

@ -1,9 +1,9 @@
"use strict"; //"use strict";
var LibraryRWebAudio = { var LibraryRWebAudio = {
$RA__deps: ['$Browser', 'usleep'], $RA__deps: ['$Browser', 'usleep'],
$RA: { $RA: {
BUFFER_SIZE: 256, BUFFER_SIZE: 2048,
context: null, context: null,
buffers: [], buffers: [],
@ -11,33 +11,19 @@ var LibraryRWebAudio = {
bufIndex: 0, bufIndex: 0,
bufOffset: 0, bufOffset: 0,
startTime: 0, startTime: 0,
performance: null,
nonblock: false, nonblock: false,
performanceSupported: false, currentTimeWorkaround: false,
setStartTime: function() { setStartTime: function() {
RA.performance = window['performance'] || window['webkitPerformance'] || window['msPerformance'] || window['mozPerformance'];
if (RA.performance) {
RA.performanceSupported = true;
} else {
RA.performanceSupported = false;
}
if (RA.context.currentTime) { if (RA.context.currentTime) {
var now = RA.performanceSupported ? RA.performance.now() : Date.now(); RA.startTime = window['performance']['now']() - RA.context.currentTime * 1000;
RA.startTime = now - RA.context.currentTime * 1000; Module["resumeMainLoop"]();
Module["resumeMainLoop"]; } else window['setTimeout'](RA.setStartTime, 0);
} else {
window.setTimeout(RA.setStartTime, 0);
}
}, },
getCurrentPerfTime: function() { getCurrentPerfTime: function() {
if (true === RA.performanceSupported) { if (RA.startTime) return (window['performance']['now']() - RA.startTime) / 1000;
return (RA.performance.now() - RA.startTime) / 1000; else throw 'getCurrentPerfTime() called before start time set';
} else {
return (Date.now() - RA.startTime) / 1000;
}
}, },
process: function(queueBuffers) { process: function(queueBuffers) {
@ -92,14 +78,11 @@ var LibraryRWebAudio = {
}, },
RWebAudioInit: function(latency) { RWebAudioInit: function(latency) {
Module.pauseMainLoop(); var ac = window['AudioContext'] || window['webkitAudioContext'];
if (!RA.context) {
var ac = window['AudioContext'] || window['webkitAudioContext']; if (!ac) return 0;
if (!ac) {
return 0; RA.context = new ac();
}
RA.context = new ac();
}
RA.numBuffers = ((latency * RA.context.sampleRate) / (1000 * RA.BUFFER_SIZE))|0; RA.numBuffers = ((latency * RA.context.sampleRate) / (1000 * RA.BUFFER_SIZE))|0;
if (RA.numBuffers < 2) RA.numBuffers = 2; if (RA.numBuffers < 2) RA.numBuffers = 2;
@ -110,8 +93,8 @@ var LibraryRWebAudio = {
RA.startTime = 0; RA.startTime = 0;
// chrome hack to get currentTime running // chrome hack to get currentTime running
RA.context.createGain(); RA.context.createGain();
RA.setStartTime(); window['setTimeout'](RA.setStartTime, 0);
Module["pauseMainLoop"]();
return 1; return 1;
}, },