mirror of https://github.com/DJ2LS/FreeDATA.git
With blocksize=0 PortAudio picks the capture block size per device. On the devices measured for the previous commit it happened to deliver multiple-of-6 block sizes, but other hardware returns 512/1024-class blocks. codec2's resample48_to_8 asserts len(input) % 6 == 0 (FDMDV_OS_48), so on such a device every captured block raised AssertionError, the DSP chain never ran, and RX was completely deaf. The fix decouples the capture block size from the DSP block size instead of pinning the stream back to blocksize=4800, which is the configuration that negotiates a two-period ring on snd-aloop and drops audio continuously (the deaf-on-loopback case the previous commit fixed). Captured audio is appended to a carry buffer and the DSP chain runs once per whole RX_DSP_BLOCK_48K (4800 samples, 100 ms) available; the remainder carries into the next captured block, so the sample stream handed to the resampler stays gapless (its filter memory spans blocks) and always has a valid length, whatever the device delivers. Running the DSP only on whole 4800-sample blocks also fixes three silent degradations that short blocks caused: - calculate_fft pads its input to 800 samples at 8 kHz, so short blocks fed the waterfall, channel-busy detection and audio_dbfs mostly zeros - enqueue_streaming_audio_chunks zero-pads every block up to 2400 samples and emits one chunk per block regardless of size, so short blocks streamed mostly silence and flooded the RX audio queue - normalize_audio (rx_auto_audio_level, on by default) normalizes per block, so shorter blocks made the auto level faster and jumpier Tests: the old test captured 4800-frame blocks, a multiple of 6, which is exactly why this was never caught. The capture size is now 512 and TestRxAudioReblocking covers odd sizes never reaching the resampler, exact block accounting including the carried remainder, sample-stream preservation (nothing dropped, duplicated or reordered), and every re-blocked block being accepted end to end by the real codec2 resampler. Against the pre-fix code 5 of the 6 tests fail; with the fix all pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| test_arq_session.py | ||
| test_config.py | ||
| test_data_frame_factory.py | ||
| test_data_type_handler.py | ||
| test_message_database.py | ||
| test_message_p2p.py | ||
| test_message_protocol.py | ||
| test_norm_protocol.py | ||
| test_p2p_connection.py | ||
| test_protocols.py | ||
| test_rx_audio_callback.py | ||
| test_server.py | ||