Files
agent-call/tests/test_pcm.cjs
T
2026-09-11 17:47:03 +08:00

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);
});