Browse Source

[HTML5] Fix errors when Mic is not allowed.

Fabio Alessandrelli 4 years ago
parent
commit
0a67b23913

+ 3 - 1
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;
 }
 

+ 1 - 1
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

+ 16 - 10
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());
 		});
 	},