From 18f3fa38cb6f2b23166614a7b8aa0a88005d7f0d Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 26 Feb 2023 19:14:58 +0100 Subject: [PATCH] Limit standalone bridges audio to 2 IO Signed-off-by: falkTX --- distrho/src/jackbridge/NativeBridge.hpp | 12 ++++++++++++ distrho/src/jackbridge/RtAudioBridge.hpp | 10 +++++----- distrho/src/jackbridge/SDL2Bridge.hpp | 20 ++++++++++---------- distrho/src/jackbridge/WebBridge.hpp | 23 ++++++++++++----------- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/distrho/src/jackbridge/NativeBridge.hpp b/distrho/src/jackbridge/NativeBridge.hpp index 5d98cfe92..d28142b2c 100644 --- a/distrho/src/jackbridge/NativeBridge.hpp +++ b/distrho/src/jackbridge/NativeBridge.hpp @@ -21,6 +21,18 @@ #include "../../extra/RingBuffer.hpp" +#if DISTRHO_PLUGIN_NUM_INPUTS > 2 +# define DISTRHO_PLUGIN_NUM_INPUTS_2 2 +#else +# define DISTRHO_PLUGIN_NUM_INPUTS_2 DISTRHO_PLUGIN_NUM_INPUTS +#endif + +#if DISTRHO_PLUGIN_NUM_OUTPUTS > 2 +# define DISTRHO_PLUGIN_NUM_OUTPUTS_2 2 +#else +# define DISTRHO_PLUGIN_NUM_OUTPUTS_2 DISTRHO_PLUGIN_NUM_OUTPUTS +#endif + using DISTRHO_NAMESPACE::HeapRingBuffer; struct NativeBridge { diff --git a/distrho/src/jackbridge/RtAudioBridge.hpp b/distrho/src/jackbridge/RtAudioBridge.hpp index 73d793c68..50e0461d8 100644 --- a/distrho/src/jackbridge/RtAudioBridge.hpp +++ b/distrho/src/jackbridge/RtAudioBridge.hpp @@ -302,7 +302,7 @@ struct RtAudioBridge : NativeBridge { if (withInput) { inParams.deviceId = rtAudio->getDefaultInputDevice(); - inParams.nChannels = DISTRHO_PLUGIN_NUM_INPUTS; + inParams.nChannels = DISTRHO_PLUGIN_NUM_INPUTS_2; inParamsPtr = &inParams; } #endif @@ -310,7 +310,7 @@ struct RtAudioBridge : NativeBridge { #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 RtAudio::StreamParameters outParams; outParams.deviceId = rtAudio->getDefaultOutputDevice(); - outParams.nChannels = DISTRHO_PLUGIN_NUM_OUTPUTS; + outParams.nChannels = DISTRHO_PLUGIN_NUM_OUTPUTS_2; RtAudio::StreamParameters* const outParamsPtr = &outParams; #else RtAudio::StreamParameters* const outParamsPtr = nullptr; @@ -359,14 +359,14 @@ struct RtAudioBridge : NativeBridge { if (self->jackProcessCallback == nullptr) { if (outputBuffer != nullptr) - std::memset((float*)outputBuffer, 0, sizeof(float)*numFrames*DISTRHO_PLUGIN_NUM_OUTPUTS); + std::memset((float*)outputBuffer, 0, sizeof(float)*numFrames*DISTRHO_PLUGIN_NUM_OUTPUTS_2); return 0; } #if DISTRHO_PLUGIN_NUM_INPUTS > 0 if (float* const insPtr = static_cast(inputBuffer)) { - for (uint i=0; iaudioBuffers[i] = insPtr + (i * numFrames); } #endif @@ -374,7 +374,7 @@ struct RtAudioBridge : NativeBridge { #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 if (float* const outsPtr = static_cast(outputBuffer)) { - for (uint i=0; iaudioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i] = outsPtr + (i * numFrames); } #endif diff --git a/distrho/src/jackbridge/SDL2Bridge.hpp b/distrho/src/jackbridge/SDL2Bridge.hpp index 8a10ee5e1..6e8a882fd 100644 --- a/distrho/src/jackbridge/SDL2Bridge.hpp +++ b/distrho/src/jackbridge/SDL2Bridge.hpp @@ -68,7 +68,7 @@ struct SDL2Bridge : NativeBridge { #if DISTRHO_PLUGIN_NUM_INPUTS > 0 SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, "Capure"); - requested.channels = DISTRHO_PLUGIN_NUM_INPUTS; + requested.channels = DISTRHO_PLUGIN_NUM_INPUTS_2; requested.callback = AudioInputCallback; SDL_AudioSpec receivedCapture; @@ -81,7 +81,7 @@ struct SDL2Bridge : NativeBridge { return false; #endif } - else if (receivedCapture.channels != DISTRHO_PLUGIN_NUM_INPUTS) + else if (receivedCapture.channels != DISTRHO_PLUGIN_NUM_INPUTS_2) { SDL_CloseAudioDevice(captureDeviceId); captureDeviceId = 0; @@ -93,7 +93,7 @@ struct SDL2Bridge : NativeBridge { #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 SDL_AudioSpec receivedPlayback; SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, "Playback"); - requested.channels = DISTRHO_PLUGIN_NUM_OUTPUTS; + requested.channels = DISTRHO_PLUGIN_NUM_OUTPUTS_2; requested.callback = AudioOutputCallback; playbackDeviceId = SDL_OpenAudioDevice(nullptr, 0, &requested, &receivedPlayback, @@ -104,7 +104,7 @@ struct SDL2Bridge : NativeBridge { return false; } - if (receivedPlayback.channels != DISTRHO_PLUGIN_NUM_OUTPUTS) + if (receivedPlayback.channels != DISTRHO_PLUGIN_NUM_OUTPUTS_2) { SDL_CloseAudioDevice(playbackDeviceId); playbackDeviceId = 0; @@ -211,15 +211,15 @@ struct SDL2Bridge : NativeBridge { if (self->jackProcessCallback == nullptr) return; - const uint numFrames = static_cast(len / sizeof(float) / DISTRHO_PLUGIN_NUM_INPUTS); + const uint numFrames = static_cast(len / sizeof(float) / DISTRHO_PLUGIN_NUM_INPUTS_2); DISTRHO_SAFE_ASSERT_UINT2_RETURN(numFrames == self->bufferSize, numFrames, self->bufferSize,); const float* const fstream = (const float*)stream; - for (uint i=0; iaudioBuffers[i][j] = fstream[j * DISTRHO_PLUGIN_NUM_INPUTS + i]; + self->audioBuffers[i][j] = fstream[j * DISTRHO_PLUGIN_NUM_INPUTS_2 + i]; } #if DISTRHO_PLUGIN_NUM_OUTPUTS == 0 @@ -245,7 +245,7 @@ struct SDL2Bridge : NativeBridge { return; } - const uint numFrames = static_cast(len / sizeof(float) / DISTRHO_PLUGIN_NUM_OUTPUTS); + const uint numFrames = static_cast(len / sizeof(float) / DISTRHO_PLUGIN_NUM_OUTPUTS_2); DISTRHO_SAFE_ASSERT_UINT2_RETURN(numFrames == self->bufferSize, numFrames, self->bufferSize,); const ScopedDenormalDisable sdd; @@ -253,10 +253,10 @@ struct SDL2Bridge : NativeBridge { float* const fstream = (float*)stream; - for (uint i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS; ++i) + for (uint i=0; i < DISTRHO_PLUGIN_NUM_OUTPUTS_2; ++i) { for (uint j=0; j < numFrames; ++j) - fstream[j * DISTRHO_PLUGIN_NUM_OUTPUTS + i] = self->audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i][j]; + fstream[j * DISTRHO_PLUGIN_NUM_OUTPUTS_2 + i] = self->audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i][j]; } } #endif diff --git a/distrho/src/jackbridge/WebBridge.hpp b/distrho/src/jackbridge/WebBridge.hpp index 3afb9e3a4..aaa5b7d07 100644 --- a/distrho/src/jackbridge/WebBridge.hpp +++ b/distrho/src/jackbridge/WebBridge.hpp @@ -163,7 +163,7 @@ struct WebBridge : NativeBridge { if (WAB.audioContext.state === 'suspended') WAB.audioContext.resume(); }); - }, DISTRHO_PLUGIN_NUM_INPUTS, DISTRHO_PLUGIN_NUM_OUTPUTS, bufferSize, audioBufferStorage, WebAudioCallback, this); + }, DISTRHO_PLUGIN_NUM_INPUTS_2, DISTRHO_PLUGIN_NUM_OUTPUTS_2, bufferSize, audioBufferStorage, WebAudioCallback, this); return true; } @@ -247,7 +247,7 @@ struct WebBridge : NativeBridge { } else if (navigator.webkitGetUserMedia !== undefined) { navigator.webkitGetUserMedia(constraints, success, fail); } - }, DISTRHO_PLUGIN_NUM_INPUTS); + }, DISTRHO_PLUGIN_NUM_INPUTS_2); return true; } @@ -279,7 +279,7 @@ struct WebBridge : NativeBridge { WAB.captureStreamNode.disconnect(WAB.processor); return 1; - }, DISTRHO_PLUGIN_NUM_INPUTS, DISTRHO_PLUGIN_NUM_OUTPUTS, newBufferSize) != 0; + }, DISTRHO_PLUGIN_NUM_INPUTS_2, DISTRHO_PLUGIN_NUM_OUTPUTS_2, newBufferSize) != 0; if (!success) return false; @@ -292,9 +292,10 @@ struct WebBridge : NativeBridge { bufferSizeCallback(newBufferSize, jackBufferSizeArg); EM_ASM({ - var numInputs = $0; - var numOutputs = $1; - var bufferSize = $2; + var numInputsR = $0; + var numInputs = $1; + var numOutputs = $2; + var bufferSize = $3; var WAB = Module['WebAudioBridge']; // store the new processor @@ -309,13 +310,13 @@ struct WebBridge : NativeBridge { var buffer = e['inputBuffer']['getChannelData'](i); for (var j = 0; j < bufferSize; ++j) { // setValue($3 + ((bufferSize * i) + j) * 4, buffer[j], 'float'); - HEAPF32[$3 + (((bufferSize * i) + j) << 2) >> 2] = buffer[j]; + HEAPF32[$4 + (((bufferSize * i) + j) << 2) >> 2] = buffer[j]; } } - dynCall('vi', $4, [$5]); + dynCall('vi', $5, [$6]); for (var i = 0; i < numOutputs; ++i) { var buffer = e['outputBuffer']['getChannelData'](i); - var offset = bufferSize * (numInputs + i); + var offset = bufferSize * (numInputsR + i); for (var j = 0; j < bufferSize; ++j) { buffer[j] = HEAPF32[$3 + ((offset + j) << 2) >> 2]; } @@ -329,7 +330,7 @@ struct WebBridge : NativeBridge { if (WAB.captureStreamNode) WAB.captureStreamNode.connect(WAB.processor); - }, DISTRHO_PLUGIN_NUM_INPUTS, DISTRHO_PLUGIN_NUM_OUTPUTS, bufferSize, audioBufferStorage, WebAudioCallback, this); + }, DISTRHO_PLUGIN_NUM_INPUTS, DISTRHO_PLUGIN_NUM_INPUTS_2, DISTRHO_PLUGIN_NUM_OUTPUTS_2, bufferSize, audioBufferStorage, WebAudioCallback, this); return true; } @@ -452,7 +453,7 @@ struct WebBridge : NativeBridge { } else { - for (uint i=0; iaudioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i], 0, sizeof(float)*numFrames); } }