Sound Card Configuration

Sound Card Configuration

A few words about sound I/O on the PC.  "You are in a maze of twisty little passages, all alike".

PortAudio, PulseAudio and OSS are different ways in which fldigi can access your sound card through the various sound systems.

OSS was the first audio backend in fldigi. It works with the Linux sound system of the same name, which has now been replaced by ALSA but is still supported via an emulation layer.  Its only advantage, as an audio backend, is that it's simple and doesn't require any external libraries.

The PortAudio backend was written subsequently to support OSS on Linux and FreeBSD, ALSA and JACK on Linux, CoreAudio on OS X, and also the various sound APIs on Windows -- all through the same PortAudio library.

PulseAudio is more than an audio hardware access layer; refer to its website for a summary of what it does. Fldigi supports it mainly because many Linux distributions are now integrating it with their desktops, but also because it has a few interesting features: 

In the future it might be possible to replace all of these with a single backend, without any loss of functionality, performance, sound system or platform support. That'll be the day! Until then:

On Linux:

On Windows:


Select the SndCrd tab on the configuration dialog.

On Linux Fldigi can interface to the sound card using either the OSS, the Portaudio, or the PulseAudio.  Each of the appropriate libraries must be present on the computer to use that particular sound i/o.

On Windows Fldigi uses the Portaudio sound driver only.

It is also possible to configure Fldigi with File I/O only, which is useful for testing the application without an interface to the sound card.  In the File I/O only configuration you can record and playback audio files in a number of different formats including the "wav" format associated with the Windows operating system.

The program will find all active sound cards and the associated drivers for both.  Select the sound card and driver type that will be used with the program.  I recommend using the Pulseudio device driver if that is available on your Linux distribution.  



If Pulse or Port audio is selected then you can either allow the program to use the auto detect to determine the best sound card sampling rate, or you can pick from the drop down list.  If you know your RX and TX sound card oscillator correction factors you can enter them now.  If not you can determine the RX rate correction using a special WWV modem built into Fldigi.  The decoder and encoder logic for each of the various modems require a specific sound card sample rate which may not be the the actual sound card sample rate.  The conversion between the modem sample rate and the sound card sample rate is accomplished by one of a set of sample rate converters.

Sound card oscillators may have a slight error in frequency that causes their sampling rate to not be the value specified.  This error is usually small enough to be measured in a parts per million.  Fldigi uses a technique called rate conversion to correct the sampled waveform for this error.  The error can be measured and the correction factor determined by using the WWV calibration modem.  The supporting library used for the converter provides several different levels of conversion, Best, Medium, Fastest and Liner Interpolator.  The default, Medium interpolator, will be satisfactory for most sound cards.  If you are running fldigi on a computer with limited cpu power you might find it necessary to select one of the more cpu efficient converters, either Fastest or Linear.  Each gives progressively poorer performance but use fewer cpu cycles to perform the frequency conversion.  You should also be sure that the cpu type is set to "Slow cpu" on the miscellaneous configuration tab.



Mixer controls are only active on Linux and if the distribution provides application layer mixer support.  Select whether you will be using Line-In or Mic-In for the audio connection from the receiver output.  Fldigi ALWAYS expects to use the Line-Out for driving the transmitter audio.  Set the PCM level for your soundcard.  If you check "Manage mixer" then the Tx and Rx "volume" controls on the main fldigi dialog will be active.

Transmit level attenuator

It is often difficult to adjust the audio drive for the point where ALC is just barely active.  Mixer controls are OK, but not usuallyt designed for very small changes.  They are after all designed for adjusting listening levels.  fldigi provides the ability to control the audio drive in increments of 0.1 dB over a 30 dB range.  This control is a part of the sound card set up:


Set this control for -6 dB and then adjust the sound card mixer control for the best ALC level you can achieve.  Then adjust the Tx Atten control for best "just visible" ALC on the transceiver.  That should give you a very clean PSK signal.  You can adjust the Tx Atten from the keyboard whenever fldigi's transmit text has keyboard focus.

ALT minus  decrements in 0.1 dB steps
ALT equals increments in 0.1 dB steps

On OS X use the command-minus and command-equals for the same keyboard control.

Multiple sound cards

In systems with multiple sound cards they will not always be in the correct sort order on boot.  This may cause problems not only with fldigi, but other apps that depend on a certain sound card.  The work around is not that difficult and will reliably place the preferred sound card in the correct slot. Sound cards are numbered from 0 on to however many cards you have in your computer. Usually its only 2.

The 1st step is to determine the correct id of the cards in your system.  Open a terminal and issue the following :: aplay -l

Here is an example of what you may see.

**** List of PLAYBACK Hardware Devices ****
card 0: ICH6 [Intel ICH6], device 0: Intel ICH [Intel ICH6]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: ICH6 [Intel ICH6], device 4: Intel ICH - IEC958 [Intel ICH6 - IEC958]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: AudioPCI [Ensoniq AudioPCI], device 1: ES1371/2 [ES1371 DAC1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

If it does not already exist you will need to create the following file:

/etc/modprobe.d/alsa-options

You will have to root privileges to create the file, so a system such as Ubuntu that depends on sudo you would enter

$ sudo touch /etc/modprobe.d/alsa-options

Using the above example, you edit that file so that it's contents contain

# Set preferred order of the sound cards
options snd-ICH6 index=0
options snd-AudioPCI index=1

The simplest terminal editor that is on just about every distribution is
"nano" so to edit the file you just created you can again use sudo

$ sudo nano /etc/modprobe.d/alsa-options

If you want to test this new file, reboot and open a terminal and again issue the command :: aplay -l

You will normally find that your internet browser and/or Flash want to use card 0, so you then may want to consider using card 1 for fldigi

Here is another example with 3 sound systems; mother board ALC1200, a thumb-drive audio codec, and a SignaLink USB:

**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 0: ALC1200 Analog [ALC1200 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Set [USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: default [USB Audio CODEC ], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

The /etc/modprobe.d/alsa-options contains these lines

options snd-NVidia index=0
options snd-Set index=1
options snd-CODEC index=2

Notice that each line is uniquely related to the aplay -l report