[HTML5] Fix errors when Mic is not allowed.

This commit is contained in:
Fabio Alessandrelli 2020-12-08 11:18:03 +01:00
parent a28d5e2be7
commit eb2152538c
3 changed files with 20 additions and 12 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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());
});
},