Browse Source

Limit standalone bridges audio to 2 IO

Signed-off-by: falkTX <falktx@falktx.com>
pull/417/head
falkTX 2 years ago
parent
commit
18f3fa38cb
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 39 additions and 26 deletions
  1. +12
    -0
      distrho/src/jackbridge/NativeBridge.hpp
  2. +5
    -5
      distrho/src/jackbridge/RtAudioBridge.hpp
  3. +10
    -10
      distrho/src/jackbridge/SDL2Bridge.hpp
  4. +12
    -11
      distrho/src/jackbridge/WebBridge.hpp

+ 12
- 0
distrho/src/jackbridge/NativeBridge.hpp View File

@@ -21,6 +21,18 @@


#include "../../extra/RingBuffer.hpp" #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; using DISTRHO_NAMESPACE::HeapRingBuffer;


struct NativeBridge { struct NativeBridge {


+ 5
- 5
distrho/src/jackbridge/RtAudioBridge.hpp View File

@@ -302,7 +302,7 @@ struct RtAudioBridge : NativeBridge {
if (withInput) if (withInput)
{ {
inParams.deviceId = rtAudio->getDefaultInputDevice(); inParams.deviceId = rtAudio->getDefaultInputDevice();
inParams.nChannels = DISTRHO_PLUGIN_NUM_INPUTS;
inParams.nChannels = DISTRHO_PLUGIN_NUM_INPUTS_2;
inParamsPtr = &inParams; inParamsPtr = &inParams;
} }
#endif #endif
@@ -310,7 +310,7 @@ struct RtAudioBridge : NativeBridge {
#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0
RtAudio::StreamParameters outParams; RtAudio::StreamParameters outParams;
outParams.deviceId = rtAudio->getDefaultOutputDevice(); outParams.deviceId = rtAudio->getDefaultOutputDevice();
outParams.nChannels = DISTRHO_PLUGIN_NUM_OUTPUTS;
outParams.nChannels = DISTRHO_PLUGIN_NUM_OUTPUTS_2;
RtAudio::StreamParameters* const outParamsPtr = &outParams; RtAudio::StreamParameters* const outParamsPtr = &outParams;
#else #else
RtAudio::StreamParameters* const outParamsPtr = nullptr; RtAudio::StreamParameters* const outParamsPtr = nullptr;
@@ -359,14 +359,14 @@ struct RtAudioBridge : NativeBridge {
if (self->jackProcessCallback == nullptr) if (self->jackProcessCallback == nullptr)
{ {
if (outputBuffer != 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; return 0;
} }


#if DISTRHO_PLUGIN_NUM_INPUTS > 0 #if DISTRHO_PLUGIN_NUM_INPUTS > 0
if (float* const insPtr = static_cast<float*>(inputBuffer)) if (float* const insPtr = static_cast<float*>(inputBuffer))
{ {
for (uint i=0; i<DISTRHO_PLUGIN_NUM_INPUTS; ++i)
for (uint i=0; i<DISTRHO_PLUGIN_NUM_INPUTS_2; ++i)
self->audioBuffers[i] = insPtr + (i * numFrames); self->audioBuffers[i] = insPtr + (i * numFrames);
} }
#endif #endif
@@ -374,7 +374,7 @@ struct RtAudioBridge : NativeBridge {
#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0
if (float* const outsPtr = static_cast<float*>(outputBuffer)) if (float* const outsPtr = static_cast<float*>(outputBuffer))
{ {
for (uint i=0; i<DISTRHO_PLUGIN_NUM_OUTPUTS; ++i)
for (uint i=0; i<DISTRHO_PLUGIN_NUM_OUTPUTS_2; ++i)
self->audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i] = outsPtr + (i * numFrames); self->audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i] = outsPtr + (i * numFrames);
} }
#endif #endif


+ 10
- 10
distrho/src/jackbridge/SDL2Bridge.hpp View File

@@ -68,7 +68,7 @@ struct SDL2Bridge : NativeBridge {


#if DISTRHO_PLUGIN_NUM_INPUTS > 0 #if DISTRHO_PLUGIN_NUM_INPUTS > 0
SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, "Capure"); 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; requested.callback = AudioInputCallback;


SDL_AudioSpec receivedCapture; SDL_AudioSpec receivedCapture;
@@ -81,7 +81,7 @@ struct SDL2Bridge : NativeBridge {
return false; return false;
#endif #endif
} }
else if (receivedCapture.channels != DISTRHO_PLUGIN_NUM_INPUTS)
else if (receivedCapture.channels != DISTRHO_PLUGIN_NUM_INPUTS_2)
{ {
SDL_CloseAudioDevice(captureDeviceId); SDL_CloseAudioDevice(captureDeviceId);
captureDeviceId = 0; captureDeviceId = 0;
@@ -93,7 +93,7 @@ struct SDL2Bridge : NativeBridge {
#if DISTRHO_PLUGIN_NUM_OUTPUTS > 0 #if DISTRHO_PLUGIN_NUM_OUTPUTS > 0
SDL_AudioSpec receivedPlayback; SDL_AudioSpec receivedPlayback;
SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, "Playback"); 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; requested.callback = AudioOutputCallback;


playbackDeviceId = SDL_OpenAudioDevice(nullptr, 0, &requested, &receivedPlayback, playbackDeviceId = SDL_OpenAudioDevice(nullptr, 0, &requested, &receivedPlayback,
@@ -104,7 +104,7 @@ struct SDL2Bridge : NativeBridge {
return false; return false;
} }


if (receivedPlayback.channels != DISTRHO_PLUGIN_NUM_OUTPUTS)
if (receivedPlayback.channels != DISTRHO_PLUGIN_NUM_OUTPUTS_2)
{ {
SDL_CloseAudioDevice(playbackDeviceId); SDL_CloseAudioDevice(playbackDeviceId);
playbackDeviceId = 0; playbackDeviceId = 0;
@@ -211,15 +211,15 @@ struct SDL2Bridge : NativeBridge {
if (self->jackProcessCallback == nullptr) if (self->jackProcessCallback == nullptr)
return; return;


const uint numFrames = static_cast<uint>(len / sizeof(float) / DISTRHO_PLUGIN_NUM_INPUTS);
const uint numFrames = static_cast<uint>(len / sizeof(float) / DISTRHO_PLUGIN_NUM_INPUTS_2);
DISTRHO_SAFE_ASSERT_UINT2_RETURN(numFrames == self->bufferSize, numFrames, self->bufferSize,); DISTRHO_SAFE_ASSERT_UINT2_RETURN(numFrames == self->bufferSize, numFrames, self->bufferSize,);


const float* const fstream = (const float*)stream; const float* const fstream = (const float*)stream;


for (uint i=0; i<DISTRHO_PLUGIN_NUM_INPUTS; ++i)
for (uint i=0; i<DISTRHO_PLUGIN_NUM_INPUTS_2; ++i)
{ {
for (uint j=0; j<numFrames; ++j) for (uint j=0; j<numFrames; ++j)
self->audioBuffers[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 #if DISTRHO_PLUGIN_NUM_OUTPUTS == 0
@@ -245,7 +245,7 @@ struct SDL2Bridge : NativeBridge {
return; return;
} }


const uint numFrames = static_cast<uint>(len / sizeof(float) / DISTRHO_PLUGIN_NUM_OUTPUTS);
const uint numFrames = static_cast<uint>(len / sizeof(float) / DISTRHO_PLUGIN_NUM_OUTPUTS_2);
DISTRHO_SAFE_ASSERT_UINT2_RETURN(numFrames == self->bufferSize, numFrames, self->bufferSize,); DISTRHO_SAFE_ASSERT_UINT2_RETURN(numFrames == self->bufferSize, numFrames, self->bufferSize,);


const ScopedDenormalDisable sdd; const ScopedDenormalDisable sdd;
@@ -253,10 +253,10 @@ struct SDL2Bridge : NativeBridge {


float* const fstream = (float*)stream; 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) 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 #endif


+ 12
- 11
distrho/src/jackbridge/WebBridge.hpp View File

@@ -163,7 +163,7 @@ struct WebBridge : NativeBridge {
if (WAB.audioContext.state === 'suspended') if (WAB.audioContext.state === 'suspended')
WAB.audioContext.resume(); 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; return true;
} }
@@ -247,7 +247,7 @@ struct WebBridge : NativeBridge {
} else if (navigator.webkitGetUserMedia !== undefined) { } else if (navigator.webkitGetUserMedia !== undefined) {
navigator.webkitGetUserMedia(constraints, success, fail); navigator.webkitGetUserMedia(constraints, success, fail);
} }
}, DISTRHO_PLUGIN_NUM_INPUTS);
}, DISTRHO_PLUGIN_NUM_INPUTS_2);


return true; return true;
} }
@@ -279,7 +279,7 @@ struct WebBridge : NativeBridge {
WAB.captureStreamNode.disconnect(WAB.processor); WAB.captureStreamNode.disconnect(WAB.processor);


return 1; 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) if (!success)
return false; return false;
@@ -292,9 +292,10 @@ struct WebBridge : NativeBridge {
bufferSizeCallback(newBufferSize, jackBufferSizeArg); bufferSizeCallback(newBufferSize, jackBufferSizeArg);


EM_ASM({ 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']; var WAB = Module['WebAudioBridge'];


// store the new processor // store the new processor
@@ -309,13 +310,13 @@ struct WebBridge : NativeBridge {
var buffer = e['inputBuffer']['getChannelData'](i); var buffer = e['inputBuffer']['getChannelData'](i);
for (var j = 0; j < bufferSize; ++j) { for (var j = 0; j < bufferSize; ++j) {
// setValue($3 + ((bufferSize * i) + j) * 4, buffer[j], 'float'); // 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) { for (var i = 0; i < numOutputs; ++i) {
var buffer = e['outputBuffer']['getChannelData'](i); var buffer = e['outputBuffer']['getChannelData'](i);
var offset = bufferSize * (numInputs + i);
var offset = bufferSize * (numInputsR + i);
for (var j = 0; j < bufferSize; ++j) { for (var j = 0; j < bufferSize; ++j) {
buffer[j] = HEAPF32[$3 + ((offset + j) << 2) >> 2]; buffer[j] = HEAPF32[$3 + ((offset + j) << 2) >> 2];
} }
@@ -329,7 +330,7 @@ struct WebBridge : NativeBridge {
if (WAB.captureStreamNode) if (WAB.captureStreamNode)
WAB.captureStreamNode.connect(WAB.processor); 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; return true;
} }
@@ -452,7 +453,7 @@ struct WebBridge : NativeBridge {
} }
else else
{ {
for (uint i=0; i<DISTRHO_PLUGIN_NUM_OUTPUTS; ++i)
for (uint i=0; i<DISTRHO_PLUGIN_NUM_OUTPUTS_2; ++i)
std::memset(self->audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i], 0, sizeof(float)*numFrames); std::memset(self->audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + i], 0, sizeof(float)*numFrames);
} }
} }


Loading…
Cancel
Save