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