GopherTrunk v0.5.7 — social announcement drafts
One-click copy-paste blurbs for posting the v0.5.7 release. Each block below is a fenced code block so the rendered-markdown “copy” button grabs exactly what you’d paste.
Release: https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.5.7
Reddit — title
GopherTrunk v0.5.7 — P25 Phase 2 voice now locks on RTL-SDR (H-DQPSK carrier-frequency recovery), decoded voice fades cleanly at call end, the WebUI plays one call at a time instead of overlapping talkgroups, and recording filenames render in your display timezone
Reddit — body
**[GopherTrunk](https://gophertrunk.org) v0.5.7 is out** — pure-Go digital-trunking scanner for RTL-SDR / HackRF / Airspy / USRP. P25 (Phase 1+2), DMR (AMBE+2 voice), NXDN, Motorola Type II, EDACS, LTR, MPT 1327, dPMR, D-STAR, YSF, M17, plus APRS, POCSAG + FLEX paging, and AIS / DSC / ADS-B. No CGO, single static binary for Linux / macOS / Windows.
**What's new since v0.5.6:**
* **P25 Phase 2 voice now locks on ordinary tuners** (#813). The Phase 2 voice follower used to never lock a superframe on real traffic (a reporter saw `superframes=0` on 67/67 calls) even though the same RTL-SDR decodes Phase 1 fine — the H-DQPSK receiver had no carrier-frequency recovery, so a real tuner's residual offset rotated every symbol out of its quadrant and the outbound sync never correlated. The receiver now does a coarse carrier seed → NCO de-rotation → AGC → Gardner → Costas fine loop (rotation-aware lock for the π/8 H-DQPSK constellation), fixing both the voice follower and the control path. Clean zero-offset streams are a no-op.
* **Decoded digital voice fades to zero at call end.** Short P25/DMR overs used to end on a hard waveform discontinuity — an audible scratch/click — because digital voice, unlike the analog FM chain, had no end-of-call ramp. Calls now append a short (~10 ms) linear fade to both the recorded WAV and the live decoded audio.
* **WebUI live audio plays one call at a time.** The browser player opened the audio stream unfiltered, so concurrent voice calls arrived interleaved and talkgroups overlapped. It now follows the primary (most recently started) active call and filters to its device, switching cleanly between calls — standard scanner behaviour.
* **Recording filenames render in your display timezone**, not always UTC. The per-call WAV basename now honours `display.timezone` (a non-UTC zone gets a filename-safe numeric offset like `+1000`; UTC still formats as a literal `Z`, so existing filenames are unchanged).
* **Spectrum panels keep their follow state live** (#810). The Mixer/Tuning/Histogram/Constellation/SymbolScope panels could freeze on a stale "following call" when opened directly; they now poll active calls themselves, and re-checking Hold parks the view on the control channel instead of a possibly-stale call frequency.
* **P25 Phase 2 per-call MAC census** (#813) — an end-of-call census logs superframes locked, a per-slot subframe histogram, and MAC subframes/PDUs decoded, so a silent decode pins exactly which pipeline stage produced nothing on real air.
**Downloads** (Linux / macOS / Windows, x64 + ARM64): https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.5.7
**Docs:** https://gophertrunk.org
Heads-up: the v0.x line is still flagged prerelease — actively developed, feedback / captures / bug reports very welcome.
Discord
**GopherTrunk v0.5.7 is out** — pure-Go trunking scanner for RTL-SDR / HackRF / Airspy / USRP. P25, DMR, NXDN, M17, analog trunked, APRS, POCSAG + FLEX paging, AIS / DSC / ADS-B. Single static binary, zero CGO.
**What's new since v0.5.6:**
- **P25 Phase 2 voice now locks on ordinary tuners** (#813) — H-DQPSK carrier-frequency recovery fixes the `superframes=0` no-lock on RTL-SDR that left Phase 2 voice silent.
- **Decoded digital voice fades to zero at call end** — kills the trailing scratch/click on short P25/DMR overs, in both recordings and live audio.
- **WebUI live audio plays one call at a time** — follows the primary active call instead of mixing overlapping talkgroups.
- **Recording filenames render in your display timezone** — honours `display.timezone` instead of hard-coded UTC.
- **Spectrum panels keep their follow state live** (#810) — no more stale "following call"; Hold parks on the control channel.
Download: <https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.5.7>
Docs: <https://gophertrunk.org>