18 lines
628 B
JavaScript
18 lines
628 B
JavaScript
|
|
class AudioCaptureProcessor extends AudioWorkletProcessor {
|
||
|
|
process(inputs, outputs, parameters) {
|
||
|
|
const input = inputs[0];
|
||
|
|
if (input && input.length > 0 && input[0].length > 0) {
|
||
|
|
const samples = input[0]; // Float32Array, mono channel
|
||
|
|
const int16 = new Int16Array(samples.length);
|
||
|
|
for (let i = 0; i < samples.length; i++) {
|
||
|
|
const s = Math.max(-1, Math.min(1, samples[i]));
|
||
|
|
int16[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;
|
||
|
|
}
|
||
|
|
this.port.postMessage(int16.buffer, [int16.buffer]);
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
registerProcessor('audio-capture-processor', AudioCaptureProcessor);
|