Skip to main content

A better way to handle audio devices for digital modes

Working with digital modes, usually, is done by paring a computer with a transceiver. This mostly involves some sort of audio device. That audio device then is used to pass audio from the transceiver to the software doing the digital stuff, and the other way around. Documentations for various digital modes, explains to you how to use complicated steps and cryptic devices names to get the job done. But it does not have to be that way. This article gives you an overview of the Linux audio landscape and how you can use digital modes more comfortably.

Consider you have two loudspeakers and one audio player. To listen to that audio, you have to plug in a cable between one loudspeaker and the audio player. When ever you want to hear that audio on the other loudspeaker, you pull out the cable and plug it in to that other loudspeaker. Now imagine, you get some more players and some more loudspeakers. You might even get some devices to change the audio (filters, effects) which you have to place between a player and a loudspeaker.

Constantly having to move cables from one device to another can get annoying pretty fast. And with more and more devices involved, it is likely to get chaotic and errors are easily made.

The solution for this would be, to get yourself a mixing console in between. You will then connect all players, filters, effects and loudspeakers to that mixing console. The mixing console then allows you to use buttons, faders and knobs to control the flow and volume of the audio signal from its source to its destination.

With that in mind, let us have a look at what most documentation related to digital modes tells you to do.

You are taught to use aplay -l or arecord -l and identify the card and device number for the audio interface you intend to use. You then have to build yourself a hardware identifier, you then have to use to configure your program.

This is like our analogy from above, and it gets even worse. When ever you want to switch to another device, you have to:

  • Stop program

  • Identify the other device

  • Change configuration

  • Start program

You also have to ensure, you never start two programs in parallel configured to use the same audio device.

But there is a better way to do this. Like with in the above analogy, we can use a mixing console in between. That mixing console is a tool called PulseAudio. And more recently, PipeWire brings itself into position to replace PulseAudio.

So how does this work, then? Easy, just use default for your ALSA device IDs. Then use pavucontrol to configure the actual input and output devices.

In my Dire Wolf configuration, I have ADEVICE default. Once Dire Wolf is running, I open PulseAudio Volume Control (pavucontrol) and check if it is linked to the correct device. In the example below, you see its output is connected to PCM2903B Audio Codec Analog Stereo which is my Yaesu FT-991A.

pavucontrol playback

The same goes for the input.

pavucontrol recording

Should I choose to switch to my Lab599 Discovery TX-500 which I connect using a Digirig sound card, I just open pavucontrol and change both, the capture and playback device for Dire Wolf. I do not even have to restart Dire Wolf to do so.

The same also works for Ardop (use ardopc 8515 default default), Fldigi, and Wsjtx.

The playback device of WSJTX only shows up as long as it is sending audio. You can use Tune in WSJTX to send a constant tone, giving you the chance to set the correct output. It will remember its last setting when ever it pops up for a transmit cycle.