Recover analyzer DSP and realtime pipeline corrections

This commit is contained in:
Mikei386
2026-07-21 19:57:52 +02:00
parent e499bac928
commit 91aeccb938
27 changed files with 3410 additions and 924 deletions
+61
View File
@@ -0,0 +1,61 @@
import assert from 'node:assert/strict';
import fs from 'node:fs';
import vm from 'node:vm';
const source = fs.readFileSync(new URL('../www/core/binary_protocol.js', import.meta.url), 'utf8');
const context = vm.createContext({ ArrayBuffer, DataView, Float32Array, Number });
vm.runInContext(source.replaceAll('export function', 'function'), context, {
filename: 'binary_protocol.js',
});
function spectroPacket() {
const buffer = new ArrayBuffer(28);
const view = new DataView(buffer);
view.setUint32(0, 0x50585350, true);
view.setUint32(4, 42, true);
view.setUint32(8, 48000, true);
view.setUint32(12, 8192, true);
view.setUint32(16, 2, true);
view.setFloat32(20, -80, true);
view.setFloat32(24, -12.5, true);
return buffer;
}
function visualsPacket() {
const buffer = new ArrayBuffer(64);
const view = new DataView(buffer);
view.setUint32(0, 0x50585653, true);
view.setUint16(4, 1, true);
view.setUint16(6, 3, true);
view.setUint32(8, 7, true);
view.setUint32(12, 2, true);
view.setUint32(16, 2, true);
view.setUint16(20, 1, true);
view.setUint32(24, 5, true);
view.setUint32(28, 48000, true);
[-0.5, 0.25, 0.5, -0.25, -0.5, 0.5, -0.25, 0.25]
.forEach((value, index) => view.setFloat32(32 + index * 4, value, true));
return buffer;
}
const spectro = context.decodePhoenixSpectroBuffer(spectroPacket());
assert.equal(spectro.seq, 42);
assert.equal(spectro.sampleRate, 48000);
assert.equal(spectro.fftSize, 8192);
assert.deepEqual(Array.from(spectro.bins), [-80, -12.5]);
const visual = context.decodePhoenixVisualsBuffer(visualsPacket());
assert.equal(visual.seq, 7);
assert.deepEqual(Array.from(visual.left), [-0.5, 0.5]);
assert.deepEqual(Array.from(visual.right), [0.25, -0.25]);
assert.equal(visual.wave.columns, 2);
assert.equal(visual.wave.channels, 1);
assert.deepEqual(Array.from(visual.wave.data), [-0.5, 0.5, -0.25, 0.25]);
assert.equal(context.decodePhoenixSpectroBuffer(spectroPacket().slice(0, 24)), null);
assert.equal(context.decodePhoenixVisualsBuffer(visualsPacket().slice(0, 60)), null);
const wrongVersion = visualsPacket();
new DataView(wrongVersion).setUint16(4, 2, true);
assert.equal(context.decodePhoenixVisualsBuffer(wrongVersion), null);
console.log('binary protocol regression tests passed');