DSDLink is a Go client that connects to a goDMRLink server and decodes received DMR audio using mbelib-neo.
This client:
- Connects to a goDMRLink server using the Homebrew/MMDVM protocol
- Authenticates with the server
- Receives DMR frames from the network
- Decodes AMBE+2 (3600x2450) voice frames using mbelib-neo via CGO
- Outputs decoded audio to ALSA/aplay
- Go 1.16 or later with CGO enabled
- mbelib-neo (installed system-wide at /usr/local)
- ALSA utilities (aplay)
# Ensure mbelib-neo is installed to /usr/local
cd ~/Compiled/DSDLink/mbelib-neo/build
sudo make install
sudo ldconfig
# Build DSDLink
cd ~/Compiled/DSDLink
go build -o dsdlinkCreate a config.json file in the same directory as the executable:
{
"server_address": "localhost",
"server_port": 62031,
"password": "passw0rd",
"client_id": 1234567890
}| Field | Description | Default |
|---|---|---|
server_address |
IP or hostname of goDMRLink server | localhost |
server_port |
UDP port of the server | 62031 |
password |
Authentication password | passw0rd |
client_id |
Client ID for Homebrew protocol | 1234567890 |
If no config file is found, defaults are used.
./dsdlinkThe client will:
- Load configuration from
config.json(or use defaults) - Connect to the goDMRLink server
- Authenticate using the configured credentials
- Initialize mbelib-neo decoder
- Start aplay for 8kHz mono audio output
- Receive and decode DMR voice frames in real-time
- Network Protocol: Uses Homebrew/MMDVM protocol to authenticate and receive DMR frames
- Frame Processing: Extracts voice payload from DMR frames (33 bytes with 3 AMBE frames)
- AMBE Decoding: Uses proper DMR AMBE+2 decode pipeline:
mbe_eccAmbe3600x2450C0()- Error correction on codeword 0mbe_demodulateAmbe3600x2450Data()- Demodulationmbe_eccAmbe3600x2450Data()- Extract 49-bit AMBE datambe_processAmbe2450Data()- Decode to PCM audio
- Audio Output: Pipes 16-bit 8kHz PCM audio to aplay
MMDVM Hotspot → goDMRLink Server → DSDLink Client → mbelib-neo → aplay → Audio
- goDMRLink: https://github.com/SarahRoseLives/goDMRLink
- mbelib-neo: https://github.com/arancormonk/mbelib-neo