tone
Version:
A Web Audio framework for making interactive music in the browser.
48 lines (44 loc) • 1.17 kB
JavaScript
import { addToWorklet } from "./WorkletGlobalScope.js";
const delayLine = /* javascript */ `
/**
* A multichannel buffer for use within an AudioWorkletProcessor as a delay line
*/
class DelayLine {
constructor(size, channels) {
this.buffer = [];
this.writeHead = []
this.size = size;
// create the empty channels
for (let i = 0; i < channels; i++) {
this.buffer[i] = new Float32Array(this.size);
this.writeHead[i] = 0;
}
}
/**
* Push a value onto the end
* @param channel number
* @param value number
*/
push(channel, value) {
this.writeHead[channel] += 1;
if (this.writeHead[channel] > this.size) {
this.writeHead[channel] = 0;
}
this.buffer[channel][this.writeHead[channel]] = value;
}
/**
* Get the recorded value of the channel given the delay
* @param channel number
* @param delay number delay samples
*/
get(channel, delay) {
let readHead = this.writeHead[channel] - Math.floor(delay);
if (readHead < 0) {
readHead += this.size;
}
return this.buffer[channel][readHead];
}
}
`;
addToWorklet(delayLine);
//# sourceMappingURL=DelayLine.worklet.js.map