Commit 6abd242b935ce6ad94b05be7c498bde91f3c940b

Philipp Wiesemann 2015-02-14T00:16:27

Emscripten: Fixed throwing JavaScript exception if no audio context available. Handling the error in C provides the possibility to just continue without audio.

diff --git a/src/audio/emscripten/SDL_emscriptenaudio.c b/src/audio/emscripten/SDL_emscriptenaudio.c
index d9334da..f1ae929 100644
--- a/src/audio/emscripten/SDL_emscriptenaudio.c
+++ b/src/audio/emscripten/SDL_emscriptenaudio.c
@@ -157,6 +157,7 @@ Emscripten_OpenDevice(_THIS, const char *devname, int iscapture)
     SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format);
     int i;
     float f;
+    int result;
 
     while ((!valid_format) && (test_format)) {
         switch (test_format) {
@@ -185,7 +186,7 @@ Emscripten_OpenDevice(_THIS, const char *devname, int iscapture)
     /* based on parts of library_sdl.js */
 
     /* create context (TODO: this puts stuff in the global namespace...)*/
-    EM_ASM({
+    result = EM_ASM_INT_V({
         if(typeof(SDL2) === 'undefined')
             SDL2 = {};
 
@@ -198,10 +199,14 @@ Emscripten_OpenDevice(_THIS, const char *devname, int iscapture)
             } else if (typeof(webkitAudioContext) !== 'undefined') {
                 SDL2.audioContext = new webkitAudioContext();
             } else {
-                throw 'Web Audio API is not available!';
+                return -1;
             }
         }
+        return 0;
     });
+    if (result < 0) {
+        return SDL_SetError("Web Audio API is not available!");
+    }
 
     /* limit to native freq */
     int sampleRate = EM_ASM_INT_V({