DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 9d37dbf240e770195624e4fc4e06d2b49cf4661a
parent ad482c91b54ed7622084bf1a58ccc52c03579226
Author: falkTX <falktx@falktx.com>
Date:   Thu, 28 Jul 2022 23:57:41 +0200

Allow to fake/force a small buffer size for wasm

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/jackbridge/WebBridge.hpp | 36++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/distrho/src/jackbridge/WebBridge.hpp b/distrho/src/jackbridge/WebBridge.hpp @@ -111,7 +111,10 @@ struct WebBridge : NativeBridge { return false; } - bufferSize = 2048; + bufferSize = EM_ASM_INT({ + var WAB = Module['WebAudioBridge']; + return WAB['minimizeBufferSize'] ? 256 : 2048; + }); sampleRate = EM_ASM_INT_V({ var WAB = Module['WebAudioBridge']; return WAB.audioContext.sampleRate; @@ -125,23 +128,28 @@ struct WebBridge : NativeBridge { var bufferSize = $2; var WAB = Module['WebAudioBridge']; + var realBufferSize = WAB['minimizeBufferSize'] ? 2048 : bufferSize; + var divider = realBufferSize / bufferSize; + // main processor - WAB.processor = WAB.audioContext['createScriptProcessor'](bufferSize, numInputs, numOutputs); + WAB.processor = WAB.audioContext['createScriptProcessor'](realBufferSize, numInputs, numOutputs); WAB.processor['onaudioprocess'] = function (e) { // var timestamp = performance.now(); - for (var i = 0; i < numInputs; ++i) { - 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]; + for (var k = 0; k < divider; ++k) { + for (var i = 0; i < numInputs; ++i) { + 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[bufferSize * k + j]; + } } - } - dynCall('vi', $4, [$5]); - for (var i = 0; i < numOutputs; ++i) { - var buffer = e['outputBuffer']['getChannelData'](i); - var offset = bufferSize * (numInputs + i); - for (var j = 0; j < bufferSize; ++j) { - buffer[j] = HEAPF32[$3 + ((offset + j) << 2) >> 2]; + dynCall('vi', $4, [$5]); + for (var i = 0; i < numOutputs; ++i) { + var buffer = e['outputBuffer']['getChannelData'](i); + var offset = bufferSize * (numInputs + i); + for (var j = 0; j < bufferSize; ++j) { + buffer[bufferSize * k + j] = HEAPF32[$3 + ((offset + j) << 2) >> 2]; + } } } };