Use dummy driver when JS AudioContext is unavailable.

This commit is contained in:
Fabio Alessandrelli 2020-06-29 18:51:53 +02:00
parent 1a637b07b1
commit 7a5e10b8a9
5 changed files with 40 additions and 15 deletions

View file

@ -36,6 +36,15 @@
AudioDriverJavaScript *AudioDriverJavaScript::singleton = nullptr;
bool AudioDriverJavaScript::is_available() {
return EM_ASM_INT({
if (!(window.AudioContext || window.webkitAudioContext)) {
return 0;
}
return 1;
}) != 0;
}
const char *AudioDriverJavaScript::get_name() const {
return "JavaScript";
}
@ -207,12 +216,14 @@ void AudioDriverJavaScript::finish_async() {
/* clang-format off */
EM_ASM({
var ref = Module.IDHandler.get($0);
const id = $0;
var ref = Module.IDHandler.get(id);
Module.async_finish.push(new Promise(function(accept, reject) {
if (!ref) {
console.log("Ref not found!", $0, Module.IDHandler);
console.log("Ref not found!", id, Module.IDHandler);
setTimeout(accept, 0);
} else {
Module.IDHandler.remove(id);
const context = ref['context'];
// Disconnect script and input.
ref['script'].disconnect();
@ -226,7 +237,6 @@ void AudioDriverJavaScript::finish_async() {
});
}
}));
Module.IDHandler.remove($0);
}, id);
/* clang-format on */
}
@ -293,9 +303,5 @@ Error AudioDriverJavaScript::capture_stop() {
}
AudioDriverJavaScript::AudioDriverJavaScript() {
_driver_id = 0;
internal_buffer = nullptr;
buffer_length = 0;
singleton = this;
}