Skip to content

DAX Virtual Audio

Jeremy Fielder edited this page May 9, 2026 · 6 revisions

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.

How It Works

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

Enabling DAX

  1. Open the DIGI applet (right-side applet panel)
  2. Click the DAX Enable button
  3. The virtual devices appear immediately in PulseAudio/PipeWire

To auto-start DAX on every connection: Settings → Autostart DAX with AetherSDR

Platform Support

Linux (PipeWire native / PulseAudio)

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 aethersdr

Stale devices from crashed sessions are automatically cleaned up on the next DAX start.

macOS

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.

Windows

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:

Setup:

  1. In AetherSDR: set your PC audio output to the virtual cable input
  2. In your digital mode app (WSJT-X, fldigi, etc.): set the audio input to the virtual cable output
  3. 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.

Per-Channel Gain

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.

Slice-to-DAX Channel Mapping

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.

TX Audio Routing

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.

Audio Format

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).

Wiring WSJT-X to DAX (Linux)

Step 1: Enable DAX and CAT

  1. Connect to your radio in AetherSDR
  2. Enable DAX in the CAT applet (or auto-start via Settings)
  3. Enable rigctld in the CAT applet (or auto-start via Settings)
  4. Verify your slice is in DIGU mode (for FT8/FT4)
  5. Set the slice's DAX channel to 1 (VFO widget → DAX tab)

Step 2: Configure WSJT-X Audio

  1. Open WSJT-X → File → Settings → Audio tab
  2. Soundcard Input: Select AetherSDR DAX 1
  3. Soundcard Output: Select AetherSDR TX
  4. 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.

Step 3: Configure WSJT-X Radio

  1. Go to Settings → Radio tab
  2. Rig: Hamlib NET rigctl
  3. Network Server: 127.0.0.1:4532
  4. Click Test CAT — should turn green
  5. PTT Method: CAT (rigctld handles PTT)

Step 4: Verify

  1. You should see FT8 signals decoding in the WSJT-X waterfall
  2. The DAX 1 level meter in AetherSDR's CAT applet should show activity
  3. To test TX: click Tune in WSJT-X — the radio should key up and you'll see power on the TX applet gauge

Troubleshooting

  • No audio in WSJT-X waterfall: Check that the slice has dax=1 set and is in DIGU mode. Verify with pactl list source-outputs that 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.

Compatible Applications

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

Incompatible Applications

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.

Clone this wiki locally