Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| // for js/src/lib/components/InferenceWidget/shared/WidgetRealtimeRecorder/Recorder.ts | |
| class AudioDataExtractor extends AudioWorkletProcessor { | |
| _updateIntervalInMS; | |
| _sampleInFrames; | |
| _index; | |
| _buffer; | |
| constructor() { | |
| super(); | |
| this._updateIntervalInMS = 50; | |
| this._sampleInFrames = parseInt((this._updateIntervalInMS / 1000.0) * sampleRate); | |
| this._index = 0; | |
| this._buffer = new Float32Array(this._sampleInFrames); | |
| } | |
| process(inputs, outputs, parameters) { | |
| // Note that the input will be down-mixed to mono; however, if no inputs are | |
| // connected then zero channels will be passed in. | |
| if (inputs.length > 0 && inputs[0].length > 0) { | |
| const rest = this._buffer.length - this._index; | |
| if (rest < inputs[0][0].length) { | |
| this._buffer.set(inputs[0][0].slice(0, rest), this._index); | |
| this.port.postMessage({ | |
| buffer: this._buffer.slice(0), | |
| sampling_rate: sampleRate, | |
| }); | |
| this._buffer.fill(0); | |
| this._index = inputs[0][0].length - rest; | |
| } else { | |
| this._buffer.set(inputs[0][0], this._index); | |
| this._index += inputs[0][0].length; | |
| } | |
| } | |
| return true; | |
| } | |
| } | |
| registerProcessor("AudioDataExtractor", AudioDataExtractor); | |