GopherTrunk

module
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 25, 2026 License: Apache-2.0

README

GopherTrunk logo

GopherTrunk

Pure-Go digital-trunking radio scanner engine for RTL-SDR · HackRF · Airspy · Airspy HF+.
P25 · DMR · TETRA · NXDN · Motorola Type II · EDACS · LTR · MPT 1327 · dPMR · D-STAR · YSF.
Zero CGO, single static binary, headless daemon + Bubbletea TUI cockpit + browser web console.

CI Release License Go version Go Report Card Docs


What is this?

GopherTrunk is a software-defined-radio scanner that follows digital trunked-radio voice calls and decodes them to audio. It runs on a pool of RTL-SDR (every osmocom tuner), HackRF (One / Jawbreaker / Rad1o), Airspy R2 / Mini, and Airspy HF+ dongles, has no C dependencies at build or runtime (no librtlsdr / libhackrf / libairspy / libairspyhf / libusb / libasound2 / libmp3lame), and ships as a single ~10 MB static binary for Linux, macOS, and Windows.

Completed calls stream to Broadcastify Calls, RdioScanner, OpenMHz, and live Icecast / ShoutCast mountpoints out of the box. Why does this exist? Read The Story of GopherTrunk.

Quick start

# Linux x86_64 — see https://gophertrunk.org/downloads.html for macOS, Windows, ARM64.
VERSION=v0.2.1
curl -L -o gophertrunk.tar.gz \
  https://github.com/MattCheramie/GopherTrunk/releases/download/${VERSION}/gophertrunk-${VERSION}-linux-amd64.tar.gz
tar xzf gophertrunk.tar.gz && cd gophertrunk-${VERSION}-linux-amd64
cp config.example.yaml config.yaml
./gophertrunk version
# Plain `./gophertrunk` (no subcommand, on a TTY) drops into the
# interactive launcher: pick [1] TUI, [2] Web, or [3] Headless.
# Skip the prompt with -tui / -web / -headless.
./gophertrunk -config config.yaml

Windows users get a one-click installer that bundles Zadig for WinUSB driver setup; macOS users get notarised tarballs for Apple Silicon and Intel. Full per-OS recipes at gophertrunk.org/downloads.html.

Features

  • Trunked control-channel decoders — P25 Phase 1 + Phase 2 (full TIA-102 chain), DMR Tier II + Tier III (vendor-aware: Capacity Plus / Capacity Max grants and rest-channel tracking), NXDN, Motorola Type II / SmartZone, EDACS / GE-Marc, LTR, MPT 1327, dPMR Mode 3, TETRA TMO. Amateur-radio: D-STAR and Yaesu System Fusion.
  • Pure-Go voice path — IMBE (P25 Phase 1) and AMBE+2 (P25 Phase 2 / DMR) vocoders in Go, no DVSI / mbelib dependency. Per-call WAV + raw-frame sidecars; live PCM playback via direct ALSA / WASAPI / CoreAudio.
  • Pure-Go SDR drivers — RTL-SDR, HackRF, Airspy R2 / Mini, Airspy HF+ family. USB transport on Linux (USBDEVFS), Windows (WinUSB), macOS (IOKit). USB-disconnect self-healing recovers dongles that drop off the bus and re-enumerate without restarting the daemon. See docs/hardware.md.
  • DSP — Polyphase channelizer, Kaiser / RRC / Gaussian FIRs, FM / C4FM / GFSK / FFSK / DQPSK / π/4-DQPSK / π/8-H-DQPSK demods, Mueller-Müller + Gardner clock recovery, LMS + CMA equalizers, diversity combining.
  • APIs — gRPC + HTTP/SSE + WebSocket; optional TLS + bearer-token auth on mutations; Prometheus /metrics; pure-Go SQLite call log; in-process pub/sub event bus.
  • Outbound call streaming — Broadcastify Calls, RdioScanner, OpenMHz, live Icecast / ShoutCast with pre-encoded silence keep-alive. Pure-Go MP3 encoder. See internal/broadcast.
  • Baseband recording + offline replay — Two-channel 16-bit WAV capture and a replay driver that mounts captures back into the SDR pool as virtual tuners. Looping replay simulates a continuous source.
  • Operator surfaces — Bubbletea TUI cockpit with 12 panels, pure-browser React SPA web console, runtime config editing via PATCH /api/v1/settings, RadioReference PDF / CSV importer with a config-builder wizard.
  • Location + affiliation — NMEA-0183 GGA / RMC over the air decoded into a SQLite location_log; protocol-agnostic affiliation tracker fed from grants / registrations / affiliation events.

For the full per-protocol FEC chain reference, receiver internals, frame layouts, and API routes, see docs/architecture.md and docs/opt-in-features.md.

Status snapshot

Once a grant event lands on the bus, the engine + recorder pipeline runs end-to-end: voice device is allocated, the composer pulls IQ → PCM, the recorder writes a WAV, the call is logged to SQLite, and the API + TUI surfaces all light up. Every trunked control modulation in the Features list has an end-to-end IQ → CC chain shipping. SDRtrunk-parity subsystems (outbound streaming, baseband recording, GPS / location, affiliation tracking, decoded-message log, per-talkgroup policy) all ship.

Remaining gaps:

  • Digital-voice composer chains. FM, DMR, P25 Phase 1 / 2 decode to audio. NXDN, dPMR, TETRA, YSF, D-STAR voice (plus EDACS ProVoice) are followed and logged but not yet turned into PCM.
  • Additional SDR validation. HackRF / Airspy / HF+ drivers exercise the documented USB vendor protocols under unit tests against a mock transport; on-air validation against attached hardware is the documented follow-up.
  • FEC inner-layer real-air validation. NXDN per-protocol interleaver and TETRA on-air recovery margins need live captures to characterise.
  • Vocoder level calibration awaits reference WAVs in internal/voice/{imbe,ambe2}/testdata/.

The long-form status, per-protocol detail, and shipping-vs-pending checklist live in docs/status.md. Near-term plans live in docs/roadmap.md. Released work lives in CHANGELOG.md.

Build from source

make dist     # SPA + daemon — single binary that serves the web console at /
make build    # Go-only — fast iteration; daemon shows a helpful 404 at / until bundled
make test     # go test -race ./...
make vet      # go vet ./...
make integration  # daemon end-to-end test (no SDR required)

The per-protocol "lights up" integration tests (make integration-cc-<proto>) and the DVSI hardware-backend tests (make test-dvsi) are documented in CONTRIBUTING.md.

A bare go build ./cmd/gophertrunk works too — the binary auto-stamps its version line from Go's built-in VCS info. Useful when attaching a log to an issue and you want the commit hash in the build-info line.

Docker

docker compose up -d
curl -s http://localhost:8080/api/v1/health
curl -s http://localhost:8080/metrics | grep gophertrunk_build_info

USB pass-through recipe and the operator hardening playbook (TLS, bearer-token auth, Prometheus catalogue, smoke tests) live in docs/hardening.md.

Documentation

Operator-facing docs live at gophertrunk.org (rendered from this docs/ tree):

Support the project

GopherTrunk is developed in the open and powered entirely by community support. If it's useful to you, please consider chipping in:

More ways to help: docs/support.md.

License

See LICENSE.

Directories

Path Synopsis
cmd
gophertrunk command
voice-calibrate command
Command voice-calibrate compares an in-tree Vocoder's PCM output against a reference WAV (DSD-FME, OP25, or similar) decoded from the same compressed-frame source.
Command voice-calibrate compares an in-tree Vocoder's PCM output against a reference WAV (DSD-FME, OP25, or similar) decoded from the same compressed-frame source.
internal
api
Package api exposes GopherTrunk's read + write control surface, the streaming events feed, and the gRPC mirror of the same state.
Package api exposes GopherTrunk's read + write control surface, the streaming events feed, and the gRPC mirror of the same state.
broadcast
Package broadcast streams completed trunked-radio calls to external call aggregators — Broadcastify Calls, RdioScanner, OpenMHz — and to live Icecast/ShoutCast audio servers.
Package broadcast streams completed trunked-radio calls to external call aggregators — Broadcastify Calls, RdioScanner, OpenMHz — and to live Icecast/ShoutCast audio servers.
crypto/rc4
Package rc4 implements the RC4 stream cipher (also known as ARC4, "alleged RC4") as a keystream generator.
Package rc4 implements the RC4 stream cipher (also known as ARC4, "alleged RC4") as a keystream generator.
dsp
dsp/channelizer
Package channelizer implements an M-channel critically-sampled polyphase channelizer.
Package channelizer implements an M-channel critically-sampled polyphase channelizer.
dsp/demod
Package demod contains baseband demodulators that convert IQ streams into real-valued symbol streams (or audio, for FM).
Package demod contains baseband demodulators that convert IQ streams into real-valued symbol streams (or audio, for FM).
dsp/diversity
Package diversity combines IQ streams from N receivers tuned to the same frequency into a single per-sample IQ stream that's stronger and less faded than any one source.
Package diversity combines IQ streams from N receivers tuned to the same frequency into a single per-sample IQ stream that's stronger and less faded than any one source.
dsp/equalizer
Package equalizer implements adaptive channel equalizers used to fight simulcast distortion — the inter-symbol interference produced when multiple transmitters cover the same frequency at slightly different arrival delays at the receiver.
Package equalizer implements adaptive channel equalizers used to fight simulcast distortion — the inter-symbol interference produced when multiple transmitters cover the same frequency at slightly different arrival delays at the receiver.
dsp/fft
Package fft provides a swappable FFT abstraction.
Package fft provides a swappable FFT abstraction.
dsp/filter
Package filter implements the FIR/CIC/halfband primitives used by the DSP pipeline.
Package filter implements the FIR/CIC/halfband primitives used by the DSP pipeline.
dsp/sync
Package sync provides symbol-time recovery and frame sync correlators.
Package sync provides symbol-time recovery and frame sync correlators.
dsp/window
Package window provides standard window functions for FIR design and FFT pre-processing.
Package window provides standard window functions for FIR design and FFT pre-processing.
events
Package events implements an in-process pub/sub bus used by the engine to publish trunking events.
Package events implements an in-process pub/sub bus used by the engine to publish trunking events.
log
metrics
Package metrics exposes a Prometheus collector for GopherTrunk.
Package metrics exposes a Prometheus collector for GopherTrunk.
radio/dmr
Package dmr decodes ETSI TS 102 361 (DMR) burst structure: sync patterns, slot-type fields, and Tier II / III control signaling.
Package dmr decodes ETSI TS 102 361 (DMR) burst structure: sync patterns, slot-type fields, and Tier II / III control signaling.
radio/dmr/receiver
Package receiver wires the IQ → C4FM dibit chain that feeds the DMR control-channel state machines (Tier II conventional + Tier III trunked).
Package receiver wires the IQ → C4FM dibit chain that feeds the DMR control-channel state machines (Tier II conventional + Tier III trunked).
radio/dmr/tier2
Package tier2 decodes DMR Tier II conventional traffic.
Package tier2 decodes DMR Tier II conventional traffic.
radio/dmr/tier3
Package tier3 decodes DMR Tier III (trunked-mode) Control Signaling Blocks.
Package tier3 decodes DMR Tier III (trunked-mode) Control Signaling Blocks.
radio/dmr/voice
Package voice decodes the DMR voice path: it recognises voice superframes in a dibit stream and extracts the AMBE+2 frames they carry.
Package voice decodes the DMR voice path: it recognises voice superframes in a dibit stream and extracts the AMBE+2 frames they carry.
radio/dpmr
Package dpmr decodes dPMR (digital PMR446 / ETSI TS 102 658) Mode 3 trunking signalling.
Package dpmr decodes dPMR (digital PMR446 / ETSI TS 102 658) Mode 3 trunking signalling.
radio/dpmr/receiver
Package receiver wires the IQ → C4FM dibit chain that feeds the dPMR Mode 3 control-channel state machine.
Package receiver wires the IQ → C4FM dibit chain that feeds the dPMR Mode 3 control-channel state machine.
radio/dstar
Package dstar decodes D-STAR (Digital Smart Technology for Amateur Radio) signalling per the JARL D-STAR specification, freely published by the Japanese Amateur Radio League.
Package dstar decodes D-STAR (Digital Smart Technology for Amateur Radio) signalling per the JARL D-STAR specification, freely published by the Japanese Amateur Radio League.
radio/dstar/receiver
Package receiver wires the IQ → GMSK bit chain that feeds the D-STAR repeater-channel state machine.
Package receiver wires the IQ → GMSK bit chain that feeds the D-STAR repeater-channel state machine.
radio/edacs
Package edacs decodes Enhanced Digital Access Communications System trunked control channels (also marketed as GE-Marc / Ericsson EDACS).
Package edacs decodes Enhanced Digital Access Communications System trunked control channels (also marketed as GE-Marc / Ericsson EDACS).
radio/edacs/receiver
Package receiver wires the IQ → GFSK bit chain that feeds the EDACS / GE-Marc control-channel state machine.
Package receiver wires the IQ → GFSK bit chain that feeds the EDACS / GE-Marc control-channel state machine.
radio/framing
Package framing provides the bit-level primitives shared across P25, DMR, and NXDN: bit packing, CRC, Hamming, Golay, and convolutional/Viterbi decoders.
Package framing provides the bit-level primitives shared across P25, DMR, and NXDN: bit packing, CRC, Hamming, Golay, and convolutional/Viterbi decoders.
radio/location
Package location decodes geographic positions reported over the air by trunked-radio subscriber units — P25 Motorola Unit GPS, L3Harris Talker GPS, and DMR LRRP all ultimately carry a latitude/longitude pair, and several (Tait CCDI, many MOTOTRBO GPS profiles) transport it as a verbatim NMEA-0183 sentence.
Package location decodes geographic positions reported over the air by trunked-radio subscriber units — P25 Motorola Unit GPS, L3Harris Talker GPS, and DMR LRRP all ultimately carry a latitude/longitude pair, and several (Tait CCDI, many MOTOTRBO GPS profiles) transport it as a verbatim NMEA-0183 sentence.
radio/ltr
Package ltr decodes Logic Trunked Radio (LTR) — the legacy distributed-trunking system invented by E.F. Johnson in the 1970s and still in deployment for utility / industrial fleets.
Package ltr decodes Logic Trunked Radio (LTR) — the legacy distributed-trunking system invented by E.F. Johnson in the 1970s and still in deployment for utility / industrial fleets.
radio/ltr/receiver
Package receiver wires the IQ → sub-audible bit chain that feeds the LTR per-repeater state machine.
Package receiver wires the IQ → sub-audible bit chain that feeds the LTR per-repeater state machine.
radio/motorola
Package motorola decodes Motorola Type II / SmartZone trunked control channels.
Package motorola decodes Motorola Type II / SmartZone trunked control channels.
radio/motorola/receiver
Package receiver wires the IQ → MSK bit chain that feeds the Motorola Type II / SmartZone control-channel state machine.
Package receiver wires the IQ → MSK bit chain that feeds the Motorola Type II / SmartZone control-channel state machine.
radio/mpt1327
Package mpt1327 decodes MPT 1327 trunked control-channel signaling — the UK / Commonwealth utility trunking system standardised by the UK Department of Trade and Industry's Code of Practice MPT 1327 (1988).
Package mpt1327 decodes MPT 1327 trunked control-channel signaling — the UK / Commonwealth utility trunking system standardised by the UK Department of Trade and Industry's Code of Practice MPT 1327 (1988).
radio/mpt1327/receiver
Package receiver wires the IQ → FFSK bit chain that feeds the MPT 1327 control-channel state machine.
Package receiver wires the IQ → FFSK bit chain that feeds the MPT 1327 control-channel state machine.
radio/nxdn
Package nxdn decodes NXDN frame structure (TIA-102.AABG / NXDN technical specification rev 1.4).
Package nxdn decodes NXDN frame structure (TIA-102.AABG / NXDN technical specification rev 1.4).
radio/nxdn/receiver
Package receiver wires the IQ → C4FM dibit chain that feeds the NXDN control-channel state machine for the 9600-baud 4-FSK variant (the most common deployment; the 4800-baud BFSK variant uses a 2-level slicer and lives in a follow-up).
Package receiver wires the IQ → C4FM dibit chain that feeds the NXDN control-channel state machine for the 9600-baud 4-FSK variant (the most common deployment; the 4800-baud BFSK variant uses a 2-level slicer and lives in a follow-up).
radio/p25
Package p25 holds protocol-neutral helpers shared by the P25 Phase 1 and Phase 2 packages.
Package p25 holds protocol-neutral helpers shared by the P25 Phase 1 and Phase 2 packages.
radio/p25/phase1
Package phase1 decodes the P25 Phase 1 (C4FM, FDMA) frame structure.
Package phase1 decodes the P25 Phase 1 (C4FM, FDMA) frame structure.
radio/p25/phase1/receiver
Package receiver wires the IQ → dibit chain that feeds either the P25 Phase 1 LDU assembler (voice path) or the control-channel state machine (CC path) — or both at once.
Package receiver wires the IQ → dibit chain that feeds either the P25 Phase 1 LDU assembler (voice path) or the control-channel state machine (CC path) — or both at once.
radio/p25/phase2
Package phase2 decodes P25 Phase 2 traffic-channel framing per TIA-102.BBAB / BBAC.
Package phase2 decodes P25 Phase 2 traffic-channel framing per TIA-102.BBAB / BBAC.
radio/p25/phase2/receiver
Package receiver wires the IQ → H-DQPSK dibit chain that feeds the P25 Phase 2 control-channel state machine.
Package receiver wires the IQ → H-DQPSK dibit chain that feeds the P25 Phase 2 control-channel state machine.
radio/tetra
Package tetra decodes TETRA (Terrestrial Trunked Radio) Trunked- Mode Operation (TMO) signalling per ETSI EN 300 392-2.
Package tetra decodes TETRA (Terrestrial Trunked Radio) Trunked- Mode Operation (TMO) signalling per ETSI EN 300 392-2.
radio/tetra/receiver
Package receiver wires the IQ → π/4-DQPSK dibit chain that feeds the TETRA TMO control-channel state machine.
Package receiver wires the IQ → π/4-DQPSK dibit chain that feeds the TETRA TMO control-channel state machine.
radio/ysf
Package ysf decodes the wire format of Yaesu System Fusion, the amateur-radio digital mode.
Package ysf decodes the wire format of Yaesu System Fusion, the amateur-radio digital mode.
radio/ysf/receiver
Package receiver wires the IQ → C4FM dibit chain that feeds the YSF control-channel state machine.
Package receiver wires the IQ → C4FM dibit chain that feeds the YSF control-channel state machine.
scanner/ccdecoder
Package ccdecoder is the connector that closes the IQ → control- channel decoder gap listed in the README "Status & known gaps".
Package ccdecoder is the connector that closes the IQ → control- channel decoder gap listed in the README "Status & known gaps".
scanner/cchunt
Package cchunt is the multi-system control-channel scanner.
Package cchunt is the multi-system control-channel scanner.
scanner/conventional
Package conventional is the fixed-frequency analog FM scanner.
Package conventional is the fixed-frequency analog FM scanner.
sdr
Package sdr defines the abstract Device interface for IQ sources and the pool that supervises a fleet of dongles.
Package sdr defines the abstract Device interface for IQ sources and the pool that supervises a fleet of dongles.
sdr/airspy
Package airspy is a pure-Go driver for the Airspy R2 / Airspy Mini software-defined radios, implementing sdr.Driver and sdr.Device.
Package airspy is a pure-Go driver for the Airspy R2 / Airspy Mini software-defined radios, implementing sdr.Driver and sdr.Device.
sdr/airspyhf
Package airspyhf is a pure-Go driver for the Airspy HF+ family (Discovery, Dual Port, and the legacy HF+), implementing sdr.Driver and sdr.Device.
Package airspyhf is a pure-Go driver for the Airspy HF+ family (Discovery, Dual Port, and the legacy HF+), implementing sdr.Driver and sdr.Device.
sdr/baseband
Package baseband adds wideband IQ recording and offline replay to the SDR layer.
Package baseband adds wideband IQ recording and offline replay to the SDR layer.
sdr/hackrf
Package hackrf is a pure-Go driver for the Great Scott Gadgets HackRF One software-defined radio, implementing the sdr.Driver and sdr.Device interfaces.
Package hackrf is a pure-Go driver for the Great Scott Gadgets HackRF One software-defined radio, implementing the sdr.Driver and sdr.Device interfaces.
sdr/rtlsdr/purego
Package purego is the pure-Go RTL-SDR driver — the sdr.Device / sdr.Driver implementation that composes the platform USB transport (internal/sdr/rtlsdr/usb), the RTL2832U register layer (internal/sdr/rtlsdr/rtl2832u), and the per-chip tuner drivers (internal/sdr/rtlsdr/tuners).
Package purego is the pure-Go RTL-SDR driver — the sdr.Device / sdr.Driver implementation that composes the platform USB transport (internal/sdr/rtlsdr/usb), the RTL2832U register layer (internal/sdr/rtlsdr/rtl2832u), and the per-chip tuner drivers (internal/sdr/rtlsdr/tuners).
sdr/rtlsdr/rtl2832u
Package rtl2832u is the pure-Go register / I2C-bridge layer that sits between the platform USB transport (internal/sdr/rtlsdr/usb) and the per-tuner drivers.
Package rtl2832u is the pure-Go register / I2C-bridge layer that sits between the platform USB transport (internal/sdr/rtlsdr/usb) and the per-tuner drivers.
sdr/rtlsdr/tuners
Package tuners houses the per-chip tuner drivers that sit between the RTL2832U register layer (internal/sdr/rtlsdr/rtl2832u) and the top-level [sdr.Device].
Package tuners houses the per-chip tuner drivers that sit between the RTL2832U register layer (internal/sdr/rtlsdr/rtl2832u) and the top-level [sdr.Device].
sdr/rtlsdr/usb
Package usb is the platform-abstraction layer that the pure-Go RTL-SDR driver speaks to.
Package usb is the platform-abstraction layer that the pure-Go RTL-SDR driver speaks to.
storage
Package storage persists GopherTrunk's runtime data to disk.
Package storage persists GopherTrunk's runtime data to disk.
trunking
Package trunking holds the cross-protocol orchestration: System definitions, control-channel hunting, talkgroup priority, voice grant following, and (later) multi-site neighbor tracking.
Package trunking holds the cross-protocol orchestration: System definitions, control-channel hunting, talkgroup priority, voice grant following, and (later) multi-site neighbor tracking.
tui
Package tui is the GopherTrunk TUI — a read-only operator view over the daemon's REST + SSE API.
Package tui is the GopherTrunk TUI — a read-only operator view over the daemon's REST + SSE API.
tui/client
Package client is the TUI's network layer.
Package client is the TUI's network layer.
tui/panels
Package panels contains the eight read-only panels rendered by the TUI.
Package panels contains the eight read-only panels rendered by the TUI.
tui/state
Package state holds the SharedState struct and PanelKind enum so the root tui package and panels sub-package can both import it without an import cycle.
Package state holds the SharedState struct and PanelKind enum so the root tui package and panels sub-package can both import it without an import cycle.
tui/theme
Package theme owns the TUI's semantic colour palette and the derived high-level lipgloss styles.
Package theme owns the TUI's semantic colour palette and the derived high-level lipgloss styles.
version
Package version exposes build metadata injected at link time via `go build -ldflags "-X ...Version=..." -ldflags "-X ...Commit=..." -ldflags "-X ...BuildTime=..."`.
Package version exposes build metadata injected at link time via `go build -ldflags "-X ...Version=..." -ldflags "-X ...Commit=..." -ldflags "-X ...BuildTime=..."`.
voice
Package voice provides the voice-decoding plumbing that sits between the trunking engine and the audio output / recording layer.
Package voice provides the voice-decoding plumbing that sits between the trunking engine and the audio output / recording layer.
voice/ambe2
Package ambe2 is the in-progress pure-Go AMBE+2 2400 bps voice decoder used by P25 Phase 2, DMR (Tier II / III), and NXDN voice frames.
Package ambe2 is the in-progress pure-Go AMBE+2 2400 bps voice decoder used by P25 Phase 2, DMR (Tier II / III), and NXDN voice frames.
voice/calibrate
Package calibrate compares an in-tree Vocoder's PCM output against a reference WAV (typically produced by DSD-FME or OP25) from the same raw vocoder-frame source.
Package calibrate compares an in-tree Vocoder's PCM output against a reference WAV (typically produced by DSD-FME or OP25) from the same raw vocoder-frame source.
voice/composer
Package composer bridges the trunking engine's CallStart events to the per-call demod chain that turns IQ samples on a freshly-tuned Voice device into 16-bit PCM the recorder can write.
Package composer bridges the trunking engine's CallStart events to the per-call demod chain that turns IQ samples on a freshly-tuned Voice device into 16-bit PCM the recorder can write.
voice/dvsi
Package dvsi implements the DVSI USB-3000 / AMBE-3003 hardware vocoder backend.
Package dvsi implements the DVSI USB-3000 / AMBE-3003 hardware vocoder backend.
voice/imbe
Package imbe is the pure-Go IMBE 4400 bps voice decoder used by P25 Phase 1 LDU1 / LDU2 frames.
Package imbe is the pure-Go IMBE 4400 bps voice decoder used by P25 Phase 1 LDU1 / LDU2 frames.
voice/mbe
Package mbe is the shared Multi-Band Excitation synthesis core used by GopherTrunk's IMBE 4400 (P25 Phase 1) and AMBE+2 2400 (P25 Phase 2 / DMR / NXDN) decoders.
Package mbe is the shared Multi-Band Excitation synthesis core used by GopherTrunk's IMBE 4400 (P25 Phase 1) and AMBE+2 2400 (P25 Phase 2 / DMR / NXDN) decoders.
voice/mp3
Package mp3 provides a pure-Go MP3 encoder used to compress completed call audio before it is streamed to broadcast aggregators (Broadcastify Calls, RdioScanner, OpenMHz, Icecast).
Package mp3 provides a pure-Go MP3 encoder used to compress completed call audio before it is streamed to broadcast aggregators (Broadcastify Calls, RdioScanner, OpenMHz, Icecast).
voice/player
Package player is the live-audio sink that turns int16 PCM coming out of the per-call composer / conventional scanner into sound out of the host's speakers.
Package player is the live-audio sink that turns int16 PCM coming out of the per-call composer / conventional scanner into sound out of the host's speakers.
voice/toneout
Package toneout detects fire/EMS paging tones — Two-Tone Sequential (Motorola Quick Call II), single-tone, and DTMF — over the PCM stream produced by the voice composer, and emits events.KindToneAlert when a configured profile matches.
Package toneout detects fire/EMS paging tones — Two-Tone Sequential (Motorola Quick Call II), single-tone, and DTMF — over the PCM stream produced by the voice composer, and emits events.KindToneAlert when a configured profile matches.
samples
cmd/audio_smoketest command
Audio-to-bits smoke-test harness for the MPT 1327 control channel.
Audio-to-bits smoke-test harness for the MPT 1327 control channel.
Package web embeds the built SPA so the daemon binary can serve the operator console without a sibling `gophertrunk-web/` directory.
Package web embeds the built SPA so the daemon binary can serve the operator console without a sibling `gophertrunk-web/` directory.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL