Synthèse vocale en français sous Asterisk
Imprimer cet article
Sylvain Thérien | 25 avril 2010
Vous avez toujours rêvé d’entendre Asterisk parler français, et bien voici vos souhaits réalisés. Dans cet article, nous allons mettre en place un synthétiseur vocal qui permettra à Asterisk (version 1.4 et 1.6) d’utiliser en intrant un texte qui lui est soumis et de le transformer afin que vos applications et menus RVI puissent vous livrer le message vocalement en français. Nous utiliserons des composants qui seront installés localement sur la même plateforme que notre serveur Asterisk. Il va sans dire que nous ne serons dépendants d’aucun composant externe pour ce service.
Nous devrons installer trois différents composants pour ce projet, soit MBROLA, Lia_Phon et Liambrola.
MBROLA
MBROLA est un synthétiseur vocal initié par le laboratoire de RTT de la Faculté Polytechnique de Mons en Belgique. Il est à l’origine d’un projet visant à obtenir un ensemble de synthétiseurs vocaux pour une multitude de langues qui est fourni gratuitement lorsqu’il s’agit d’applications non commerciales et non militaires. MBROLA n’est pas sous licence de source libre.
D’un point de vue plus concert, le synthétiseur vocal MBROLA est basé sur la concaténation de diphones. Ainsi, il prend une liste de phonèmes en entrée, avec des informations prosodiques, c’est-à-dire la durée des phonèmes et une description linéaire par morceaux de la tonalité, et produit des échantillons de parole sur 16 bits linéaire. Les fréquences d’échantillonnage proviennent d’une base de données de diphone. MBROLA n’est donc pas un synthétiseur « Text-To-Speech », puisqu’il n’accepte pas de texte brut en entrée, mais plutôt une représentation de phonèmes.
Chaque base de données de diphone est adaptée au format MBROLA. Une voix françaises a été mise à la disposition par les auteurs de MBROLA, et le projet MBROLA a été lui-même organisée de manière à inciter les laboratoires de recherche et les entreprises à partager leurs bases de données de diphone.
Il est à noter que les bases de données sont aussi rendues disponibles pour utilisation non commerciale et utilisation non militaires dans le cadre du projet MBROLA.
Lia_Phon
Comme nous venons de le voir, MBROLA n’étant pas un synthétiseur « Text-To-Speech », nous utiliserons Lia_Phon pour cette fonction, en le reliant au synthétiseur vocal MBROLA, afin d’obtenir effectivement une sortie audio basée sur un texte d’origine.
Lia_Phon est un système de phonétisation de textes qui a été développé au LIA par Frédéric Bechet. Ce système permet de nettoyer, étiqueter, accentuer et phonétiser un texte libre. Un module de génération d’une prosodie minimale est également fourni afin de générer des fichiers compatibles avec le synthétiseur vocal MBROLA. Lia_Phon est disponible gratuitement sous licence GNU GPL.
Installation
Afin d’installer MBROLA, nous devons télécharger son noyau, qui est composé d’un exécutable MBROLA et de voix additionnelles. Un fichiers zip dépendent de notre système d’exploitation Linux sera copié. Le fichier binaire en soi prend moins de 100 kilo-octets et les voix pour une langue prennent environ 5 méga-octets. Notez que si vous désirez à titre d’intérêt personnel explorer MBROLA et mieux comprendre le fonctionnement du synthétiseur sur une plateforme Microsoft, il est possible pour vous de télécharger une version graphique pour Windows XP.
Revenons maintenant à Linux et commençons notre installation. Ouvrez une session « Shell » sur Asterisk et exécutez les lignes de commandes suivantes :
cd /usr/local/bin
mkdir mbrola
cd mbrola
wget http://tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip
unzip mbr301h.zip
rm -f mbr301h.zip
ln -s mbrola-linux-i386 mbrola
Pour plus d’information, lire le fichier « readme.txt » situé dans le répertoire /usr/local/bin/mbrola.
Nous avons maintenant besoin de voix pour la langue française. Les choix possibles sont les suivants :
Français masculin (fr1-990204.zip) Faculté Polytechnique De Mons
Français féminin (fr2-980806.zip) Celine Egea
Français masculin (fr3-990324.zip) Babel Technology
Français féminin (fr4-990521.zip) Babel Technology
Français belge (fr5-991020.zip) Faculté Polytechnique De Mons
Français masculin (fr6-010330.zip) Faculté Polytechnique De Mons
Français belge (fr7-010330.zip) Faculté Polytechnique De Mons
Français masculin canadien (ca1.zip) Vincent Arnaud
Français masculin canadien (ca2.zip) Silex Création Inc.
Il est à noter que plusieurs autres langues sont disponibles, entre autres les suivantes :
Anglais, Allemand, Espagnol, etc. Si vous lisez cet article dans une autre langue que le français, alors soyez quelque peu audacieux et essayez MBROLA avec votre propre langue si elle est disponible. Les instructions de cet article seront similaires pour votre choix de langue.
Nous aimons vraiment la diversité, n’est-ce pas ? Alors, allons-y pour le buffet à volonté francophone. Poursuivez en exécutant les lignes de commandes ci-dessous :
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr1/fr1-990204.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr2/fr2-980806.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr3/fr3-990324.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr5/fr5-991020.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr6/fr6-010330.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr7/fr7-010330.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/ca1/ca1.zip
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/ca2/ca2.zip
find . -name "fr*.zip" -print -exec unzip {} \;
find . -name "ca*.zip" -print -exec unzip {} \;
Lors del’exécution de la commande « find. -print … » sous Debian, les accolades {} devraient être entourées d’apostrophes » pour éviter une erreur d’interprétation de la commande. Ainsi elle devient « find . -name « fr*.zip » -print -exec unzip ‘{}’ \; ».
Si vous ne désirez pas garder les archives, simplement les détruire via les lignes de commandes suivantes :
rm –f fr*.zip
rm –f ca*.zip
L’archive pour la voix fr4 doit être traitée de façon plus particulière puisque ses fichiers ne sont pas inclus dans un sous répertoire. Suivez donc les étapes ci-dessous.
mkdir fr4
cd fr4
wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/fr4/fr4-990521.zip
unzip fr4-990521.zip;
rm –f fr4-990521.zip
cd ..
Nous sommes maintenant prêts à effectuer un test à mi-chemin. Alors voici, exécutez la ligne de commande suivante afin de générer un fichier format WAV à partir de phonème prédéfinit.
./mbrola fr1/fr1 fr1/TEST/bonjour.pho bonjour.wav
Nous devrions donc avoir un fichier contenant la représentation sonore du texte « bonjour ». Utilisez votre outil préféré (WinScp, Fugu, FTP, etc.) afin de transférer le fichier « bonjour.wav » situé dans le répertoire « /usr/local/bin/mbrola » de votre serveur Asterisk vers votre ordinateur personnel et faites-en l’écoute. Si vous préférez une autre voix, simplement effectuez le changement dans la ligne de commande précédente de fr1 à fr7 par exemple.
La version audio devrait être comme ceci : bonjour.wav
La première étape étant complétée, passons maintenant à la mise en place de Lia_phon.
Afin d’installer Lia_phon, poursuivez via la session « Shell » et exécutez les lignes de commandes suivantes :
cd /usr/local/bin
wget http://tcts.fpms.ac.be/synthesis/mbrola/tts/French/lia_phon.v1.2.tar.gz
tar zxvf lia_phon.v1.2.tar.gz
rm –f lia_phon.v1.2.tar.gz
cd lia_phon
find . -print -exec chown root:root {} \;
Comme spécifiées précédemment, lors de la modification du propriétaire de fichier, c’est-à-dire l’exécution de la commande « find. -print … » sous Debian, les accolades {} devraient être entourées d’apostrophes » pour éviter une erreur d’interprétation de la commande. Ainsi elle devient « find. -print -exec chown asterisk:asterisk ‘{}’ \; ».
Pour plus d’information, lire le fichier « README.txt » situé dans le répertoire /usr/local/bin/lia_phon. Vous pouvez aussi jeter un coup d’œil au fichier « lia_phon.htm » situé dans le répertoire /usr/local/bin/lia_phon/doc.
Il faut maintenant définir une variable au niveau de notre session, exécutez la ligne de commande suivante :
export LIA_PHON_REP=/usr/local/bin/lia_phon
Afin de vérifier que la variable a bien été définie, exécutez la ligne de commande ci-dessous :
export -p | grep LIA_PHON_REP
Si vous êtes sous Debian, il faut s’assurer de la présence de « csh » avant de compiler lia_phon. Si « csh » n’est pas installé, exécutez la ligne de commande suivante afin d’en faire l’installation : apt-get install csh.
Passons maintenant à l’étape de la compilation du code source. Suivez le processus en exécutant les lignes de commandes suivantes :
make all
make ressource
make check
Le tout devrait se terminer avec le message suivant :
« Congratulation, LIA_PHON is correctly installed »
Effectuons maintenant un transfert de propriétaire des fichiers de lia_phon à l’utilisateur Asterisk. Je suppose ici que vous avez effectué jusqu’à présent les opérations d’installation via l’utilisateur root. Exécutez la ligne de commande suivante :
find . -print -exec chown asterisk:asterisk {} \;
Vous pouvez aussi remplacer « asterisk:asterisk » par « root:root » dans la mesure ou votre serveur Asterisk est hébergé sur un système local plutôt que sur un serveur lointain.
Nous sommes maintenant prêts à effectuer un autre test. Exécutez les lignes de commandes suivantes afin de valider notre générateur de prosodie en plus du synthétiseur vocal.
cd doc
$LIA_PHON_REP/script/lia_text2mbrola < test.txt > test.ola
cd ../../mbrola
./mbrola -I $LIA_PHON_REP/data/initfile.lia fr1/fr1 $LIA_PHON_REP/doc/test.ola test.wav
Le résultat du test devrait ressembler à ceci :
« Ceci est un test d’utilisation du système de phonétisation LIA_PHON qui a été développé au LIA par Frédéric Bechet. Ce système permet de nettoyer, étiqueter, accentuer et phonétiser un texte libre. Un module de génération d’une prosodie minimale est également fourni afin de générer des fichiers compatibles avec le synthétiseur de parole MBROLA. Bonne utilisation ! »
La version audio de ce dernier test est disponible ici : test.wav
Utilisez encore une fois votre outil préféré afin de transférer le fichier « test.wav » situé dans le répertoire « /usr/local/bin/mbrola » de votre serveur Asterisk vers votre ordinateur personnel et faites-en l’écoute.
Effectuons un dernier test. Exécutez les lignes de commandes suivantes afin valider avec notre propre texte. Toujours à partir du même répertoire, « /usr/local/bin/mbrola », créez un fichier nommé « tux89.txt » et insérez-y le texte suivant :
« Ceci est un test. Si test égale téléphonie est égale à nule, alors go to w w w point t u x 89 point come. Fin du test.»
La version texte est disponible ici : tux89.txt
Attention : Le texte doit être encodé dans le format ISO-8859-1. Si votre ordinateur supporte un autre format tel que UTF8, vous devrez alors convertir afin de pourvoir écouter le message, sinon les accents ne seront pas lu correctement par Lia_phon.
Pour convertir sous Linux, utilisez la ligne de commande suivante :
iconv –from-code=UTF-8 –to-code=ISO-8859-1 FichierEntrant.txt > FichierSortant.txt
Lors de la conversion, bien faire attention aux doubles tirets des options from-code et to-code de iconv : « iconv –from-code=UTF-8 –to-code=ISO-8859-1 tux89.txt > tux89conv.txt ».
Effectuons maintenant la phonétisation en exécutant la commande suivante. Le fichier tux89.txt est déjà dans le bon format ISO-8859-1 :
$LIA_PHON_REP/script/lia_nett < tux89.txt | $LIA_PHON_REP/script/lia_taggreac | $LIA_PHON_REP/script/lia_phon | $LIA_PHON_REP/bin/lia_add_proso > tux89.pho
Finalement, effectuons la synthèse vocale en exécutant la commande ci-dessous. Lors de la synthèse dans la commande ci-dessous, bien écrire « -I » (i majuscule) et non pas « -l » (L minuscule).
./mbrola -I $LIA_PHON_REP/data/initfile.lia fr1/fr1 tux89.pho tux89.wav
Les écrits restent, mais les paroles s’envolent, validons pour voir s’il y a un brin de vérité dans ceci en écoutant le contenu du fichier tux89.wav.
La version audio est disponible ici : tux89.wav
Liambrola
En fait, tout cela est quand même assez fastidieux, n’est-ce pas ? Alors j’ai décidé d’écrire un module d’interface nommé Asterisk-liambrola afin d’interfacer Lia_phon et MBROLA au plan de numérotation d’Asterisk. Ce module permet l’ajout de l’application Liambrola au plan de numérotation, ce qui vous permet d’utiliser Lia_phon et Mbrola comme synthétiseur vocal français directement dans Asterisk. Le module Liambrola fait appel à Lia_phon et Mbrola via un appel système, car il n’existe pas d’interface de programmation applicative « API » pour ces deux composants.
Afin de rendre accessible le code source de Liambrola à la communauté, j’ai créé un projet sous SourceForge (http://sourceforge.net). Si vous désirez, référez-vous à la page du projet asterisk-liambrola situé à l’adresse suivante afin d’obtenir les instructions les plus récentes : http://sourceforge.net/projects/liambrola/
Exécutez maintenant les lignes de commandes suivantes afin d’installer Liambrola :
cd /usr/src
wget http://sourceforge.net/projects/liambrola/files/asterisk-liambrola-0.3.tgz/download
tar xzvf asterisk-liambrola-0.3.tgz
rm -f asterisk-liambrola-0.3.tgz
cd asterisk-liambrola-0.3
Pour compiler sous Asterisk 1.4, exécutez :
make
make install
Pour compiler sous Asterisk 1.6, exécutez :
make ASTERISKVERSION=1.6
make install ASTERISKVERSION=1.6
Vérifiez qu’il existe maintenant un fichier app_liambrola.so dans le répertoire /usr/lib/asterisk/modules /
Exécutez maintenant les lignes de commandes suivantes afin de charger le module Liambrola dans Asterisk :
asterisk –rvvv
module load app_liambrola.so
core show application liambrola
exit
Vous devriez maintenant avoir les fonctions offertes par Lia_phon et MBROLA dans le plan de numérotation d’Asterisk. Le tout a été vérifié sur les distributions PIAF et Trixbox.
Essai pratique
Pour tester, modifiez simplement le fichier /etc/asterisk/extensions_custom.conf et y ajouter les lignes ci-dessous :
exten => 542,1,Answer
exten => 542,2,Wait(1)
exten => 542,3,Liambrola(« Ceci est un test permettant de vérifier les fonctions de Lia Mbrola. »)
exten => 542,4,AGI(agi-liambrola-test.agi)
exten => 542,5,Hangup
N’oubliez pas de recharger la configuration d’Asterisk.
asterisk -rx reload
Maintenant, prenez le combiné et composez le numéro 542 qui correspond aux lettres LIA sur votre clavier téléphonique. Écoutez et vérifiez que tout fonctionne bien.
Si vous désirez modifier les paramètres opérationnels de Lia_phon ou de MBROLA, éditez le fichier /etc/asterisk/liambrola.conf. Ce fichier contient des paramètres d’ajustement qui influenceront votre synthétiseur vocal Liambrola. Les paramètres sont basés sur les paramètres natifs de Lia_phon et de MBROLA. Simplement suivre les exemples. Pour plus d’information sur Lia_phon et MBROLA, regardez la documentation disponible dans les répertoires où vous avez fait l’installation de ces deux composants.
Il est à noter que dans l’éventualité où vous n’auriez pas installé les exécutables MBROLA et Lia_phon dans les répertoires tels que spécifiés dans cet article, le chemin d’accès pour les exécutables MBROLA et Lia_phon peuvent être ajustés via les paramètres mbrolaPath et liaphonPath dans le fichier liambrola.conf.
Utilisation
Comment faire appel à Liambrola ?
La première méthode est via le plan de numérotation. Ajoutez la commande suivante à votre plan, comme dans l’exemple ci-dessous:
exten => 542,3,Liambrola(« Ceci est un test permettant de vérifier les fonctions de Lia Mbrola. »)
La deuxième méthode est via un script AGI. Vous devrez d’abord ajouter la commande suivante à votre plan, comme dans l’exemple ci-dessous :
exten => 542,4,AGI(agi-liambrola-test.agi)
Pour plus d’information, consultez le fichier /var/lib/asterisk/agi-bin/agi-liambrola-test.agi afin d’obtenir quelques exemples mis à votre disposition.
Le premier paramètre de Liambrola doit être le texte à convertir en parole. Vous pouvez aussi interagir dynamiquement sur Lia_phon ou MBROLA via les paramètres passés à Liambrola. Chaque paramètre est séparé par une barre verticale « | ». Il est à noter que les paramètres contenus dans le fichier /etc/asterisk/liambrola.conf sont évalués en premier et que par la suite, les paramètres dynamiques sont évalués. Vous pouvez aussi passer plusieurs paramètres dynamiques à Liambrola en les séparant par une barre verticale « | » sous Asterisk 1.4, pourvu que cela ait du sens.Veuillez noter que le séparateur de paramètres sous Asterisk 1.6 est une virgule « , » plutôt qu’une barre verticale « | » comme sous Asterisk 1.4. Si vous utilisez Asterisk 1.6, alors tenez-en bien compte. De plus, le fichier /var/lib/asterisk/agi-bin/agi-liambrola-test.agi a été ajusté en conséquence pour Asterisk 1.6.
Voici quelques explications sur comment cela fonctionne.
Exemple sous Asterisk 1.4, avec le paramètre « any » :
Liambrola (« Appuyez sur une touche pour interrompre la transmission de ce message.|any »)
Exemple sous Asterisk 1.6, avec le paramètre « any » :
Liambrola (« Appuyez sur une touche pour interrompre la transmission de ce message.,any »)
Vous pouvez appuyer sur une touche pour interrompre la lecture du message. En l’absence du paramètre « any », il sera impossible d’interrompre la transmission du message.
Le reste des exemples est pour Asterisk 1.4 avec la barre verticale « | » comme séparateur pour les arguments. Si vous utilisez Asterisk 1.6, changez la barre verticale « | » par une virgule « , ».
Exemple, avec le paramètre MBROLA « fr1 » et « any » :
Liambrola (« Français un ceci est la voix F R 1.|fr1|any »)
La voix sélectionnée sera fr1 et vous pourrez appuyer sur une touche pour interrompre la lecture du message. Les choix possibles de voix sont fr1 à fr7 (pour français) et ca1 ou ca2 (pour Canadien français).
Exemple, avec le paramètre MBROLA « volumeratio » :
Liambrola (« Le volume de ce message est élevé.|volumeratio|3.0″)
Liambrola (« Le volume de ce message est faible.|volumeratio|0.2″)
La valeur normale du volume est « 1.0 ».
Exemple, avec le paramètre MBROLA « frequencyratio » :
Liambrola (« La fréquence de ce message est élevée.|frequencyratio|3.0″)
Liambrola (« La fréquence de ce message est basse.|frequencyratio|0.5″)
La valeur normale de la fréquence est « 1.0 ».
Exemple, avec le paramètre MBROLA « timeratio » :
Liambrola (« Le rythme de ce message est lent.|timeratio|1.5″)
Liambrola (« Le rythme de ce message est rapide.|timeratio|0.7″)
La valeur normale du tempo est « 1.0 ».
Exemple, avec le paramètre MBROLA « voicefrequency » :
Liambrola (« La fréquence vocale de ce message est élevée.|voicefrequency|18000″)
Liambrola (« La fréquence vocale de ce message est basse.|voicefrequency|10000″)
La valeur normale de la fréquence vocale est « 16000 ».
Exemple, avec le paramètre Lia_phon « reajustAccent » :
Liambrola (« Les accents sont corrigés. Par exemple le mot été se prononce ete|reajustAccent »)
Avec ce paramètre, Lia_phon corrigera le texte et produire « Les accents sont corrigés. Par exemple le mot été ne se prononce pas été ». Le mot « ete » sera ajusté avec les accents et deviendra « été ». Notez que l’utilisation de ce paramètre peut produire quelques fois des résultats autres que ceux attendus.
Exemple, avec le paramètre Lia_phon « sylvain » :
Liambrola (« Bonjour je m apelle Sylvain.|sylvain »)
Sylvain est une voix préconfigurée avec les paramètres de MBROLA. Les choix de voix disponibles sont énumérés ci-dessous, c’est étrange, mais ça ressemble à des voix que je connais bien :
Sylvain (Voix masculine)
Alexis (Voix masculine)
Claudine (Voix féminine)
Audrey (Voix féminine)
Camille (Voix féminine)
À partir de la version 0.3, liambrola offre maintenant l’utilisation de liambrola via une ligne de commande « shell ». Il est donc possible de faire appel à la synthèse vocale liambrola en spécifiant un fichier d’entrée de texte et un fichier de sortie audio dans lequel liambrola produira une synthèse vocale française du texte d’entrée.
Par exemple, on peut faire appel à liambrola en exécutant la ligne de commande suivante :
liambrola –f fichier_entree.txt –o fichier_sortie.wav
Ce nouvel exécutable est pratique dans le cas de scripts externe au plan de numérotation d’Asterisk, comme on peut le constater dans l’article Rappels téléphoniques 4.0 en français sous Asterisk 1.4
Pour connaître les possibilités de liambrola, simplement exécuter la ligne de commande suivante :
liambrola –-help
Vous verrez alors les options telles que présentées ci-dessous :
utilisation: liambrola
Fait appel à Lia_Phon et Mbrola afin de produire une synthèse vocale,
à partir d’un texte, et retourne le tout sous forme d’onde sonore
———————————————-
Options disponibles :
–version Donne la version de liambrola
–help Donne ce menu d’aide
-lp PATH Spécifie le chemin d’accès de l’exécutable Lia_Phon
-mp PATH Spécifie le chemin d’accès de l’exécutable Mbrola
-o WAVEFILE Spécifie le fichier de sortir audio
-f TEXTFILE Spécifie le fichier texte d’entrée
———————————————-
Le TEXTE est de forme libre et supporte les paramètres suivants :
intkeys – voice – ignoreError – volumeRatio – frequencyRatio
timeRatio – voiceFrequency – reajustAccent
Claudine – Audrey – Camille – Alexis – Sylvain
———————————————-
Le paramètre voix « voice » peut être fr1 à fr7 ou ca1 ou ca2.
Se référer au fichier agi-liambrola-test.agi situe dans le répertoire
/var/lib/asterisk/agi-bin afin de voir des exemples d’utilisation
de Liambrola. Veuillez prendre note que le TEXTE d’entrée doit être
exempt de « | » sous Arterisk 1.4 et doit être exempt de « , » sous
Arterisk 1.6 car ces derniers sont le séparateur d’arguments
pour les paramètres AGI sous Asterisk.
De plus, vous pouvez aussi interagir dynamiquement sur Lia_phon ou MBROLA via les paramètres passés à liambrola dans le texte du fichier d’entrée. Ainsi, vous pouvez passer plusieurs paramètres dynamiques à liambrola en les séparant par une barre verticale « | » sous Asterisk 1.4, pourvu que cela ait du sens. Veuillez noter que le séparateur de paramètres sous Asterisk 1.6 est une virgule « , » plutôt qu’une barre verticale « | » comme sous Asterisk 1.4.
Il est à noter qu’à l’opposé de la fonction liambrola faisant partie du plan de numérotation, les paramètres contenus dans le fichier /etc/asterisk/liambrola.conf ne sont pas évalués lorsque vous utilisez l’exécutable liambrola via une ligne de commande. Les paramètres à défauts sont plutôt codés dans l’application liambrola.
Les valeurs de ces paramètres sont les suivantes :
Le chemin d’accès pour l’exécutable mbrola est :
mbrolaPath = /usr/local/bin/mbrola
Traitement des erreurs sur les diaphonies de Mbrola :
ignoreError = activé
La voix utilisée pour la synthèse vocale est :
voiceSelection = fr1
La valeur du volume est :
volumeratio = 1.0
La valeur de la fréquence est :
frequencyratio = 1.0
La valeur du tempo est :
timeratio = 1.0
La valeur de la fréquence vocale est :
voicefrequency = 16000
Le chemin d’accès pour l’exécutable lia_phon est :
liaphonPath = /usr/local/bin/lia_phon
Traitement de l’ajustement des accents lors de l’analyse par Lia_phon :
reajustAccent = activé
Vous auriez donc pu mettre un des textes suivants afin d’interagir dynamiquement sur Lia_phon ou MBROLA :
Français un ceci est la voix F R 1.|fr1
Le volume de ce message est élevé.|volumeratio|3.0
La fréquence de ce message est basse.|frequencyratio|0.5
Le rythme de ce message est lent.|timeratio|1.5
La fréquence vocale de ce message est basse.|voicefrequency|10000
Bonjour je m’appelle Sylvain.|sylvain
Ce message est une combinaison de différentes options.|fr2|volumeratio|3.0|frequencyratio|0.5|timeratio|1.5|voicefrequency|10000
Conclusion
J’espère que vous trouverez une utilisation pratique à Liambrola. Dans un prochain article, je présenterai un script permettant d’extraire les nouvelles du site Yahoo et d’en produire une synthèse vocale.
Amusez-vous bien !








salut,
ton application est très intéressante mais peut elle fonctionner sous asterisk 1.6.x?
Je ne l’ai pas essayé sous 1.6. Le temps me manque, mais lorsque j’aurai quelques minutes … j’y jetterai un coup d’œil.
Si quelqu’un l’a déjà essayé, vos commentaires seraient appréciés.
Je ne sais pas pour ce qui est de la partie module application sous Asterisk 1.6, mais pour ce qui est des appels dans le script de test AGI, je sais qu’on doit ternir compte du passage de paramètres tel qu’indiqué dans cet article :
http://www.astblog.com/2009/07/10/asterisk-14-vs-16-pbx-core/
J’ai fait l’installation de TrixBox (Asterisk 1.6) afin de convertir Liambrola à le version 1.6 d’Asterisk. À suivre …
Bonsoir, sylvain
merci pour ce tuto, car il me semble trés interessant dans le sens où je pense à son utilisation avec Les reminders d’Astreisk sous freePBX. Mais, comment raccorder tout cela ??. J’ai deja essayé Cpestral mais pas assez content avec, jusqu’au jour de découverte de cet article !!
Merci pour ta réponse
Kamel
Kamel,
Règle générale, tu n’as qu’a éditer le code et modifier les appels à Flite ou Cepestral par Liambrola. Le code source fait référence au système de TTS via la variable $ttspick. Tu trouveras des exemples d’appels à Liambrola dans l’article que j’ai écris. Je suis à ré-écrire les application de nerdvittles afin de les franciser.
Merci pour ta réponse,
J’attends avec impatience cet article, sachant que je l’ai déjà essayé, mais avec un oeil d’Expert !!,
Merci d’avance
Bonjour
C’est vraiment agréable de découvrir Asterisk avec de si bonnes explications ^^, Cependant j’ai une question qui peut paraître hors sujet mais je tente quand même :
Serait-il possible de lier cela avec acapela telecom ?
Merci pour vos réponses et je compte bien essayé ceci avant de me lancer dans plus complexe !
Cyril,
Je suppose qu’il serait possible d’intégrer le synthétiseur d’Acapela. Après avoir jeté un coup d’œil rapide à leur produit, il semble que des API existent pour l’arrimage, cependant leur produit utilise un modèle client serveur, qui est différent du modèle de Liambrola. Si tu as du temps, beaucoup de temps, utilise le code source de Liambrola comme base et essai toi.
Si tu désires un produit commercial, le seul qui semble intégré Acapela à Asterisk est VXI, le fureteur Voice XML de i6net. Voici le lien :
http://www.i6net.com/products/vxi/
Salut,
Comment la compilation de Liambrola sait-elle où aller chercher les fichiers de headers d’Asterisk?
J’ai bien toutes les sources qui vont bien, mais je n’arrive pas à compiler Liambrola.
J’ai essayé de positionner la variable ASTERISKINCLUDE du Makefile.
J’ai essayé avec les valeurs /usr/src/asterisk-1.6.2.9/, /usr/src/asterisk-1.6.2.9/include, et /usr/src/asterisk-1.6.2.9/include/asterisk, mais la compilation ne retrouve jamais asterisk.h et ses potes, qui sont pourtant bien dans les sources.
Je suis nul en makefiles… j’ai faux où?
Il n’y a rien de spécial avec les Headers files d’Asterisk. À ce que je vois, tu utilises Asterisk 1.6, cependant sur quelle distribution. J’ai testé moi même avec la dernière version de Trixbox sous Asterisk 1.6 et le problème que j’ai rencontré était que les Includes Files d’Asterisk étaient manquant. j’ai effectué la commande suivante afin d’installer les Headers files d’Asterisk :
yum install asterisk16-devel
Par la suite j’ai compilé Liambrola en exécutnt les 2 commandes suivantes :
make ASTERISKVERSION=1.6
make install ASTERISKVERSION=1.6
Tout a bien fonctionné.
salut sylvian,
merci pour cet article c’est extraordinaire, mais mon installation de lia_phon a échoué a la hauteur du make ressource voila ce que ca donne:
make: csh : commande introuvable
make: *** [ressource] Erreur 127
et la je ne peut plus rien faire puis ce que c’est une suite logique.
merci d’avance
resalut
probleme resolu j’ai installe le paquet csh.
merci pour cet article encore
votre article est vraiment geniall!tout comme votre module liambrola!! two thumbs up! Ah oui! juste quelques notes :
-lors de la modification du proprietaire de fichier ( execution de la commande » find. -print … ») les accolades ( {} ) devaient etre entourees de « quotes » ( ‘ ‘ ) pour eviter une erreur d’interpretation de la commande (sous Debian Lenny en tout cas!). Ainsi elle devient: » find. -print -exec chown asterisk:asterisk ‘{}’ \; » ( dans mon cas j’ai remplace « asterisk:asterisk » par « root:root » dans la mesure ou mon serveur asterisk est heberge sur ma machine et non sur un serveur lointain )
-comme precise plus haut par Ghanim, il faut s’assurer de la presence de ‘csh’ avant de compiler lia_phon ( dans mon cas j’ai just fait un « apt-get install csh »)
-lors de la synthese du fichier « test.txt » , bien ecrire « -I » (i majuscule) et non pas « -l » ( L minuscule, voyez ! ils sont identiques!) »
-lors de la conversion de code, bien faire attention aux doubles tirets : iconv –from-code=UTF-8 –to-code=ISO-8859-1 tux89.txt > tux89conv.txt ( jai nomme le fichier sortant « tux89conv.txt » ), ensuite realiser la phonetisation et la synthese avec le fichier converti « tux89conv.txt »
encore mille mercis pour votre article et votre app!
Excellent pour les commentaires, c’est apprécié.
Je ferai un révision de l’article afin d’y inclure les changements et différences pour les utilisateur de debian.
Merci encore !
Bonjour
j »aimerai utilise liambrola en ligne de commande comme ca je pourrai automatisé grace a un cron
mais je comprend pas trop ca :
liambrola –f fichier_entree.txt –o fichier_sortie.wav
ou il va cherche le fichier texte et va -t-il creer un fichier wav ??
merci enormement pour votre article
Tu trouveras plus d’information relativement à l’utilisation de la commande liambrola dans l’article suivant : Rappels téléphoniques 4.0 en français sous Asterisk 1.4 qui est une application utilisant directement la commande liambrola plutôt que celle du plan de numérotation d’Asterisk.
Plus particulièrement tu trouveras une aide sommaire en faisant la commande suivante :
liambrola –help
Pour ce qui est de ta question sur :
liambrola –f fichier_entree.txt –o fichier_sortie.wav
Le fichier d’entrée doit contenir le texte à synthétiser et le fichier de sortie est le fichier dans lequel tu veux récupérer le texte synthétisé en format WAV.
Tu peux aussi te référer au fichier agi-liambrola-test.agi situe dans le répertoire /var/lib/asterisk/agi-bin afin de voir des exemples d’utilisation de Liambrola. Prendre note que le TEXTE d’entrée doit être exempt de “|” sous Arterisk 1.4 et doit être exempt de “,” sous Arterisk 1.6 car ces derniers sont le séparateur d’arguments pour les paramètres AGI sous Asterisk.
Merci pour votre explication
est -il normal qu’a l’exécution de liambrola de donne une erreur du genre « can’t open (null) file for reading ??
merci
Finalament j’ai reussi a trouver une solution pour l’erreur can’t open (null) file for reading
mais j’arrive toujours pas a changer la voix pour limabrola pour avoir une voix fr4
liambrola –f fichier_entree.txt –o fichier_sortie.wav voice=fr4??
car c toujours la voix fr1 que j’ai
merci
Tu peux interagir dynamiquement sur Lia_phon ou MBROLA via les paramètres passés à même le texte à liambrola. Ainsi, tu peux passer plusieurs paramètres dynamique à liambrola en les séparant par une barre verticale « | » sous Asterisk 1.4, en autant que cela ait du sens. Note que le séparateur de paramètres sous Asterisk 1.6 est une virgule « , » plutôt qu’une barre verticale « | » comme sous Asterisk 1.4.
Alors tu dois faire appel à liambrola de la manière suivante :
liambrola –f fichier_entree.txt –o fichier_sortie.wav
En supposant que le texte à synthétiser dans le fichier « fichier_entree.txt » est le suivant :
Français un ceci est la voix F R 4.
Et que tu désires utiliser la voix fr4 plutôt que la voix à défaut fr1, alors tu changeras le texte dans le fichier « fichier_entree.txt » pour :
Français un ceci est la voix F R 4.|fr4
Encore une fois note que les paramètres à liambrola sont directement encodés dans le fichier d’entrée. Il faut aussi noter que sous Asterisk 1.4 le séparateur de paramètre est le caractère « | » et que sous Asterisk 1.6, le séparateur de paramètre est « , ». Ainsi sous Asterisk 1.6 tu devras mettre dans le fichier « fichier_entree.txt » ceci :
Français un ceci est la voix F R 4.,fr4
Finalement, voici d’autres exemples (Asterisk 1.4) que tu peux utiliser dans le fichier d’entrée :
Français un ceci est la voix F R 1.|fr1
Le volume de ce message est élevé.|volumeratio|3.0
La fréquence de ce message est basse.|frequencyratio|0.5
Le rythme de ce message est lent.|timeratio|1.5
La fréquence vocale de ce message est basse.|voicefrequency|10000
Bonjour je m’apelle Sylvain.|sylvain
Ce message est une combinaison de différentes options.|fr2|volumeratio|3.0|frequencyratio|0.5|timeratio|1.5|voicefrequency|10000
Pour Asterisk 1.6, change simplement le séparateur « | » par « , ».
En espérant que le tout est maintenant plus clair.
Merci
je savais pas qu’il falait ajouter les paramètres dans le texte lui meme
merci en tout cas pour ce tuto et surtout pour votre disponibilité
Effectivement, mais seulement dans le cas où tu utilises la commande liambrola à partir de l’invité de commande « Shell ». Dans le cas où tu utilises liambrola directement dans Asterisk sous AGI, alors en plus de passer des paramètres dans le texte, tu peux aussi ajuster les paramètres de manière permanente sur le fichier de configuration /etc/asterisk/liambrola.conf.
Oui j’ai bien compris cette partie, mais vu que je dois récupérer un doc, et extraire des infos dessus avec le script je préfère tout faire dans le shell comme ça on a la fin un message vocal il reste juste a l’ajouter dans une commande Background dans Asterisk.
Merci pour ton aide et pour ton tuto
Bonjour,
Tout d’abord merci beaucoup pour ce super tuto.
J’ai cependant un souci, j’ai installer tous les modules en suivant les étapes, j’ai cependant un souci lors de l’appel de Liambrola depuis le plan de numérotation
exten => 123,n,Liambrola(« Bonjour.|any »)
Asterisk plante a ce moment la
Dans le console j’ai différentes erreurs :
sh: -c: line 0: unexpected EOF while looking for matching ‘ »‘
sh: -c: line 1: syntax error: unexpected end of file
Huh? Child Handler, but nobody there?
sh: /tmp/liambrola_buf_shmD1s.txt: No such file or directory
Fatal error inline :- …… playing /tmp/liambrola_buf_shmD1s.txt …. : .app_liambrola.c:538 liambrola_exec: ast_streamfile failed on xxx for Liambrola
J’ai l’impression que Liambrola n’arrive pas a creer le fichier mais je ne sais pas pourquoi
Merci d’avance de votre aide
Bonjour Arnaud,
Premièrement, voici quelques questions qui me permettront de mieux cerner ton problème :
Quelle distribution d’Asterisk utilises-tu ? (PIAF, Trixbox, …)
Quel système d’exploitation utilises-tu ? (Centos, Debian, …)
Quelle version d’Asterisk utilises-tu ? (1.4, 1.6, …)
Autres questions :
Lors de ton installation, est-ce que cette commande de Mbrola a fonctionné et avec le bon résultat ?
./mbrola fr1/fr1 fr1/TEST/bonjour.pho bonjour.wav
Et aussi, est-ce que ces commandes de Lia_phon et Mbrola ont bien fonctionné et avec le bon résultat ?
cd doc
$LIA_PHON_REP/script/lia_text2mbrola test.ola
cd ../../mbrola
./mbrola -I $LIA_PHON_REP/data/initfile.lia fr1/fr1 $LIA_PHON_REP/doc/test.ola test.wav
Lors de l’exécution des diverses commandes « make », est-ce que tu as obtenu des erreurs ?
Comme dernière vérification, assure-toi que la commande du plan de numérotation utilise bien des guillemets identiques afin d’isoler la chaîne de caractères comme ceci :
exten => 123,n,Liambrola("Bonjour.|any")Plutôt que cela :
exten => 123,n,Liambrola(“Bonjour.|any”)
Bon, j’ai trouvé le souci,
En fait il ne faut pas ecrire :
exten => 123,n,Liambrola(“Bonjour.|any”)
mais
exten => 123,n,Liambrola(“Bonjour. »,any)
Et la ca fonctionne
Encore merci pour ce super tuto
Merci de ta réponse Sylvain,
Comme tu peux le voir le problème sur mon asterisk 1.4.37 installé sur un CentOS 5 était que la commande exten => 123,n,Liambrola(“Bonjour.|any”) était mal interprété en la remplacant par exten => 123,n,Liambrola(“Bonjour.”,any) Liambrola fonctionne a merveille.
Encore merci.
Une autre question me vient est il possible de rajouter des phonèmes et sais-tu quel sont les meilleurs paramètre (fréquence, volume, ratio etc…) a utiliser et enfin, je n’ai pas vu de différence flagrante entre les différentes voix, laquelle te semble la meilleur
Arnaud,
Il est sûrement possible d’ajouter des phonèmes à Lia_phon, mais je n’ai pas regardé cet aspect. Le code source est disponible, ne reste que la compréhension à faire. Pour référence, tu peux utiliser le lien suivant relativement aux publications de Frédéric Béchet, l’auteur de Lia_phon :
http://lia.univ-avignon.fr/fileadmin/documents/Users/Intranet/chercheurs/bechet/index.html
Pour ce qui est de modifier les voix, voici les paramètres que j’ai utilisés afin de créer les voix de liambrola. Pour ce qui est de dire quelle voix est la meilleure, je crois qu’il est question de préférences personnelles et qu’il faut y aller par essai et erreur afin de faire les bons ajustements.
Claudine
volumeRatio, « -v 2.0″
frequencyRatio, « -f 2.3″
timeRatio, « -t 0.8″
voiceFrequency, « -l 19000″
voiceSelection, « fr4/fr4″
Audrey
volumeRatio, « -v 1.0″
frequencyRatio, « -f 2.5″
timeRatio, « -t 1.0″
voiceFrequency, « -l 22000″
voiceSelection, « fr1/fr1″
Camille
volumeRatio, « -v 1.5″
frequencyRatio, « -f 3.0″
timeRatio, « -t 1.2″
voiceFrequency, « -l 21000″
voiceSelection, « fr4/fr4″
Alexis
volumeRatio, « -v 1.5″
frequencyRatio, « -f 1.4″
timeRatio, « -t 0.9″
voiceFrequency, « -l 13000″
voiceSelection, « fr1/fr1″
Sylvain
volumeRatio, « -v 1.0″
frequencyRatio, « -f 0.5″
timeRatio, « -t 1.0″
voiceFrequency, « -l 16000″
voiceSelection, « fr1/fr1″
lia_phon et mbrola marchent parfaitement, mais liambrola ne veux rien savoir
la console d’asterisk affiche tout le temps : »file.c:953 ast_streamfile: Unable to open /tmp/liambrola_………………… »
même l’agi ne passe pas.
Je ne sais plus quoi faire ! help !!
Voici quelques questions qui me permettront de mieux comprendre ton problème et t’aider à y voir un peu plus clair:
Quelle distribution d’Asterisk utilises-tu ? (PIAF, Trixbox, …)
Quel système d’exploitation utilises-tu ? (Centos, Debian, …)
Quelle version d’Asterisk utilises-tu ? (1.4, 1.6, …)
Autres questions :
Lors de ton installation, est-ce que cette commande de Mbrola a fonctionné et avec le bon résultat ?
./mbrola fr1/fr1 fr1/TEST/bonjour.pho bonjour.wav
Et aussi, est-ce que ces commandes de Lia_phon et Mbrola ont bien fonctionné et avec le bon résultat ?
cd doc
$LIA_PHON_REP/script/lia_text2mbrola test.ola
cd ../../mbrola
./mbrola -I $LIA_PHON_REP/data/initfile.lia fr1/fr1 $LIA_PHON_REP/doc/test.ola test.wav
Lors de l’exécution des diverses commandes « make », est-ce que tu as obtenu des erreurs ?
Tu peux faire appel à liambrola en exécutant la ligne de commande suivante :
liambrola –f fichier_entree.txt –o fichier_sortie.wav
ou encore
liambrola –help
Est-ce que cette dernière commande liambrola te donne un menu d’aide ?
voici le résultat de make
root@srv:/usr/src/asterisk-liambrola-0.3# make ASTERISKVERSION=1.6
gcc -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g -D_REENTRANT -D_GNU_SOURCE -O6 -fPIC -DASTERISK_VERSION=6 -c -o app_liambrola.o app_liambrola.c
app_liambrola.c: In function ‘liambrola_exec’:
app_liambrola.c:272: warning: ignoring return value of ‘mkstemp’, declared with attribute warn_unused_result
app_liambrola.c:443: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
app_liambrola.c:504: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
app_liambrola.c:510: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
app_liambrola.c:525: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
app_liambrola.c:543: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
gcc -shared -Xlinker -x -o app_liambrola.so app_liambrola.o -lm
gcc -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g -D_REENTRANT -D_GNU_SOURCE -O6 -fPIC -DASTERISK_VERSION=6 -c -o liambrola_main.o liambrola_main.c
gcc -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g -D_REENTRANT -D_GNU_SOURCE -O6 -fPIC -DASTERISK_VERSION=6 -c -o liambrola_sub.o liambrola_sub.c
liambrola_sub.c: In function ‘liambrola_sub’:
liambrola_sub.c:121: warning: ignoring return value of ‘fread’, declared with attribute warn_unused_result
liambrola_sub.c:158: warning: ignoring return value of ‘mkstemp’, declared with attribute warn_unused_result
liambrola_sub.c:316: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
liambrola_sub.c:321: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
liambrola_sub.c:326: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
liambrola_sub.c:330: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result
gcc -Xlinker -x -o liambrola liambrola_main.o liambrola_sub.o -lm
La commande liambrola fonctionne,
j’utilise ubuntu server 10.10 noyau 2.6.35-24
et asterisk 1.6.2.7
À partir des résultats de ton make, il semble que liambrola ait bien compilé. De plus, la commande « liambrola –help » fonctionne et te donne un menu d’aide. Donc voici deux choses à vérifier :
1 – Valide que la commande ci-dessous te donne un bon résultat. Pour ce faire, tu n’as qu’à te créer un fichier « fichier_entree.txt » et y insérer un texte à traduire. Ne met pas de caractères accentués pour le moment dans le texte du fichier, le but est de voir si liambrola peut produire un fichier audio en format WAV.
liambrola –f fichier_entree.txt –o fichier_sortie.wav
Si le fichier « fichier_sortir.wav » te donne la représentation audio du texte original, alors c’est que tout est OK, mais que le problème se situe au niveau du module liambrola dans Asterisk. Tu peux alors passer à l’étape 2.
2 – Tu utilises Asterisk 1.6, alors tu dois vérifier que la commande du plan de numérotation utilise bien des guillemets identiques afin d’isoler la chaîne de caractères comme ceci :
exten => 123,n,Liambrola("Bonjour.,any")Plutôt que ceci :
exten => 123,n,Liambrola(“Bonjour.,any”)
Donne-moi les résultats.
liambrola me fournis sans problème un fichier wav, le propriétaire du dossier /tmp est root (le group aussi), le dossier est en 7777
Je viens de vérifier, même résultat asterisk ne trouve pas le fichier dans le dossier /tmp or mon fichier de conf liambrola indique un autre dossier de cache mais le paramètre est sans effets.
J’obtiens le même résultat avec l’agi de test fournis.
Liambrola existe sous 2 formes différentes. Premièrement sous forme d’exécutable que l’on peut appeler à partir d’une ligne de commande dans une session linux. Celle ci fonctionne bien dans ton cas puisque tu as réussi à obtenir un fichier wav avec le bon résultat. La deuxième forme de liambrola est sous forme de module intégré à Asterisk. C’est cette version qui ne fonctionne pas dans ton cas. Je suspecte que le problème est lié à une librairie sous Ubuntu pour la génération des fichiers temporaires. Pour ton information, liambrola a été développé pour Asterisk 1.2/1.4/1.6 sous Centos/Redhat et a aussi été testé sous Debian, malheureusement, je n’ai pas accès à Ubuntu.
Ceci étant dit, voici ce que je te suggère de faire pur trouver la source du problème.
1 – Exécute liambrola via un appel téléphonique avec l’agi. Par exemple dans mon cas, j’ai assigné le numéro 542 (lia) à agi-liambrola-test.agi dans le fichier /etc/asterisk/extensions_custom.conf :
exten => 542,1,Answer
exten => 542,2,Wait(1)
exten => 542,3,Liambrola(“Ceci est un test permettant de vérifier les fonctions de Lia Mbrola.”)
exten => 542,4,AGI(agi-liambrola-test.agi)
exten => 542,5,Hangup
Ensuite, compose le 542 et regarde dans le fichier /var/log/asterisk/full et tu devrais y trouver des traces de log de Liambrola comme ceci.
[2011-01-26 22:27:04] VERBOSE[7224] logger.c: — Executing [542@from-internal:3] Liambrola(« SIP/1081-086523d8″, « “Ceci est un test permettant de vérifier le Playing ‘/tmp/liambrola_buf_l2rWRa’ (language ‘fr’) Playing ‘/tmp/liambrola_buf_FU7Ly9′ (language ‘fr’)
s fonctions de Lia Mbrola.” ») in new stack[2011-01-26 22:27:04] VERBOSE[7224] logger.c: == Parsing ‘/etc/asterisk/liambrola.conf’: [2011-01-26 22:27:04] VERBOSE[7224] logger.c: Found
[2011-01-26 22:27:05] VERBOSE[7224] logger.c: —
[2011-01-26 22:27:10] VERBOSE[7224] logger.c: — Executing [542@from-internal:4] AGI(« SIP/1081-086523d8″, « agi-liambrola-test.agi ») in new stack
[2011-01-26 22:27:10] VERBOSE[7224] logger.c: — Launched AGI Script /var/lib/asterisk/agi-bin/agi-liambrola-test.agi
[2011-01-26 22:27:10] VERBOSE[7224] logger.c: — AGI Script Executing Application: (LIAMBROLA) Options: (Vous ne pouvez pas interrompre la transmission de ce message.)
[2011-01-26 22:27:10] VERBOSE[7224] logger.c: == Parsing ‘/etc/asterisk/liambrola.conf’: [2011-01-26 22:27:10] VERBOSE[7224] logger.c: Found
[2011-01-26 22:27:11] VERBOSE[7224] logger.c: —
[2011-01-26 22:27:15] VERBOSE[7224] logger.c: — AGI Script Executing Application: (LIAMBROLA) Options: (Appuyez sur une touche pour interrompre la transmission de ce message.|any)
[2011-01-26 22:27:15] VERBOSE[7224] logger.c: == Parsing ‘/etc/asterisk/liambrola.conf’: [2011-01-26 22:27:15] VERBOSE[7224] logger.c: Found
…..
Tu devrais donc voir que est le chemin et le nom de fichier des fichiers temporaire. Dans mon cas, on voit par exemple /tmp/liambrola_buf_FU7Ly9.
Pour diagnostiquer un peu plus, tu peux aussi editer le ficher source app_liambrola.c et enlever certains commentaires que j’ai mis afin d’obtenir un meilleur niveau de trace dans les log. Par exemple, tu peux modifier le code suivant :
// ast_log(LOG_DEBUG, « filename: %s\n », filename);
// ast_log(LOG_DEBUG, « txtFilename: %s\n », txtFilename);
// ast_log(LOG_DEBUG, « phoFilename: %s\n », phoFilename);
// ast_log(LOG_DEBUG, « wavFilename: %s\n », wavFilename);
Par celui-ci :
ast_log(LOG_DEBUG, « filename: %s\n », filename);
ast_log(LOG_DEBUG, « txtFilename: %s\n », txtFilename);
ast_log(LOG_DEBUG, « phoFilename: %s\n », phoFilename);
ast_log(LOG_DEBUG, « wavFilename: %s\n », wavFilename);
Ensuite tu refais le make et réinstalle le module liambrola en faisant make install puis refait un autre tour de roue afin de voir plus d’info dans le fichier log.
Tu verra que j’ai laissé en commentaire d’autre appels à ast_log dans le fichier app_liambrola.c. Par exemple à la ligne 506 de app_liambrola.c tu trouvera ceci :
// ast_log(LOG_DEBUG, « LIA_PHON & MBROLA COMMANDS: %s\n », cmd);
Tu n’as qu’à enlever le double // afin d’y voir plus clair.
Donne-moi les résultats.
Et voila le résultat,
je ne sais pas si ça va vraiment aider.
core set debug 9
Core debug is at least 9
== Using SIP RTP CoS mark 5
— Executing [542@mdm:1] Answer(« SIP/7000-00000002″, « ») in new stack
— Executing [542@mdm:2] Wait(« SIP/7000-00000002″, « 1″) in new stack
— Executing [542@mdm:3] Liambrola(« SIP/7000-00000002″, « “Ceci est un test permettant de vérifier les fonctions de Lia Mbrola.” ») in new stack
== Parsing ‘/etc/asterisk/liambrola.conf’: == Found
[Jan 27 22:56:12] WARNING[4355]: channel.c:3695 set_format: Unable to find a codec translation path from 0×1 (g723) to 0×40 (slin)
[Jan 27 22:56:12] WARNING[4355]: file.c:953 ast_streamfile: Unable to open /tmp/liambrola_buf_45T001 (format 0×1 (g723)): No such file or directory
[Jan 27 22:56:12] WARNING[4355]: app_liambrola.c:538 liambrola_exec: ast_streamfile failed on SIP/7000-00000002 for Liambrola
== Spawn extension (mdm, 542, 3) exited non-zero on ‘SIP/7000-00000002′
Ton problème semble être avec les codecs et non avec liambrola. Dans la trace, on voit ceci :
[Jan 27 22:56:12] WARNING[4355]: channel.c:3695 set_format: Unable to find a codec translation path from 0×1 (g723) to 0×40 (slin)
Il semble que tu utilises les codecs g723 et slin. Pour faire un test, change les codecs pour utiliser seulement g711 (ulaw/alaw) et/ou g729. Si tu utilises un poste téléphonique sur ton réseau local et que ton Asterisk est aussi en local, changes seulement la définition de ton extension téléphonique à ceci et refais le test avec liambrola.
disallow=all
allow=alaw
allow=ulaw
allow=g729
Est-ce que ça fonctionne ?
J’allais justement te dire que je venais de trouver cette erreur « débile » !
Merci de m’avoir filer un coups de main tout de même.
Bonjour,
J’ai fait le test avec le script suivant :
exten => 9999,1,Answer()
exten => 9999,n,Wait(1)
exten => 9999,n,Liambrola(« Bonjour »)
exten => 9999,n,AGI(agi-lambriola-test.agi)
exten => 9999,n,HangUp()
Mais cela me donne l’erreur suivante :
Executing [9999@Numeros_speciaux:1] Answer(« SIP/7900-000001d1″, « ») in new stack
— Executing [9999@Numeros_speciaux:2] Wait(« SIP/7900-000001d1″, « 1″) in new stack
— Executing [9999@Numeros_speciaux:3] Liambrola(« SIP/7900-000001d1″, « »Bonjour »") in new stack
== Parsing ‘/etc/asterisk/liambrola.conf’: == Found
[Feb 28 18:21:36] WARNING[29837]: format_wav.c:139 check_header: Unexpected frequency 16000
[Feb 28 18:21:36] WARNING[29837]: file.c:370 fn_wrapper: Unable to open format wav
[Feb 28 18:21:36] WARNING[29837]: file.c:953 ast_streamfile: Unable to open /tmp/liambrola_buf_f50F1I (format 0×8 (alaw)): No such file or directory
[Feb 28 18:21:36] WARNING[29837]: app_liambrola.c:538 liambrola_exec: ast_streamfile failed on SIP/7900-000001d1 for Liambrola
== Spawn extension (Numeros_speciaux, 9999, 3) exited non-zero on ‘SIP/7900-000001d1′
— Executing [h@Numeros_speciaux:1] Hangup(« SIP/7900-000001d1″, « ») in new stack
== Spawn extension (Numeros_speciaux, h, 1) exited non-zero on ‘SIP/7900-000001d1′
Aurais-tu une explication ?
Merci
Il semble que ton problème soit avec les codecs supportés sur ton Asterisk.
[Feb 28 18:21:36] WARNING[29837]: format_wav.c:139 check_header: Unexpected frequency 16000
[Feb 28 18:21:36] WARNING[29837]: file.c:370 fn_wrapper: Unable to open format wav
[Feb 28 18:21:36] WARNING[29837]: file.c:953 ast_streamfile: Unable to open /tmp/liambrola_buf_f50F1I (format 0×8 (alaw)): No such file or directory
[Feb 28 18:21:36] WARNING[29837]: app_liambrola.c:538 liambrola_exec: ast_streamfile failed on SIP/7900-000001d1 for Liambrola
Est-ce que l’extension de laquelle tu appelles support les codecs alaw et ulaw ?
Super ta réactivité
Je n’ai déclaré que du alaw.
Tu devrais essayer d’ajouter le codec ulaw.
De plus, peux-tu faire appel à liambrola en exécutant la ligne de commande suivante :
liambrola –f fichier_entree.txt –o fichier_sortie.wav
En prenant soin de mettre dans le fichier_entree.txt le texte Bonjour.
Est-ce que le fichier_sortie.wav est audible ?
C’est bon j’ai trouvé
)
Liambrola fait appel à Sox, qui en l’occurence n’était pas installé.
Cela marche beaucouq mieux maintenant
Encore merci !
Le seul regret si je peux me permettre, est la qualité des voix qui ressemblent un peu à une voix de robot. On dirait les voix du film Wargame
Oui, tu as raison, mais c’est gratis comme dans Free as in free Beer !
Bonjour,
en faisant le test j’ai l’erreur suivante :
oot@pbx:~ $ asterisk -rvvv
Verbosity is at least 3
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
— Executing [9999@from-internal:1] Answer(« SIP/200-00000000″, « ») in new stack
— Executing [9999@from-internal:2] Wait(« SIP/200-00000000″, « 1″) in new stack
— Executing [9999@from-internal:3] Liambrola(« SIP/200-00000000″, « Bonjour ») in new stack
== Parsing ‘/etc/asterisk/liambrola.conf’: == Found
pbx*CLI>
Disconnected from Asterisk server
root@pbx:~ $ Asterisk ended with exit status 255
Asterisk exited on signal 127.
Automatically restarting Asterisk.
et pourtant en ligne de commande ca marche trres bien.
Une idée ?
Cordialement,
Quelle distribution d’Asterisk ?
Quelle version d’Asterisk ?
Quel système d’exploitation ?
As-tu plus de détails sur l’erreur ? Tu peux jeter un coup d’oeil dans /var/log/asterisk/full, faits une recherche sur 9999@from-internal et tu devrais être en mesure d’obtenir plus d’information grâce aux traces de log de Liambrola.
Reviens-moi avec plus d’info.
Bonjour,
désolé pour retard.
j’utilise PIAF 1755 sur CentOS, asteerisk 1.8.3
BR
Un peu plus évident.
Je n’ai pas encore essayé sur Asterisk 1.8. Je suis à installer une configuration similaire à la tienne. Liambrola est fonctionnel sous 1.2, 1.4 & 1.6 mais pas encore sous 1.8. Je vais porter Liambrola et publier le code source sur sourceforge.
Ça ne devrait pas être trop long. Je t’en donne des nouvelles.
Stay Tuned !!!
Merci et a bientot
Comme premier essai, tu peux valider en compilant liambrola sous Asterisk 1.8 avec les paramètres suivants :
make ASTERISKVERSION=1.6
make install ASTERISKVERSION=1.6
Il me reste certains problèmes à corriger sous Asterisk 1.8. Il semble que lors de l’essai pratique, lorsque l’on compose 542 (/var/lib/asterisk/agi-bin/agi-liambrola-test.agi ), ne va pas jusqu’à la fin.
Je te reviens sous peu avec les correctifs.
En fait ce que j’ai remarqué, les fichier sont crées dans le repertoire /tmp mais apparemment il n’arrive pas a les retrouver donc ne peut pas les lire.