From 9d37dbf240e770195624e4fc4e06d2b49cf4661a Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 28 Jul 2022 23:58:08 +0200 Subject: [PATCH] Allow to fake/force a small buffer size for wasm Signed-off-by: falkTX --- distrho/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 index 1353e518..3f1f7566 100644 --- 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]; + } } } };