Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

Festival

Материал из Xgu.ru

Перейти к: навигация, поиск


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

Содержание

[править] Начальная настройка Festival

По умолчанию Festival использует OSS, для того чтобы заставить его работать с ALSA, необходимо добавить такие строки в конфигурационный файл /etc/festival.scm или ~/.festivalrc[1]:

(Parameter.set 'Audio_Command "aplay -D plug:dmix -q -c 1 -t raw -f s16 -r $SR $FILE")
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'snd)

Пример использования:

%$ festival
Festival Speech Synthesis System 1.96:beta July 2004
Copyright (C) University of Edinburgh, 1996-2004. All rights reserved.
For details type `(festival_warranty)'
festival> (SayText "Good morning, welcome to Festival")
Warning: format is changed to S16_BE
#<Utterance 0xb6a49fe8>
festival>

[править] Русификация Festival

$ sudo apt-get install festvox-ru
$ cat kiev-ru.txt | text2wave -eval '(voice_msu_ru_nsh_clunits)' > kiew-ru.wav

[править] Интеграция Festival и Asterisk

Festival можно использовать в сетях IP-телефонии как генератор речи. Для этого необходимо инсталлировать и запустить Festival-сервер, настроить его на работу с Астериск и указать в соответствующих места диалплана действия Festival()[2].

Конфигурация /etc/festival.scm:

    ;; Enable access to localhost (needed by debian users)
    (set! server_access_list '("localhost\\.localdomain" "localhost"))

    ;;; Command for Asterisk begin

    (define (tts_textasterisk string mode)
    "(tts_textasterisk STRING MODE)
    Apply tts to STRING. This function is specifically designed for
    use in server mode so a single function call may synthesize the string.
    This function name may be added to the server safe functions."
    (let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
    (utt.wave.resample wholeutt 8000)
    (utt.wave.rescale wholeutt 5)
    (utt.send.wave.client wholeutt)))




    ;;; Command for Asterisk end


;; set russian voice (comment the following 2 lines to use british_american)
(language_russian)
(set! voice_default 'voice_msu_ru_nsh_clunits)

Добавить в загрузку:

%# cp /usr/share/doc/festival/examples/festival.init /etc/init.d/festival
%# chmod +x /etc/init.d/festival
%# vi /etc/default/festival
RUN_FESTIVAL=yes
%# /etc/init.d/festival start
%# ps aux | grep festival
festival  9435  0.3  1.0  25564 21284 ?        S    22:49   0:00 /usr/bin/festival --server -b /etc/festival.scm
root      9459  0.0  0.0   3116   724 pts/1    R+   22:49   0:00 grep fest

Подключаем Festival к астериску:

%# vi /etc/asterisk/extensions.conf
+exten => 342,1,Answer
+exten => 342,n,Festival('Hello from Festival')
%# /etc/init.d/asterisk restart

Дополнительная настройка Asterisk, касающуюся интеграции с сервером Festival, выполняется в файле /etc/asterisk/festival.conf[3].

Если нужно выполнять динамическое генерирование проигрываемого текста налету, нужно использовать внешние программы (например, text2wave из пакета festival) и потом проигрывать полученный файл с помощью Playback.

[править] Подключение Festival через AGI

Источник: [1]

Немного изменённый скрипт:

#!/usr/bin/perl

use Asterisk::AGI;
use File::Basename;
use Digest::MD5 qw(md5_hex);

$AGI = new Asterisk::AGI;

my %input = $AGI->ReadParse();

my $f = $ARGV[0];
my $text = "@ARGV";
if (open(F, "$f")) {
  local $/;
  $text = <F>;
}
my $hash = md5_hex($text);
my $sounddir = "/var/lib/asterisk/sounds/tts";
my $wavefile = "$sounddir/"."tts-$hash.wav";

unless (-f $wavefile) {
 open(fileOUT, ">$sounddir"."/say-text-$hash.txt");
 print fileOUT "$text";
 close(fileOUT);

 my $execf="text2wave -eval '(voice_msu_ru_nsh_clunits)' $sounddir/say-text-$hash.txt -F 8000 -o $wavefile";
 system($execf);
 unlink($sounddir."/say-text-$hash.txt");
}
$wavefile =~ s/.wav$//;

$AGI->exec('Playback', $wavefile);

Вызов скрипта из диалплана:

exten => 8700,1,AGI(/usr/local/bin/asterisk-festival.pl,/var/tmp/burunduk-ru.txt)

При звонке на номер 8700 проиграется содержимое файла /var/tmp/burunduk-ru.txt.

[править] Дополнительная информация

[править] Примечания

  1. https://help.ubuntu.com/community/TextToSpeech
  2. http://lodge.glasgownet.com/2009/05/20/asterisk-and-festival-integration/
  3. http://www.voip-info.org/wiki/view/Asterisk+config+festival.conf
Источник — «http://wwww.xgu.ru/wiki/Festival»
На других языках