try to send exactly 10ms packets
This commit is contained in:
@@ -1,15 +1,12 @@
|
||||
const SAMPLE_RATE = 48000;
|
||||
const PACKET_MS = 10;
|
||||
const PACKET_FRAMES = PACKET_MS / 1000 * SAMPLE_RATE;
|
||||
//const PACKET_FRAMES = 2400;
|
||||
console.log("Frames per packet:", PACKET_FRAMES);
|
||||
const PACKET_SAMPLES = 480;
|
||||
|
||||
class RustWorklet extends AudioWorkletProcessor {
|
||||
constructor(options) {
|
||||
super();
|
||||
this.module = options.processorOptions;
|
||||
this.timestamp = null;
|
||||
this.buffer = new Float32Array(PACKET_FRAMES);
|
||||
this.buffer = new Float32Array(PACKET_SAMPLES * 2);
|
||||
this.buffer_offset = 0;
|
||||
if (sampleRate != SAMPLE_RATE) {
|
||||
throw Error(`sample rate ${sampleRate} should be ${SAMPLE_RATE}`);
|
||||
@@ -23,15 +20,16 @@ class RustWorklet extends AudioWorkletProcessor {
|
||||
const data = {
|
||||
format: 'f32',
|
||||
sampleRate: SAMPLE_RATE,
|
||||
//numberOfFrames: this.buffer_offset,
|
||||
numberOfFrames: this.buffer_offset,
|
||||
numberOfChannels: 1,
|
||||
timestamp: this.timestamp,
|
||||
//timestamp: null,
|
||||
data: this.buffer.slice(0, this.buffer_offset),
|
||||
data: this.buffer.slice(0, PACKET_SAMPLES),
|
||||
};
|
||||
this.port.postMessage(data);
|
||||
this.buffer_offset = 0;
|
||||
if (this.buffer_offset > PACKET_SAMPLES) {
|
||||
this.buffer.copyWithin(0, PACKET_SAMPLES, this.buffer_offset);
|
||||
}
|
||||
this.buffer_offset -= PACKET_SAMPLES;
|
||||
this.timestamp = null;
|
||||
}
|
||||
|
||||
@@ -52,18 +50,12 @@ class RustWorklet extends AudioWorkletProcessor {
|
||||
|
||||
const frames = input[0];
|
||||
|
||||
if (this.buffer_offset + frames.length > this.buffer.length) {
|
||||
// too full, send now
|
||||
this.do_send();
|
||||
}
|
||||
|
||||
this.buffer.set(frames, this.buffer_offset);
|
||||
this.buffer_offset += frames.length;
|
||||
|
||||
if (this.buffer_offset + 128 > this.buffer.length) {
|
||||
// full enough, send now
|
||||
if (this.buffer_offset >= PACKET_SAMPLES) {
|
||||
this.do_send();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user