etude de cas audio numerique text to speech

publicité
Andronico Thomas
Valat Bruno
ETUDE DE CAS
AUDIO NUMERIQUE
TEXT TO SPEECH
1 Introduction
Notre partie de l’étude de cas consiste donc en la réalisation d’un module de « text2speech »,
c'est-à-dire de la transformation d’un texte écrit en un texte oral.
Bien entendu Pure Data ne propose pas de solution intégrée pour réaliser cette tâche. Nous
avons donc du utiliser un outil externe appelé MBrola.
Le problème est que MBrola et Pure Data ne sont pas du tout prévus pour s’échanger des
données d’une manière prédéfinie. Il a donc fallu, dans un premier temps, réfléchir a une
solution qui permettrait une communication entre les deux outils et ce de manière assez
transparente pour l’utilisateur.
De plus ce logiciel n’est pas vraiment un logiciel de text to speech mais seulement un
synthétiseur vocal. Il nous a donc fallu, dans un second temps, trouver un moyen de convertir
un fichier texte en fichier au format d’entrée de MBrola. De plus nous voulons que différents
réglages permettent de paramétrer l’exécution de cette tâche en choisissant par exemple le
type de voix qui sera utilisé.
2 Communication avec Pure Data
Comment faire communiquer Pure Data avec des logiciels externes ?
Sachant que Pure Data a des fonctionnalités réseau, la solution qui nous a parue la plus
adéquat a été la création d’un serveur java qui joue le rôle de passerelle, via le réseau, entre
MBrola et Pure Data. En effet L’utilisateur tape le texte désiré dans Pure Data. Pure data
transmet cette donnée au serveur qui lance l’exécution de MBrola en lui passant le texte en
entrée. Quand MBrola a terminé son travail de génération de son le serveur en informe Pure
Data et ce dernier récupère alors le résultat sonore.
Exécution correctement
Paramétrée de MBrola
Texte à transformer
Serveur
Java
Pure
Data
Travail de MBrola fini
Récupération du
fichier sonore
Production de son dans Pure Data
A partir du fichier
MBrola
Fin de l’exécution
Création du fichier
sonore
Techniquement, le serveur java communique avec Pure Data par un port de communication
udp. Cette technique nous a semblée à la fois simple, rapide et efficace. L’échange
d’information est bidirectionnel car Pure Data envoie le texte au serveur qui l’informe en
retour de la fin du travail de MBrola. Le « serveur » et Pure Data jouent donc en quelque sorte
à la fois le rôle de serveur udp et client udp.
Communication udp dans Pure Data
//Reception de données par udp
DatagramSocket socket = new DatagramSocket(port);
DatagramPacket data = new DatagramPacket(buffer,buffer.length);
socket.receive(data);
//Envoie de données par udp
DatagramSocket socket = new DatagramSocket(port2);
DatagramPacket data=new
DatagramPacket(buffer,buffer.length,InetAddress.getByName("localhost"),port2);
socket.send(data);
Code java pour la communication udp
Notre application utilise les ports udp 6000 et 6001 pour établir une communication
bidirectionnelle entre Pure Data et notre serveur.
En ce qui concerne la communication avec MBrola, notre serveur lance son exécution et
attend que celle-ci se termine pour informer Pure Data que le fichier sonore est accessible.
Les fonctions java suivantes nous permettent de réaliser cette tâche.
//Lancement de MBrola via le script text2phone
Process proc=Runtime.getRuntime().exec("perl ./text2phone "+option+" temp.txt");
//Attente de la fin de l’execution de MBrola
proc.waitFor();
Choix du type de voix pour la génération sonore
MBrola permet d’utiliser différentes types de voix pour créer un fichier son à partir
d’un texte. Par exemple il est possible de choisir parmi plusieurs voix d’hommes ou plusieurs
voix de femmes. Nous avons jugé utile de permettre à l’utilisateur de choisir la voix désirée
directement dans Pure Data. Pour cela il lui suffit de spécifier le type de voix directement
dans le texte qu’il souhaite transformer. En plaçant entre crochet le nom correspondant à la
voix (fr1 à fr7) à la manière d’une option, celle-ci sera reconnue par le serveur qui va adapter
l’appel à MBrola de sorte que la voix utilisée soit la bonne. Bien sûr si l’utilisateur ne spécifie
aucune voix, c’est la voix par défaut qui est utilisée.
Option spécifiant que la voix 2 doit être utilisée
3 Transformation d’un texte en fichier sonore.
MBrola n’étant qu’un synthétiseur vocal, il prend en entrée des fichiers .pho et non des
fichiers texte.
Ces fichiers contiennent une série de phonèmes avec des paramètres telle que la hauteur, la
durée….
Notre second problème a donc été de trouver un moyen de faire cette conversion de manière
simple et rapide.
Nous avons trouvé sur le net un script perl Text2phone qui appel MBrola en lui passant les
phonèmes à synthétisé avec un peu de prosodie.
En modifiant ce fichier, nous avons maintenant un script text2phone qui prend en entrée un
fichier texte que le serveur java a sauvegardé sur le disque sous le nom temp.txt et qui nous
donne un fichier temp.wav.
Après des tests, nous nous sommes rendu compte que le fichier de sortie était en 16000Hz.
Ce qui faisait que Pure Data jouait ce fichier trop vite puisqu’il le lisait en 44100Hz.
Nous avons donc modifié un petit peu le serveur pour qu’il lance après la production du
fichier temp.wav le fichier temp2.wav qui lui est en 44100Hz.
Pour cela nous utilisons un utilitaire présent sous linux qui permet de faire des conversions
entre fichiers sonore : SOX. Ce dernier donne le signal au serveur java
Détaillons maintenant la partie MBrola avec les nouvelles contraintes :
Temp.txt
Texte à transformer
Serveur
Java
Travail de MBrola fini
Appel avec paramètres et
Passage des phonèmes
Appel avec
paramètres
Text2
Phone
Fin de l’exécution
MBrola
Fin de l’exécution
Fin de l’exécution
SOX
Récupération du
fichier sonore
Temp2.wav
Conversion
en
44100Hz
Création du
Fichier sonore
Temp.wav
Enfin, pour faciliter l’utilisation de notre synthèse vocale nous avons créé deux objets Pure
Data : SynthVoc et SynthVocBang.
Synthvoc : prend un paramètre un message de la forme set send [frx] Message à synthétiser et
génère presque instantanément une sortie signale qui porte le son de message synthétisé.
Remarque [frx] x compris entre 1 et 7 ce sont les banques françaises de MBrola.
Le banques 2 et 4 sont des voix féminines, qui ‘ont pas la même fréquence de base.
La fréquence a été ajustée dans text2phone pour que l’utilisateur n’ait pas à faire ce réglage.
Ce [frx] peut être avant ou après le message.
SynthvocBang : prend en paramètre le même message et un bang.
Le message est synthétisé et mis en attente.
Le bang déclanchera la lecture du son.
4 Utilisation
Pour utiliser notre projet, il faut lancer Pure Data et le serveur java.
Celui-ci doit étre dans le meme répertoire que text2phone.
Il se lance par la commande « java PureControl ».
Il suffit de charger ensuite le fichier mbrola.pd ou d’utiliser nos objets SynthVoc ou
SynthVocBang.
Téléchargement