Cepstral TTS Voiceprompt Script für Asterisk
Cepstral bietet eine der wenigen brauchbaren TTS-Engines für Linux an. Das folgende Script bietet eine einfache Möglichkeit im Asterisk Diaplan Voiceprompts on-demand zu erstellen. Um dieses möglichst ressourcenschonend zu realisieren, wird jeder angeforderte Text nur einmal erstellt und entsprechend via einem Hash gespeichert. Bei jedem Aufruf nach einem bereits bestehenden identischem Hashtag gesucht.
Der Aufruf in der Asterisk extentions.conf erfolgt nach folgendem Syntax:
exten => _X.,n,AGI(tts-play.pl,"Hallo Welt!")
Das Script muß sich in diesem Fall im agi-bin Verzeichnis der Asterisk Installation befinden. Außerdem sollten die Pfade in den ersten Zeilen des Programms angepasst werden.
tts-play.pl
#!/usr/bin/perl
use XML::Simple;
use Data::Dumper;
use Digest::MD5 qw(md5_hex);
use Asterisk::AGI;
$SWIFT = "/opt/swift/bin/swift";
$GSMDIR = "/opt/asterisk/var/lib/asterisk/sounds";
if ( $#ARGV < 0 )
{
print "Wrong syntax!\n";
print "./tts-play.pl 'text' 'langcode'\n";
exit;
}
my $text = shift;
my $lang = shift;
my $hash = md5_hex($text);
if ( $lang == "" )
{
$lang = "de";
}
$AGI = new Asterisk::AGI;
# Check for the existing destination directory.
if (! -e "$GSMDIR" . "/". $lang )
{
`mkdir -p $GSMDIR/$lang`;
}
# If the file does not exist, fetch it. Otherwise leave everything untouched.
if (! -e "$GSMDIR/". $lang ."/tts-". $hash .".wav" )
{
`$SWIFT -o $GSMDIR/$lang/tts-$hash.wav -p audio/sampling-rate=8000,audio/channels=1 \"$text\"`;
}
$AGI->exec("PLAYBACK", "$GSMDIR". "/". $lang ."/tts-". $hash)
Letzte Kommentare