Browse Source

Allow to fake/force a small buffer size for wasm

Signed-off-by: falkTX <falktx@falktx.com>
pull/321/head
falkTX 3 years ago
parent
commit
9d37dbf240
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 22 additions and 14 deletions
  1. +22
    -14
      distrho/src/jackbridge/WebBridge.hpp

+ 22
- 14
distrho/src/jackbridge/WebBridge.hpp View File

@@ -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];
}
}
}
};


Loading…
Cancel
Save