@@ -192,23 +192,49 @@ var LibraryWebAudio = {
192
192
#if WEBAUDIO_DEBUG
193
193
console . log ( `emscripten_start_wasm_audio_worklet_thread_async() addModule() completed` ) ;
194
194
#endif
195
- audioWorklet . bootstrapMessage = new AudioWorkletNode ( audioContext , 'em-bootstrap' , {
196
- processorOptions : {
197
- // Assign the loaded AudioWorkletGlobalScope a Wasm Worker ID so that
198
- // it can utilized its own TLS slots, and it is recognized to not be
199
- // the main browser thread.
200
- wwID : _wasmWorkersID ++ ,
195
+
196
+ #if MIN_FIREFOX_VERSION < 138 || MIN_CHROME_VERSION != TARGET_NOT_SUPPORTED || MIN_SAFARI_VERSION != TARGET_NOT_SUPPORTED
197
+ // If this browser does not support the up-to-date AudioWorklet standard
198
+ // that has a MessagePort over to the AudioWorklet, then polyfill that by
199
+ // instantiating a dummy AudioWorkletNode to get a MessagePort over.
200
+ // Firefox added support in https://hg-edge.mozilla.org/integration/autoland/rev/ab38a1796126f2b3fc06475ffc5a625059af59c1
201
+ // Chrome ticket: https://issues.chromium.org/issues/446920095
202
+ // Safari ticket: https://bugs.webkit.org/show_bug.cgi?id=299386
203
+ if ( ! audioWorklet [ 'port' ] ) {
204
+ audioWorklet [ 'port' ] = {
205
+ postMessage : ( msg ) => {
206
+ if ( msg [ '_boot' ] ) {
207
+ audioWorklet . bootstrapMessage = new AudioWorkletNode ( audioContext , 'em-bootstrap' , {
208
+ processorOptions : msg
209
+ } ) ;
210
+ audioWorklet . bootstrapMessage [ 'port' ] . onmessage = ( msg ) => {
211
+ audioWorklet [ 'port' ] . onmessage ( msg ) ;
212
+ }
213
+ } else {
214
+ audioWorklet . bootstrapMessage [ 'port' ] . postMessage ( msg ) ;
215
+ }
216
+ }
217
+ }
218
+ }
219
+ #endif
220
+
221
+ audioWorklet [ 'port' ] . postMessage ( {
222
+ // This is the bootstrap message to the Audio Worklet.
223
+ '_boot' : 1 ,
224
+ // Assign the loaded AudioWorkletGlobalScope a Wasm Worker ID so that
225
+ // it can utilized its own TLS slots, and it is recognized to not be
226
+ // the main browser thread.
227
+ wwID : _wasmWorkersID ++ ,
201
228
#if MINIMAL_RUNTIME
202
- wasm : Module [ 'wasm' ] ,
229
+ wasm : Module [ 'wasm' ] ,
203
230
#else
204
- wasm : wasmModule ,
231
+ wasm : wasmModule ,
205
232
#endif
206
- wasmMemory,
207
- stackLowestAddress, // sb = stack base
208
- stackSize, // sz = stack size
209
- }
233
+ wasmMemory,
234
+ stackLowestAddress, // sb = stack base
235
+ stackSize, // sz = stack size
210
236
} ) ;
211
- audioWorklet . bootstrapMessage . port . onmessage = _EmAudioDispatchProcessorCallback ;
237
+ audioWorklet [ ' port' ] . onmessage = _EmAudioDispatchProcessorCallback ;
212
238
{ { { makeDynCall ( 'viip' , 'callback' ) } } } ( contextHandle , 1 /*EM_TRUE*/ , userData ) ;
213
239
} ) . catch ( audioWorkletCreationFailed ) ;
214
240
} ,
@@ -256,7 +282,7 @@ var LibraryWebAudio = {
256
282
console . log ( `emscripten_create_wasm_audio_worklet_processor_async() creating a new AudioWorklet processor with name ${ processorName } ` ) ;
257
283
#endif
258
284
259
- EmAudio [ contextHandle ] . audioWorklet . bootstrapMessage . port . postMessage ( {
285
+ EmAudio [ contextHandle ] . audioWorklet [ ' port' ] . postMessage ( {
260
286
// Deliberately mangled and short names used here ('_wpn', the 'Worklet
261
287
// Processor Name' used as a 'key' to verify the message type so as to
262
288
// not get accidentally mixed with user submitted messages, the remainder
@@ -342,11 +368,11 @@ var LibraryWebAudio = {
342
368
emscripten_current_thread_is_audio_worklet : ( ) => ENVIRONMENT_IS_AUDIO_WORKLET ,
343
369
344
370
emscripten_audio_worklet_post_function_v : ( audioContext , funcPtr ) => {
345
- ( audioContext ? EmAudio [ audioContext ] . audioWorklet . bootstrapMessage . port : messagePort ) . postMessage ( { '_wsc' : funcPtr , args : [ ] } ) ; // "WaSm Call"
371
+ ( audioContext ? EmAudio [ audioContext ] . audioWorklet [ ' port' ] : port ) . postMessage ( { '_wsc' : funcPtr , args : [ ] } ) ; // "WaSm Call"
346
372
} ,
347
373
348
374
$emscripten_audio_worklet_post_function_1 : ( audioContext , funcPtr , arg0 ) => {
349
- ( audioContext ? EmAudio [ audioContext ] . audioWorklet . bootstrapMessage . port : messagePort ) . postMessage ( { '_wsc' : funcPtr , args : [ arg0 ] } ) ; // "WaSm Call"
375
+ ( audioContext ? EmAudio [ audioContext ] . audioWorklet [ ' port' ] : port ) . postMessage ( { '_wsc' : funcPtr , args : [ arg0 ] } ) ; // "WaSm Call"
350
376
} ,
351
377
352
378
emscripten_audio_worklet_post_function_vi__deps : [ '$emscripten_audio_worklet_post_function_1' ] ,
@@ -360,7 +386,7 @@ var LibraryWebAudio = {
360
386
} ,
361
387
362
388
$emscripten_audio_worklet_post_function_2 : ( audioContext , funcPtr , arg0 , arg1 ) => {
363
- ( audioContext ? EmAudio [ audioContext ] . audioWorklet . bootstrapMessage . port : messagePort ) . postMessage ( { '_wsc' : funcPtr , args : [ arg0 , arg1 ] } ) ; // "WaSm Call"
389
+ ( audioContext ? EmAudio [ audioContext ] . audioWorklet [ ' port' ] : port ) . postMessage ( { '_wsc' : funcPtr , args : [ arg0 , arg1 ] } ) ; // "WaSm Call"
364
390
} ,
365
391
366
392
emscripten_audio_worklet_post_function_vii__deps : [ '$emscripten_audio_worklet_post_function_2' ] ,
@@ -374,7 +400,7 @@ var LibraryWebAudio = {
374
400
} ,
375
401
376
402
$emscripten_audio_worklet_post_function_3 : ( audioContext , funcPtr , arg0 , arg1 , arg2 ) => {
377
- ( audioContext ? EmAudio [ audioContext ] . audioWorklet . bootstrapMessage . port : messagePort ) . postMessage ( { '_wsc' : funcPtr , args : [ arg0 , arg1 , arg2 ] } ) ; // "WaSm Call"
403
+ ( audioContext ? EmAudio [ audioContext ] . audioWorklet [ ' port' ] : port ) . postMessage ( { '_wsc' : funcPtr , args : [ arg0 , arg1 , arg2 ] } ) ; // "WaSm Call"
378
404
} ,
379
405
emscripten_audio_worklet_post_function_viii__deps : [ '$emscripten_audio_worklet_post_function_3' ] ,
380
406
emscripten_audio_worklet_post_function_viii : ( audioContext , funcPtr , arg0 , arg1 , arg2 ) => {
@@ -394,7 +420,7 @@ var LibraryWebAudio = {
394
420
assert ( UTF8ToString ( sigPtr ) [ 0 ] != 'v' , 'Do NOT specify the return argument in the signature string for a call to emscripten_audio_worklet_post_function_sig(), just pass the function arguments.' ) ;
395
421
assert ( varargs ) ;
396
422
#endif
397
- ( audioContext ? EmAudio [ audioContext ] . audioWorklet . bootstrapMessage . port : messagePort ) . postMessage ( { '_wsc' : funcPtr , args : readEmAsmArgs ( sigPtr , varargs ) } ) ;
423
+ ( audioContext ? EmAudio [ audioContext ] . audioWorklet [ ' port' ] : port ) . postMessage ( { '_wsc' : funcPtr , args : readEmAsmArgs ( sigPtr , varargs ) } ) ;
398
424
}
399
425
} ;
400
426
0 commit comments