[[Asterisk + Festival синтез речи]]

Asterisk

Asterisk + Festival синтез речи

Запуск сервера Festival

Установка
Команда которая запускает festival в режиме демона-сервера, с настройкой на русский голос.
Можно прописать в скрипт автозагрузки сервера или выполнить самому.

festival  -b '(voice_msu_ru_nsh_clunits)' --server &>/dev/null

Использование

exten = XXXX,n,Festival('Мы все умрем, ааааа ха ха ххааа хааа.')

Начало сообщение зажевывает.

Кеш ответов Festival

Включение кеша ответов может убрать проблему зажевывания

nano /etc/asterisk/festival.conf

festival.conf

...
usecache=yes
cachedir=/var/lib/asterisk/festivalcache/
...

Директория должна существовать

mkdir /var/lib/asterisk/festivalcache/ && chown asterisk:asterisk /var/lib/asterisk/festivalcache/
Кэш сам не очищается

Альтернативный вариант

Понадобиться скрипт text2wave, его можно найти в интернете или скопировать отсюда.

text2wave

Сохранить по адресу /usr/bin/text2wave и сделать выполняемым

Следующий скрипт festival.pl для Asterisk, взят отсюда, но я немного отредактировал его:

/var/lib/asterisk/agi-bin/festival.pl

#!/usr/bin/perl
#make a tts dir inside your sounds dir (as specified below)
#adjust the t2wp variable to point to your festival bin directory
use Asterisk::AGI;
use File::Basename;
use Digest::MD5 qw(md5_hex);
 
$AGI = new Asterisk::AGI;

my %input = $AGI->ReadParse();
my ($text)=@ARGV;
my $hash = md5_hex($text);
my $sounddir = "/var/lib/asterisk/festivalcache";
my $wavefile = "$sounddir/"."$hash.wav";
my $t2wp= "/usr/bin/";
 
unless (-f $wavefile) {
        open(fileOUT, ">$sounddir"."/$hash.txt");
        print fileOUT "$text";
        close(fileOUT);
        my $execf=$t2wp."text2wave $sounddir/$hash.txt -F 8000 -o $wavefile";
        system($execf);
        unlink($sounddir."/$hash.txt");
}
$AGI->stream_file("$sounddir/".basename($wavefile,".wav"));

Сохранить по адресу /var/lib/asterisk/agi-bin/festival.pl и сделать выполняемым
Сохраняет кеш по адресу /var/lib/asterisk/festivalcache, директория должна существовать
mkdir /var/lib/asterisk/festivalcache/ && chown asterisk:asterisk /var/lib/asterisk/festivalcache/

Использование:

exten = XXXX,n,AGI(festival.pl,"Проверка раз два три")
При первом проходе есть небольшая задержка, потом из кеша берется быстро


Обсуждение

Андрей, 2009/08/21 15:38

Но из кэша отдаёт правильно – включите кэширование ответов Фестиваля в festival.conf Истерички.

lexa, 2009/08/26 14:55

Вкл.

умет, 2010/05/27 10:30

в чем может быть проблема ? совсем нихочет произность мой астериск, а при работе типа $festival

(SayText "все отлично произносится")

проигрываю кэш файалы aplay aaskdfjalfj928345029348 то сильный уровень шума и с еле еле узнаваемыми словами, может дела в alsa ?

lexa, 2010/05/28 10:19

Добавил вариант через скрипты - попробуйте. И пишите грамотнее.

умет, 2010/05/28 13:15

Пробовал использовать утилиту text2wave, это требует много ресурсов компьютера, что обходится не дешево. А мне нужно несколько одновременных подключений.

Ден, 2011/06/06 00:52

Как сделать так чтобы он правильно читал числа с плавающей точкой? а то например 25,26,читает 25 норм а потом говорит два,шесть. Заранее спасбио

Ваш комментарий. Вики-синтаксис разрешён:
54 +10 = ?
 
howto/asterisk/festival.txt · Последние изменения: 2015/12/19 15:57 — lexa
Gentoo Linux Driven by DokuWiki