---
title: festival Text-To-Speech
layout: default
created: 2009-02-22 00:53:11 +0100
updated: 2009-02-22 00:54:41 +0100
toc: false
tags:
  - know-how
  - software
  - linux
  - sound
---
Simultaneous playback
=====================

The `festival` text-to-speech synthesizer seems to use normal ALSA playback instead of PulseAudio. This leads to it
failing when there's already something playing. E.g. if you're listening to music with *Rhythmbox*, *festival* fails
with this message:

    Linux: can't open /dev/dsp

To make it use PulseAudio, we can re-route the audio through the `pacat` utility as proposed on [this bugreport](https://bugzilla.redhat.com/show_bug.cgi?id=467531).
Just add these few lines to your `/usr/share/festival/init.scm`:

~~~
(Parameter.set 'Audio_Command "pacat --channels=1 --rate=$SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'raw)
~~~

**Note:** I had to use `raw` as the required format since the `snd` from the bugreport gave me loud noise instead of
speech. `raw` works fine.


Announcing system errors
========================

On [fedorabook.com](http://dailypackage.fedorabook.com/index.php?/archives/42-Productive-Monday-Festival-Speech) I
found this little script which will read every new line from `/var/log/messages`:

{% highlight bash %}
#!/bin/bash
tail -0f /var/log/messages | sed "s/^[^:]*:[^:]*:[^:]*: //" | while read LINE
#tail -0f /var/log/syslog | sed "s/^[^:]*:[^:]*:[^:]*: //" | while read LINE
#tail -0f /var/log/auth.log | sed "s/^[^:]*:[^:]*:[^:]*: //" | while read LINE
#tail -0f /var/log/user.log | sed "s/^[^:]*:[^:]*:[^:]*: //" | while read LINE
do
    echo $LINE
    echo $LINE | festival --tts
    sleep 0.75
done
{% endhighlight %}
