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:
- it can take care of the resampling and volume control for us,
- it can stream audio over the network, and
- it makes it easier to run multiple fldigi instances (all
accessing the same sound card).
- it provides mixer controls for input and output audio streams
- it remembers which hardware is used for each application it
serves, and it remembers the mixer levels associated with that
application
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:
- Use
PulseAudio if your Linux distro ships it, and you already have the
pulseaudio daemon running (this is the case with Fedora 8/9 and Ubuntu
8.04, probably also with openSUSE 11.0). Or if you want networked
audio, etc. etc.
- Otherwise, use PortAudio and select a device
from the list(s). PortAudio is also the best way to access JACK,
through which you can use other programs as audio sources/sinks --
particularly useful with SDR software. As with PulseAudio, you can
select different capture and playback audio devices.
- The OSS
backend should be used only as a last resort. Note that it has not been
updated to support user-configurable sample rates.
On Windows:
- Use the PortAudio and select the device from the list(s).
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