v3.15.0 — full RTP encoding coverage + control.py bug fixes
Added
- F16LE / F16BE RTP payload decoding in
parse_rtp_samplesfor radiod's float16 output mode (encodings 6 and 9). Both audio and IQ paths. - G.711 µ-law / A-law decoders for encodings 10 and 11 — pure-numpy table-based, no
audioopdependency (which was removed in Python 3.13). OpusDecoderclass inka9q.streamfor OPUS / OPUS_VOIP payloads (encodings 3 and 7). Lazy-importsopuslib; install viapip install ka9q-python[opus]. Maintains codec state across calls so packet-loss concealment works end-to-end — one instance per stream SSRC.- New
opusoptional dependency inpyproject.toml(opuslib>=3.0).
Fixed
RadiodControl.set_agc(attack_rate=...)was unreachable. It encodedStatusType.AGC_ATTACK_RATE, which does not exist in ka9q-radio'sstatus.hor inka9q/types.py— any call passingattack_rate=raisedAttributeError. Replaced with a workingthreshold:kwarg backed byAGC_THRESHOLD(which radiod actually decodes indecode_radio_commands()).- Removed 6 stale duplicate
set_*methods. In a single class, second defs silently shadow firsts — so callers were already using the correct versions further down the file. The dead first defs ofset_squelch,set_pll,set_output_channels,set_independent_sideband,set_envelope_detection, andset_opus_bitrateare gone. One of them (set_opus_bitrate) referenced a non-existentStatusType.OPUS_BITRATE— the working second def uses the correctOPUS_BIT_RATE.
Tooling / pinning
- Pin advanced from ka9q-radio
f78cff9c(1.0.0-22) tod555f1853422. Drift report confirms zero TLV-tag, encoding-enum, demod-type, or window-type changes across the 68 intervening upstream commits — only packaging, hydrasdr-driver, and internal C-struct refactors. Existing ka9q-python state (types.py,decode_status_packet,SpectrumStream, everyset_*method) was already covering the full HEAD protocol surface; this release brings the recorded compatibility tag in line.
Tests
- Fixed pre-existing
tests/test_filter_edges.py::_bare_controlhelper that did not initialise theclient_idattribute added with v3.14.0 per-(client,radiod) multicast destinations.
🤖 Generated with Claude Code