Files
rsgp/src/lib/audio/processors/BitCrusher.ts

30 lines
827 B
TypeScript

import type { AudioProcessor } from "./AudioProcessor";
export class BitCrusher implements AudioProcessor {
getName(): string {
return "Bit Crusher";
}
getDescription(): string {
return "Reduces bit depth for lo-fi digital distortion";
}
async process(
leftChannel: Float32Array,
rightChannel: Float32Array
): Promise<[Float32Array, Float32Array]> {
const bitDepth = Math.floor(Math.random() * 6) + 3;
const levels = Math.pow(2, bitDepth);
const newLeft = new Float32Array(leftChannel.length);
const newRight = new Float32Array(rightChannel.length);
for (let i = 0; i < leftChannel.length; i++) {
newLeft[i] = Math.floor(leftChannel[i] * levels) / levels;
newRight[i] = Math.floor(rightChannel[i] * levels) / levels;
}
return [newLeft, newRight];
}
}