Asterisk+Festival

Festival est un logiciel de synthèse vocale développé au centre pour la recherche de technologie de la parole (CSTR) a l’universite d’Edimbourg. Festival est écrit dans le langage C++ avec un interpréteur de commandes base sur schème pour permettre sa personnalisation et son évolution.
les Inconvénients: qualités de son mouvais, exige des compléments supplémentaires pour faire parler en français (Franfest, Mbrola, Lia_Phon)

les avantages: fonctionne sans connexion à internet, traitement des commandes aussi rapide.

 

1. Installation

Il existe deux façons d’installer Festival :

– via le gestionnaire de paquet ;
– en en compilant ses sources.

a. via le gestionnaire de paquet :

# sudo apt-get install festival speech-tools
Ou
# yum install festival speech-tools
b. en compilant ses sources :

# cd /usr/src
# wget http://www.cstr.ed.ac.uk/downloads/festival/2.1/speech_tools-2.1-release.tar.gz
# wget http://www.cstr.ed.ac.uk/downloads/festival/2.1/festival-2.1-release.tar.gz
# tar zxvf festival-2.1-release.tar.gz
# tar zxvf speech_tools-2.1-release.tar.gz
# cd speech_tools
# ./configure
# make
# make install
# cd ..
# cd festival
# ./configure
# make
# make install
# export PATH=$PATH:/usr/src/festival/bin/

2. Start-up au démarrage :

Pour debian && centos on ajoute dans le fichier rc.local la ligne festival –server &>/dev/null jusqu’au exit 0

# nano /etc/rc.local

3. Configuration des fichiers principaux de Festival
On ajoute a la fin les lignes suivantes :

# nano /etc/festival.scm
(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)))
# nano /etc/asterisk/festival.conf
[general]
host=localhost
port=1314
;usecache=yes
;cachedir=/var/lib/asterisk/festivalcache/
festivalcommand=(tts_textasterisk « %s » ‘file)(quit)\n

4. Démarrage du serveur Festival

Le serveur Festival on peut démarrer de la façon suivante :

# festival 2 > & 1 > /dev/null &

La commande suivante permet de visualiser de ce que se passe sous Festival :

 # festival –server

On peut utiliser le mode interactif en tapant :

# festival
> (SayText « system error »)

Les sons restitués sont en langue anglaise. Les tests :

# echo | who | festival –tts
# echo | date | festival –tts
# echo « Bonjour to le monde »| festival –tts

5. Le plan de numérotation et Festival

# nano /etc/asterisk/extensions.conf

Sur appel au poste numéro 1001, le texte «Asterisk and Festival are working together » est synthétisé

exten => 1001, 1, Answer()
exten => 1001, n, Festival(‘Asterisk and Festival are working together’)
exten => 1001, n, Hangup()

Sur appel au poste numéro 1002 sera prononcé le numéro de l’appelant

exten => 1002, 1, Answer()
exten => 1002, n, Festival(‘Welcome to the wonderful world of Asterisk! Your phone number is ${CALLERID(num)}.’)
exten => 1002, n, Hangup()

6. text2wave

Festival possède un module text2wav pour fabriquer des messages à partir d’un texte

exten => 1003,1,Verbose(2,Trying out Festival)
same => n,Answer()
same => n,System(echo « This is a test of Festival » | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/festival.wav)
same => n,Playback(/tmp/festival)
same => n,System(rm -f /tmp/festival.wav)
same => n,Hangup()
# cat text.txt | text2wave -o text.wav

On peut créer les scripts php basé sur text2waave

# nano /etc/asterisk/scripts/fest.php
#!/usr/bin/php5 -q
 
<?php$dir="/var/lib/asterisk/sounds/";$textfilename="newfile.txt";$textfile=$dir.$textfilename;
 
if (file_exists($textfile)){
 
unlink ($textfile);
 
}
 
touch($textfile);
 
$tfile=fopen($textfile, "w");
 
//echo $argv[1];
 
fwrite($tfile, $argv[1]);
 
fclose($tfile);
 
if(file_exists($dir."newsound.gsm")){
 
unlink ($dir."newsound.gsm");
 
}
 
system("text2wave -f 8000 -o ".$dir."newsound.wav ".$textfile);
 
system("sox ".$dir."newsound.wav -r 8000 -c 1 ".$dir."newsound.gsm");
 
unlink($dir."newsound.wav");
 
?>
# chmod +x /etc/asterisk/scripts/fest.php

extensions.conf

exten => 1004,1,Answer
exten => 1004,n,system(/etc/asterisk/scripts/fest.php ‘Welcome to the wonderful world of Asterisk! Your phone number is ${CALLERIDNUM}.’)
exten => 1004,n,wait(1)
exten => 1004,n,Playback(newsound)
exten => 1004,n,Hangup

Laisser un commentaire