From 32ee9d957f06ec7103b57711f83dd904552289ce Mon Sep 17 00:00:00 2001 From: Nikitha Mohithe Date: Sun, 5 Oct 2025 09:43:33 +0530 Subject: [PATCH 1/2] fix: added missing options to EmscriptenAudioWorkletNodeCreateOptions --- src/lib/libwebaudio.js | 3 +++ system/include/emscripten/webaudio.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/lib/libwebaudio.js b/src/lib/libwebaudio.js index 3378cc89792d9..6496c043042ec 100644 --- a/src/lib/libwebaudio.js +++ b/src/lib/libwebaudio.js @@ -318,6 +318,9 @@ var LibraryWebAudio = { numberOfInputs: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.numberOfInputs, 'i32') }}}, numberOfOutputs: optionsOutputs, outputChannelCount: readChannelCountArray({{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.outputChannelCounts, 'i32*') }}}, optionsOutputs), + channelCount: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelCount, 'i32') }}}, + channelCountMode: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelCountMode, 'i32') }}}, + channelInterpretation: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelInterpretation, 'i32') }}}, processorOptions: { callback, userData, diff --git a/system/include/emscripten/webaudio.h b/system/include/emscripten/webaudio.h index 07d60e8525a86..a67aa69a4d59e 100644 --- a/system/include/emscripten/webaudio.h +++ b/system/include/emscripten/webaudio.h @@ -134,6 +134,11 @@ typedef struct EmscriptenAudioWorkletNodeCreateOptions int numberOfOutputs; // For each output, specifies the number of audio channels (1=mono/2=stereo/etc.) for that output. Default=an array of ones for each output channel. int *outputChannelCounts; + // Extended options from AudioWorkletNode + int channelCount; + int channelCountMode; + int channelInterpretation; + } EmscriptenAudioWorkletNodeCreateOptions; // Instantiates the given AudioWorkletProcessor as an AudioWorkletNode, which continuously calls the specified processCallback() function on the browser's audio thread to perform audio processing. From d9e80993580cf0d043fbbc35058e411c28760c9d Mon Sep 17 00:00:00 2001 From: Nikitha Mohithe Date: Mon, 6 Oct 2025 21:46:41 +0530 Subject: [PATCH 2/2] fix: updated channelCount, mode and interpretation with proper types closes #23982 --- src/lib/libwebaudio.js | 6 +++--- system/include/emscripten/webaudio.h | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/lib/libwebaudio.js b/src/lib/libwebaudio.js index 6496c043042ec..bd8755a5e1503 100644 --- a/src/lib/libwebaudio.js +++ b/src/lib/libwebaudio.js @@ -318,9 +318,9 @@ var LibraryWebAudio = { numberOfInputs: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.numberOfInputs, 'i32') }}}, numberOfOutputs: optionsOutputs, outputChannelCount: readChannelCountArray({{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.outputChannelCounts, 'i32*') }}}, optionsOutputs), - channelCount: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelCount, 'i32') }}}, - channelCountMode: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelCountMode, 'i32') }}}, - channelInterpretation: {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelInterpretation, 'i32') }}}, + channelCount: (function(){ var v = {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelCount, 'u32') }}}; return v > 0 ? v : undefined; })(), + channelCountMode: (function(){ var v = {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelCountMode, 'i32') }}}; var arr = ['max','clamped-max','explicit']; return arr[v] || undefined; })(), + channelInterpretation: (function(){ var v = {{{ makeGetValue('options', C_STRUCTS.EmscriptenAudioWorkletNodeCreateOptions.channelInterpretation, 'i32') }}}; var arr = ['speakers','discrete']; return arr[v] || undefined; })(), processorOptions: { callback, userData, diff --git a/system/include/emscripten/webaudio.h b/system/include/emscripten/webaudio.h index a67aa69a4d59e..122ad1e407c3b 100644 --- a/system/include/emscripten/webaudio.h +++ b/system/include/emscripten/webaudio.h @@ -126,6 +126,17 @@ typedef struct AudioParamFrame typedef bool (*EmscriptenWorkletNodeProcessCallback)(int numInputs, const AudioSampleFrame *inputs, int numOutputs, AudioSampleFrame *outputs, int numParams, const AudioParamFrame *params, void *userData4); +typedef enum { + WEBAUDIO_CHANNEL_COUNT_MODE_MAX = 0, + WEBAUDIO_CHANNEL_COUNT_MODE_CLAMPED_MAX = 1, + WEBAUDIO_CHANNEL_COUNT_MODE_EXPLICIT = 2 +} WEBAUDIO_CHANNEL_COUNT_MODE; + +typedef enum { + WEBAUDIO_CHANNEL_INTERPRETATION_SPEAKERS = 0, + WEBAUDIO_CHANNEL_INTERPRETATION_DISCRETE = 1 +} WEBAUDIO_CHANNEL_INTERPRETATION; + typedef struct EmscriptenAudioWorkletNodeCreateOptions { // How many audio nodes does this node take inputs from? Default=1 @@ -134,10 +145,9 @@ typedef struct EmscriptenAudioWorkletNodeCreateOptions int numberOfOutputs; // For each output, specifies the number of audio channels (1=mono/2=stereo/etc.) for that output. Default=an array of ones for each output channel. int *outputChannelCounts; - // Extended options from AudioWorkletNode - int channelCount; - int channelCountMode; - int channelInterpretation; + unsigned long channelCount; + WEBAUDIO_CHANNEL_COUNT_MODE channelCountMode; + WEBAUDIO_CHANNEL_INTERPRETATION channelInterpretation; } EmscriptenAudioWorkletNodeCreateOptions;