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
DMixplugin 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
asoundrcprovided 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
asoundrcfile.
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
}
}