Voice Coding is a 12-part deep dive into how GopherTrunk turns a few kilobits per second of digital voice frames back into audio — in pure Go, with no DSP libraries and no CGO. Digital voice isn’t recorded sound; it’s a model of a voice. This series walks the two vocoders GopherTrunk implements — IMBE (P25 Phase 1) and AMBE+2 (P25 Phase 2, DMR, NXDN) — their shared MBE synthesis core, the per-mode composer that wires frames to the right decoder, and everything after: enhancement, loudness, recording, encoding, and calibration.
SDR Internals gave the vocoders one episode; here each gets the full treatment, including a “problem we hit” post on the v0.7.1 call-startup acquisition squelch — why fresh P25 recordings opened with a full-scale burst of noise, and the speech-signature heuristic that fixed it.
Every post reads three ways: a TL;DR + cheat-sheet for skimmers, bold headers, tables, and diagrams for the medium read, and full prose with real code for the deep read.
New to digital voice first? See the digital voice lesson, then come back for the implementation.<ol class="post-list series-list"><li class="post-card"> <h2 class="post-card__title">Voice Coding, Part 1: What a Vocoder Is & the Pluggable Registry</h2> <p class="post-card__meta"> Deep dives </p><p class="post-card__desc">How GopherTrunk turns 2400-bit-per-second radio data back into speech — what a vocoder actually models, and the Go Vocoder interface + registry that lets IMBE and AMBE+2 plug in behind one seam.</p></li></ol><p class="blog-feed-link"> See all deep dives or subscribe via RSS. </p>