41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
const test = require("node:test");
|
|
const assert = require("node:assert/strict");
|
|
const fs = require("node:fs");
|
|
const vm = require("node:vm");
|
|
const path = require("node:path");
|
|
|
|
test("AudioWorklet emits independent 100ms little-endian PCM16 packets", () => {
|
|
const packets = [];
|
|
let Processor;
|
|
vm.runInNewContext(
|
|
fs.readFileSync(
|
|
path.join(__dirname, "../services/asr-web/web/pcm-worklet.js"),
|
|
"utf8",
|
|
),
|
|
{
|
|
AudioWorkletProcessor: class {
|
|
constructor() {
|
|
this.port = { postMessage: (buffer) => packets.push(buffer) };
|
|
}
|
|
},
|
|
registerProcessor: (_name, implementation) => {
|
|
Processor = implementation;
|
|
},
|
|
},
|
|
);
|
|
const processor = new Processor();
|
|
assert.equal(processor.process([]), true);
|
|
const samples = new Float32Array(3200);
|
|
samples[0] = -1;
|
|
samples[1] = 1;
|
|
samples[2] = 0.5;
|
|
processor.process([[samples]]);
|
|
assert.equal(packets.length, 2);
|
|
assert.notEqual(packets[0], packets[1]);
|
|
assert.equal(packets[0].byteLength, 3200);
|
|
const view = new DataView(packets[0]);
|
|
assert.equal(view.getInt16(0, true), -32768);
|
|
assert.equal(view.getInt16(2, true), 32767);
|
|
assert.equal(view.getInt16(4, true), 16383);
|
|
});
|