Skip to content

Commit 5569cc9

Browse files
committed
Made the call generic to work with any audio node
1 parent 3aafd4b commit 5569cc9

File tree

7 files changed

+17
-14
lines changed

7 files changed

+17
-14
lines changed

site/source/docs/api_reference/wasm_audio_worklets.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ which resumes the audio context when the user clicks on the DOM Canvas element t
126126
"noise-generator", &options, &GenerateNoise, 0);
127127
128128
// Connect it to audio context destination
129-
emscripten_audio_worklet_node_connect(audioContext, wasmAudioWorklet);
129+
emscripten_audio_node_connect(wasmAudioWorklet, audioContext, 0, 0);
130130
131131
// Resume context on mouse click
132132
emscripten_set_click_callback("canvas", (void*)audioContext, 0, OnCanvasClick);

src/library_sigs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ sigs = {
587587
emscripten_atomic_wait_async__sig: 'ipippd',
588588
emscripten_atomics_is_lock_free__sig: 'ii',
589589
emscripten_audio_context_state__sig: 'ii',
590-
emscripten_audio_worklet_node_connect__sig: 'vii',
590+
emscripten_audio_node_connect__sig: 'viiii',
591591
emscripten_audio_worklet_post_function_sig__sig: 'vippp',
592592
emscripten_audio_worklet_post_function_v__sig: 'vip',
593593
emscripten_audio_worklet_post_function_vd__sig: 'vipd',

src/library_webaudio.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -293,17 +293,19 @@ let LibraryWebAudio = {
293293
},
294294
#endif // ~AUDIO_WORKLET
295295

296-
emscripten_audio_worklet_node_connect: (contextHandle, workletNode) => {
296+
emscripten_audio_node_connect: (source, destination, outputIndex, inputIndex) => {
297+
var srcNode = EmAudio[source];
298+
var dstNode = EmAudio[destination];
297299
#if ASSERTIONS
298-
assert(EmAudio[contextHandle], `Called emscripten_audio_worklet_node_connect() with an invalid AudioContext handle ${contextHandle}!`);
299-
assert(EmAudio[contextHandle] instanceof (window.AudioContext || window.webkitAudioContext), `Called emscripten_audio_worklet_node_connect() on context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]} (${EmAudio[contextHandle]})`);
300-
assert(EmAudio[workletNode], `Called emscripten_audio_worklet_node_connect() with an invalid AudioWorkletNode handle ${workletNode}`);
301-
assert(EmAudio[workletNode].connect, `Called emscripten_audio_worklet_node_connect() on a handle ${workletNode} that is not an AudioWorkletNode, but of type ${typeof EmAudio[workletNode]} (${EmAudio[workletNode]})`);
300+
assert(srcNode, `Called emscripten_audio_node_connect() with an invalid AudioNode handle ${source}`);
301+
assert(srcNode instanceof window.AudioNode, `Called emscripten_audio_node_connect() on handle ${source} that is not an AudiotNode, but of type ${srcNode}`);
302+
assert(dstNode, `Called emscripten_audio_node_connect() with an invalid AudioNode handle ${destination}!`);
303+
assert(dstNode instanceof (window.AudioContext || window.webkitAudioContext) || dstNode instanceof window.AudioNode, `Called emscripten_audio_node_connect() on handle ${destination} that is not an AudioContext or AudioNode, but of type ${dstNode}`);
302304
#endif
303305
#if WEBAUDIO_DEBUG
304-
console.log(`Connecting worklet with node ID ${workletNode} to Web Audio context with ID ${contextHandle}`);
306+
console.log(`Connecting audio node ID ${source} to audio node ID ${destination} (${srcNode} to ${dstNode})`);
305307
#endif
306-
EmAudio[workletNode].connect(EmAudio[contextHandle].destination);
308+
srcNode.connect(dstNode.destination || dstNode, outputIndex, inputIndex);
307309
},
308310

309311
emscripten_current_thread_is_audio_worklet: () => typeof AudioWorkletGlobalScope !== 'undefined',

system/include/emscripten/webaudio.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,9 @@ typedef struct EmscriptenAudioWorkletNodeCreateOptions
129129
// userData4: A custom userdata pointer to pass to the callback function. This value will be passed on to the call to the given EmscriptenWorkletNodeProcessCallback callback function.
130130
EMSCRIPTEN_AUDIO_WORKLET_NODE_T emscripten_create_wasm_audio_worklet_node(EMSCRIPTEN_WEBAUDIO_T audioContext, const char *name, const EmscriptenAudioWorkletNodeCreateOptions *options, EmscriptenWorkletNodeProcessCallback processCallback, void *userData4);
131131

132-
// Connects the audio worklet node to the audio context
133-
void emscripten_audio_worklet_node_connect(EMSCRIPTEN_WEBAUDIO_T audioContext, EMSCRIPTEN_AUDIO_WORKLET_NODE_T workletNode);
132+
// Connects a node's output to a target, e.g., connect the worklet node to the context.
133+
// For outputIndex and inputIndex, see the AudioNode.connect() documentation (setting 0 as the default values)
134+
void emscripten_audio_node_connect(EMSCRIPTEN_WEBAUDIO_T source, EMSCRIPTEN_WEBAUDIO_T destination, int outputIndex, int inputIndex);
134135

135136
// Returns true if the current thread is executing a Wasm AudioWorklet, false otherwise.
136137
// Note that calling this function can be relatively slow as it incurs a Wasm->JS transition,

test/webaudio/audio_worklet_tone_generator.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
8383
EMSCRIPTEN_AUDIO_WORKLET_NODE_T wasmAudioWorklet = emscripten_create_wasm_audio_worklet_node(audioContext, "tone-generator", &options, &ProcessAudio, 0);
8484

8585
// Connect the audio worklet node to the graph.
86-
emscripten_audio_worklet_node_connect(audioContext, wasmAudioWorklet);
86+
emscripten_audio_node_connect(wasmAudioWorklet, audioContext, 0, 0);
8787
EM_ASM({
8888
// Add a button on the page to toggle playback as a response to user click.
8989
let startButton = document.createElement('button');

test/webaudio/audioworklet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
9595
// Instantiate the noise-generator Audio Worklet Processor.
9696
EMSCRIPTEN_AUDIO_WORKLET_NODE_T wasmAudioWorklet = emscripten_create_wasm_audio_worklet_node(audioContext, "noise-generator", &options, &ProcessAudio, 0);
9797
// Connect the audio worklet node to the graph.
98-
emscripten_audio_worklet_node_connect(audioContext, wasmAudioWorklet);
98+
emscripten_audio_node_connect(wasmAudioWorklet, audioContext, 0, 0);
9999

100100
#ifdef REPORT_RESULT
101101
emscripten_set_timeout_loop(main_thread_tls_access, 10, 0);

test/webaudio/audioworklet_emscripten_futex_wake.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
5252
int outputChannelCounts[1] = { 1 };
5353
EmscriptenAudioWorkletNodeCreateOptions options = { .numberOfInputs = 0, .numberOfOutputs = 1, .outputChannelCounts = outputChannelCounts };
5454
EMSCRIPTEN_AUDIO_WORKLET_NODE_T wasmAudioWorklet = emscripten_create_wasm_audio_worklet_node(audioContext, "noise-generator", &options, &ProcessAudio, 0);
55-
emscripten_audio_worklet_node_connect(audioContext, wasmAudioWorklet);
55+
emscripten_audio_node_connect(wasmAudioWorklet, audioContext, 0, 0);
5656
InitHtmlUi(audioContext);
5757
}
5858

0 commit comments

Comments
 (0)