-
Notifications
You must be signed in to change notification settings - Fork 61
DAX Virtual Audio
DAX (Data Audio Exchange) creates virtual audio devices on your PC that digital mode applications (WSJT-X, VARA, fldigi, JS8Call, etc.) can use as their audio input/output. Audio flows between the radio and the app through AetherSDR — no physical audio cables needed.
When DAX is enabled, AetherSDR creates virtual audio devices that appear in your system's audio device list:
| Device | Direction | Purpose |
|---|---|---|
| AetherSDR DAX 1 | Capture (input) | RX audio from Slice A |
| AetherSDR DAX 2 | Capture (input) | RX audio (available for 2nd slice) |
| AetherSDR DAX 3 | Capture (input) | RX audio (available for 3rd slice) |
| AetherSDR DAX 4 | Capture (input) | RX audio (available for 4th slice) |
| AetherSDR TX | Playback (output) | TX audio to radio |
RX path: Radio → VITA-49 UDP → AetherSDR → DAX virtual device → your app reads audio TX path: Your app writes audio → DAX TX device → AetherSDR → VITA-49 UDP → radio transmits
- Open the DIGI applet (right-side applet panel)
- Click the DAX Enable button
- The virtual devices appear immediately in PulseAudio/PipeWire
To auto-start DAX on every connection: Settings → Autostart DAX with AetherSDR
When PipeWire is detected, AetherSDR uses native pw_stream
DAX endpoints (since v0.9.5). This drops the round-trip latency
from ~400 ms (the legacy pipe-based path) to ~200 ms and uses
PipeWire's own buffer scheduling rather than relying on the
PulseAudio compatibility layer.
On systems without PipeWire, AetherSDR falls back to the legacy
PulseAudio path using module-pipe-source and module-pipe-sink.
The devices appear in:
- PipeWire apps: visible as PipeWire nodes (native path) or via the pulse-compat layer
- PulseAudio apps: visible as capture/playback devices
- JACK apps: visible via PipeWire's JACK compatibility layer
DAX2 coexistence (v0.9.5): the native PipeWire path also fixes the cases where a second client (SmartSDR / Maestro / a fellow AetherSDR instance) holds DAX channels — channel ownership is tracked per-client so disconnecting one doesn't tear down the other's audio.
Verify devices are visible:
# List DAX capture devices
pactl list sources short | grep aethersdr
# List DAX playback device
pactl list sinks short | grep aethersdrStale devices from crashed sessions are automatically cleaned up on the next DAX start.
Uses a CoreAudio HAL plugin (AetherSDRDAX.driver) installed in /Library/Audio/Plug-Ins/HAL/. The devices appear in System Settings → Sound and in any app's audio device picker.
Native DAX virtual audio devices are not yet available on Windows (issue #87). The AetherSDR Windows binary works for spectrum, waterfall, RX speaker audio, and radio control, but digital mode apps need virtual audio routing to exchange audio with AetherSDR.
Workaround: Install a third-party virtual audio cable to bridge audio between AetherSDR and your digital mode apps:
- VB-Cable (free, 1 cable; donationware for additional cables)
- Virtual Audio Cable (VAC) (paid, multiple cables)
- VoiceMeeter (free, includes virtual I/O)
Setup:
- In AetherSDR: set your PC audio output to the virtual cable input
- In your digital mode app (WSJT-X, fldigi, etc.): set the audio input to the virtual cable output
- Reverse for TX: app output → virtual cable → AetherSDR input
This is a temporary workaround until native Windows DAX is implemented. For CAT control, AetherSDR's built-in rigctld works on Windows — configure your app to use Hamlib NET rigctl at 127.0.0.1:4532.
Each DAX channel has an independent gain slider combined with a level meter (MeterSlider widget) in the CAT applet:
- RX channels (1–4): Adjust the output level sent to the virtual device. The level meter shows the current RMS audio level.
- TX channel: Adjust the input gain from the virtual device. Level meter shows real-time TX audio level with no smoothing for responsive feedback.
Gain settings persist across restarts via AppSettings.
The radio assigns DAX channels to slices based on each slice's dax setting:
-
Slice A with
dax=1→ audio appears on AetherSDR DAX 1 -
Slice B with
dax=2→ audio appears on AetherSDR DAX 2 - etc.
Set the DAX channel for a slice in the RX applet → DAX dropdown, or via the VFO widget → DAX tab.
AetherSDR uses mode-aware gating to route the correct audio source during TX:
| Mode | Audio Source |
|---|---|
| USB, LSB, AM, FM (voice) | PC microphone |
| DIGU, DIGL, RTTY, DFM (digital) | DAX TX virtual device |
| RADE (digital voice) | RADE modem engine |
This is automatic — when you TX in DIGU mode, your digital app's audio flows through the DAX TX device. When you TX in USB mode, your microphone is used. No manual switching needed.
All DAX channels use:
- Sample rate: 24,000 Hz
- Channels: 1 (mono)
- Format: signed 16-bit integer (s16le)
Ham radio DAX audio is inherently mono — SSB, CW, and digital modes are all single-channel. AetherSDR converts stereo radio audio to mono before feeding the DAX devices, and duplicates mono TX audio back to stereo for the radio.
PipeWire/PulseAudio automatically resamples if your app requests a different rate (e.g., WSJT-X at 48kHz).
- Connect to your radio in AetherSDR
- Enable DAX in the CAT applet (or auto-start via Settings)
- Enable rigctld in the CAT applet (or auto-start via Settings)
- Verify your slice is in DIGU mode (for FT8/FT4)
- Set the slice's DAX channel to 1 (VFO widget → DAX tab)
- Open WSJT-X → File → Settings → Audio tab
- Soundcard Input: Select AetherSDR DAX 1
- Soundcard Output: Select AetherSDR TX
- Click OK
Tip: If "AetherSDR DAX 1" doesn't appear, make sure DAX is enabled in the CAT applet and check with
pactl list sources short | grep aethersdr.
- Go to Settings → Radio tab
-
Rig:
Hamlib NET rigctl -
Network Server:
127.0.0.1:4532 - Click Test CAT — should turn green
-
PTT Method:
CAT(rigctld handles PTT)
- You should see FT8 signals decoding in the WSJT-X waterfall
- The DAX 1 level meter in AetherSDR's CAT applet should show activity
- To test TX: click Tune in WSJT-X — the radio should key up and you'll see power on the TX applet gauge
-
No audio in WSJT-X waterfall: Check that the slice has
dax=1set and is in DIGU mode. Verify withpactl list source-outputsthat WSJT-X is connected to the correct source. - TX audio not reaching radio: Ensure WSJT-X output is set to "AetherSDR TX", not your speakers. Check that the TX slice is in DIGU mode (not USB).
- Duplicate devices showing: If AetherSDR crashed previously, stale pipe modules may remain. Restart AetherSDR — it cleans up stale modules automatically on DAX start.
- WSJT-X says "Error in Sound Input": The PipeWire/PulseAudio node may have been destroyed (DAX toggled off). Re-enable DAX and restart WSJT-X.
Any Linux digital mode app that uses standard audio devices and Hamlib rigctld works with AetherSDR:
| Application | Modes | Input Device | Output Device | CAT | Works? |
|---|---|---|---|---|---|
| WSJT-X | FT8, FT4, JT65, JT9, Q65, WSPR | AetherSDR DAX 1 | AetherSDR TX | rigctld 4532 | Yes |
| fldigi | PSK, RTTY, MFSK, CW, etc. | AetherSDR DAX 1 | AetherSDR TX | rigctld 4532 | Yes |
| JS8Call | JS8 | AetherSDR DAX 1 | AetherSDR TX | rigctld 4532 | Yes |
| VARA HF/FM | VARA | AetherSDR DAX 1 | AetherSDR TX | rigctld 4532 | Yes |
| FreeDV | FreeDV digital voice | AetherSDR DAX 1 | AetherSDR TX | rigctld 4532 | Yes |
| Direwolf | APRS, packet | AetherSDR DAX 1 | AetherSDR TX | — | Yes (audio only) |
For SO2R (two slices simultaneously), use different DAX channels and CAT ports for each app:
| Application | DAX Channel | CAT Port |
|---|---|---|
| App on Slice A | AetherSDR DAX 1 | 4532 |
| App on Slice B | AetherSDR DAX 2 | 4533 |
Some ham radio apps are Windows-only and use Windows-specific interfaces (OmniRig, virtual COM ports) that don't work with AetherSDR's Linux DAX/rigctld:
| Application | Why Incompatible | Alternative |
|---|---|---|
| PSK Express (N7YG) | Windows-only, uses OmniRig for CAT | Use fldigi for PSK/RTTY on Linux |
| N7YG Digital Engine | Windows-only, OmniRig/N3FJP | Use fldigi for PSK/RTTY on Linux |
| HRD Digital Master | Windows-only, proprietary CAT | Use fldigi on Linux |
| N1MM Logger+ | Windows-only | Use contest loggers with Hamlib support |
If you're running one of these apps on Windows alongside AetherSDR, you would need to use SmartSDR's own DAX and CAT on the Windows side — AetherSDR's DAX is for Linux/macOS apps.
- Panadapter Controls
- VFO Widget
- RX Controls
- TX Controls
- Aetherial Audio
- Multi-Slice Operation
- Diversity and ESC
- TNF (Tracking Notch Filters)
- Memory Channels
- Profile Management
- Slice Colors
- XVTR (Transverters)
- CWX Panel
- CW Decoder
- DVK Panel
- RTTY Operation
- RADE Digital Voice
- DAX Virtual Audio
- DAX IQ Streaming
- WSJT-X Integration
- CAT Control
- TCI Server