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 } }