eGuideDog::Festival is a Perl wrapper of common functions of Festival TTS.
SYNOPSIS
use eGuideDog::Festival;
$speaker = eGuideDog::Festival::new();
$speaker->block_speak("hello world");
METHODS
new($host, $port)
$host and $port are the Festival server host address and port number. A new server will be launched automaticly if these arguments are not specified. But you should make sure that Festival is installed on the system.
speak($text)
Speak text. This can be interrupted.
block_speak($text)
Speak text and wait until it finished.
play($filename)
Play wav file.
output($text, $filename)
Synthesize a wav file from text.
stop()
Stop speaking or playing. This will not affect block_speak method.
close()
Wait until all speech finished.
is_playing()
Return 1 for playing while 0 for not playing. I just check whether /dev/dsp is being used. So it doesn't work in all cases.
voice_list()
Return an array of voice list.
set_voice($voice)
Change the current voice. the value of $voice should exist in the returned array of voice list.
duration_stretch($value)
Return the current value of duration stretch if $value is omited. $value between 0 to 1 makes speech slower. $value larger than 1 makes speech faster. Of course, 1 is the normal speed.
pitch($value)
Return the current value of voice pitch if $value is omited. Otherwise, set it.
range($value)
Return the current value of voice range if $value if omited. Otherwise, set it.
EXAMPLE
use eGuideDog::Festival;
$| = 1; # You cannot print message in time without this.
$festival = eGuideDog::Festival::new();
$festival->block_speak('You must wait until I finished this sentence.');
$festival->speak('Thank you for your patience. You can intterupt me now.');
sleep(1);
$festival->stop() if ($festival->is_playing());
# you can change some voice style, but I suggest saving there value first
$festival->duration_stretch(1.5);
$pitch = $festival->pitch();
$festival->pitch(200);
$range = $festival->range();
$festival->range(200);
$festival->speak('hello world');
# this is the original voice style
$festival->duration_stretch(1);
$festival->pitch($pitch);
$festival->range($range);
$festival->speak('hello world');
$festival->close(); # without this call, festival will die immediately without finishing the words.
Requirements:
· Perl