Advanced Linux Sound Architecture
ALSA is a boon for software TTS users --- you can now use
your soundcard to produce spoken output while not losing
audio output from other applications such as music players and
streaming radio stations.
Emacspeak implements an ALSA-enabled TTS server for the IBM
ViaVoice engine ---
using this server effectively requires appropriately tuning the
parameters in the user's asoundrc file to:
- Enable the
DMix plugin to enable software mixing
of multiple channels of audio.
- To configure the various parameters ALSA itself uses.
Depending on how well your sound-card is supported by ALSA,
the above can be either trivially simple or a tedious process of
trial and error. I'm writing this up to:
- Collect a list of sound cards on which the
asoundrc provided with Emacspeak works as
expected.
- In the hope that the wider ALSA community discovers and helps
flesh out this material;
my hope is that
the ALSA community has more insight into how these settings
work.
For the above, works effectively means the
following:
- The TTS engine speaks without perceptible stuttering or other
audio artifacts.
- The engine is responsive with respect to starting and
stopping speech; especially when typing fast at high speech
rates.
- The TTS engine does not interfere with other alsa-enabled
applications, e.g.
mplayer.
At the end of this entry, you can find the relevant section
from the asoundrc file from the Emacspeak
distribution, with comments indicating which sound cards perform
well.
An example of a card that does not work well with these
settings is the Audigy-LS from Creative; the TTS engine works on
that card, but performs degrades:
- mplayer cannot use the audio device; (aplay and mpg321 are
able to share the card with the TTS engine.)
- Speech does not stop immediately as on the soundcards
enumerated in the
asoundrc file.
Id: asoundrc,v 1.3 2006/05/23 00:22:16 raman Exp $
#these numbers work on the following:
# aplay -l | head 1
# I82801DBICH4 [Intel 82801DB-ICH4] (IBM Thinkpads)
# ICH6 [Intel ICH6],
# default device is a mixer
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,0"
format s16_LE
period_time 0
period_size 1024
buffer_size 4096
rate 44100
}
bindings {
0 0
1 1
}
}