mirror of
https://github.com/torlando-tech/pyxis.git
synced 2026-07-09 15:51:53 +00:00
12fd28b67c
Extends the LXST harness from frame-flow only (#62) and decoder QoS only (#63) to a full content-fidelity test: a known 1kHz sine wave flows in BOTH directions through the Codec2-3200 round-trip, and the harness asserts the decoded RMS at each end matches expected energy within tolerance (after Codec2's lossy speech-codec behavior). Firmware additions (under PYXIS_TEST_HOOKS): I2SCapture setInjectSine(enabled, freq=1000, amp=0.5) Replaces mic input with a phase-continuous synthesized sine. Bypasses ES7210 capture and the voice filter chain so the encoder sees pure samples — peer's decoded RMS validates that pyxis's TX path delivers content. I2SPlayback pcmSampleCount(), pcmSumSquares() Decoded-PCM energy accumulators, fed from each successful Codec2 decode. uint64 sumsq holds ~2³⁴ frames before overflow, far longer than any test call. LXSTAudio + UIManager (test-only) captureSetInjectSine, playbackPcmSampleCount, playbackPcmSumSquares test_call_set_inject_sine, test_call_pcm_sample_count, test_call_pcm_sum_squares Serial T: hooks (main.cpp) T:CALL_INJECT <on|off> [freq] [amp_pct] Drive the capture-side injection from the harness. T:CALL_QOS now also returns pcm_n + pcm_ss Harness divides + sqrts to RMS for content validation. Validated with /tmp/lxst_call_harness.py + /tmp/lxst_call_bot.py (scripts vault-local per the no-PII rule): pyxis_rms = 6363, bot_rms = 1930, decode_fail = 0 PASS: bidirectional audio + content-fidelity validated The empirical RMS floor is 800 (pycodec2 self-test on 1kHz amp 0.5 yields ~1400; pyxis decoder hits ~6300; bot decoder hits ~1900 — all far above the ~5-50 silence floor). Codec2 is a speech codec so pure-tone round-trip is naturally lossy; the test gates on "audio bytes carry actual content energy", not lossless round-trip. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>