etude de cas audio numerique text to speech
Transcription
etude de cas audio numerique text to speech
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.