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:
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];
+ }
}
}
};