From eb2152538c0549146341b16251f4abcfb79df1f5 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Tue, 8 Dec 2020 11:18:03 +0100 Subject: [PATCH] [HTML5] Fix errors when Mic is not allowed. --- .../javascript/audio_driver_javascript.cpp | 4 ++- platform/javascript/godot_audio.h | 2 +- .../javascript/js/libs/library_godot_audio.js | 26 ++++++++++++------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/platform/javascript/audio_driver_javascript.cpp b/platform/javascript/audio_driver_javascript.cpp index dd982bc3a8b..78fbed6d0fb 100644 --- a/platform/javascript/audio_driver_javascript.cpp +++ b/platform/javascript/audio_driver_javascript.cpp @@ -189,7 +189,9 @@ Error AudioDriverJavaScript::capture_start() { lock(); input_buffer_init(buffer_length); unlock(); - godot_audio_capture_start(); + if (godot_audio_capture_start()) { + return FAILED; + } return OK; } diff --git a/platform/javascript/godot_audio.h b/platform/javascript/godot_audio.h index 0ba68497156..aeb234269e3 100644 --- a/platform/javascript/godot_audio.h +++ b/platform/javascript/godot_audio.h @@ -41,7 +41,7 @@ extern int godot_audio_is_available(); extern int godot_audio_init(int p_mix_rate, int p_latency, void (*_state_cb)(int), void (*_latency_cb)(float)); extern void godot_audio_resume(); -extern void godot_audio_capture_start(); +extern int godot_audio_capture_start(); extern void godot_audio_capture_stop(); // Worklet diff --git a/platform/javascript/js/libs/library_godot_audio.js b/platform/javascript/js/libs/library_godot_audio.js index 416e987513c..d01b8d887bf 100644 --- a/platform/javascript/js/libs/library_godot_audio.js +++ b/platform/javascript/js/libs/library_godot_audio.js @@ -77,28 +77,37 @@ const GodotAudio = { create_input: function (callback) { if (GodotAudio.input) { - return; // Already started. + return 0; // Already started. } function gotMediaInput(stream) { - GodotAudio.input = GodotAudio.ctx.createMediaStreamSource(stream); - callback(GodotAudio.input); + try { + GodotAudio.input = GodotAudio.ctx.createMediaStreamSource(stream); + callback(GodotAudio.input); + } catch (e) { + GodotRuntime.error('Failed creaating input.', e); + } } - if (navigator.mediaDevices.getUserMedia) { + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({ 'audio': true, }).then(gotMediaInput, function (e) { - GodotRuntime.print(e); + GodotRuntime.error('Error getting user media.', e); }); } else { if (!navigator.getUserMedia) { navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia; } + if (!navigator.getUserMedia) { + GodotRuntime.error('getUserMedia not available.'); + return 1; + } navigator.getUserMedia({ 'audio': true, }, gotMediaInput, function (e) { GodotRuntime.print(e); }); } + return 0; }, close_async: function (resolve, reject) { @@ -161,12 +170,9 @@ const GodotAudio = { }, godot_audio_capture_start__proxy: 'sync', - godot_audio_capture_start__sig: 'v', + godot_audio_capture_start__sig: 'i', godot_audio_capture_start: function () { - if (GodotAudio.input) { - return; // Already started. - } - GodotAudio.create_input(function (input) { + return GodotAudio.create_input(function (input) { input.connect(GodotAudio.driver.get_node()); }); },