Synthèse vocale française en JAVA

Dans ce tutoriel, je vais vous expliquer comment mettre en place une synthèse vocale française dans vos projets JAVA. Pour cela, nous allons utiliser la librairie SI VOX développée par des étudiants de l’ESSI en 2004 dans le cadre d’un projet. Cette librairie est basée sur le synthétiseur vocal MBROLA et est sous la licence spéciale MBROLA.
Attention, cette librairie ne sait traiter que la langue française.

Voici le site de cette librairie dont je reprends une partie du contenu : lien.

1 – Explications

La synthèse vocale consiste à transformer un texte “écrit” en texte “parlé”. Ce traitement nécessite différentes étapes :

  • le découpage du texte en phonèmes à partir de règles et d’un dictionnaire propre à la langue souhaitée. Un phonème représente l’élément unitaire du son qui doit être prononcé, à ne pas confondre avec une syllabe.
  • la transformation de la suite de phonèmes en fichier son grâce à un synthétiseur (ici MBROLA).
  • la lecture du fichier son généré

2 – Téléchargement

Pour commencer, il faut télécharger l’archive contenant la librairie ainsi que les différents fichiers nécessaires à son fonctionnement : archive SI VOX (ce lien n’existe plus).
Ensuite, dézippez l’archive. On se retrouve alors avec un dossier contenant la librairie (jar), les sources, la documentation et un dossier donnees qui sera utile pour la suite.
Le dossier donnees contient le fichier de configuration, les différentes règles, les voix, et le synthétiseur MBROLA (disponible dans sa version Windows et Linux).

3 – Mise en oeuvre

Dans Eclipse, créez un nouveau projet synthese-vocale.
A la racine du projet, créez un dossier lib. Dans ce dossier, placez le jar SI_VOX.jar se trouvant à la racine du dossier que vous avez dézippé plus haut.
A la racine du projet, copiez le dossier donnees se trouvant à la racine du dossier que vous avez dézippé plus haut. Le fait qu’il soit copié à la racine du projet et qu’il se nomme donnees a son importance car le chemin est défini en dur dans le code de la librairie.
Vous devez vous retrouver avec l’arborescence suivante :

Arborescence_1

Ajoutez la librairie SI_VOX.jar au classpath du projet. Pour cela, clic droit sur le projet : Properties / Java Build Path, onglet Libraries, Add JARS, puis sélectionnez le jar se trouvant dans le dossier lib du projet.

Classpath

Créez un package com.nompackage dans le dossier source src. Dans ce package, créez une classe TestSyntheseVocale et copiez le code suivant :

import t2s.son.LecteurTexte;

public class TestSyntheseVocale {

    public static void main(String[] args) {
        final LecteurTexte lecteur = new LecteurTexte();
        lecteur.setTexte("Bonjour. Je suis un test de synthèse vocale. Quel est votre nom ?");
        lecteur.playAll();
    }

}

Pour tester et surtout écouter, clic droit sur la classe, Run as / Java Application.

4 – Configuration

Il est possible d’agir sur la voix de synthèse par l’intermédiaire du fichier de configuration si_vox.conf se trouvant dans le dossier donnees. Voici les paramètres intéressants :
FREQUENCE_INIT : permet de modifier la fréquence de la voix. Plus la valeur est basse, plus la voix est grave, plus la valeur est haute, plus la voix est aiguë.
HAUTEUR_PALIER : permet de modifier l’intonation de la voix. La valeur 1 permet d’avoir une voix monocorde. Plus la valeur est élevée, plus la voix est chantante.
VOIX_1 : permet de définir la voix qui va être utilisée. Cette valeur correspond au dossier et au fichier se trouvant dans le dossier “donnees/Mbrola”. Voir le paragraphe suivant pour installer de nouvelles voix.

Amusez-vous à modifier et combiner ces différents paramètres pour trouver la voix qui vous convient. Quelques valeurs significatives sont indiquées dans le fichier de configuration.

Installation de nouvelles voix

Rendez-vous sur le site GitHub de MBROLA pour télécharger de nouvelles bases vocales françaises (celles commençant par fr) : lien.
Dézippez l’archive.
Dans le dossier donnee/Mbrola de votre projet, créez un dossier frX (X étant le numéro de la voix), puis placez-y le fichier frX se trouvant dans l’archive dézippée.
Exemple de l’arborescence obtenue après ajout d’une nouvelle voix (ici la 4) :

Arborescence_2

Pour utiliser la nouvelle voix fr4, modifiez le paramètre VOIX_1 du fichier de configuration si_vox.conf :

VOIX_1=fr4/fr4

Pour écouter la nouvelle voix, clic droit sur la classe TestSyntheseVocale , Run as / Java Application.

Nicolas

Développeur JAVA, je suis passionné de robotique depuis quelques années, notamment tout ce qui concerne la partie programmation (vision artificielle, synthèse et reconnaissance vocale, intelligence artificielle, ...).

16 commentaires :

  1. Bonjour,

    Je voulais savoir comment cela fonctionne pour macOSX? À chaque fois, le programme me dit quelque chose du genre “Surprenant neil pas?”. Pourriez-vous m’aider? Merci.


    Bien cordialement, Valade Thomas.

    • Bonjour,

      Je ne suis pas certain que cela puisse fonctionner sous MacOS. N’ayant pas de Mac, je n’ai jamais testé. Je me demande même si ça peut marcher sous Mac étant donné que derrière le programme se cache 2 exécutables MBROLA : un pour Windows et un autre pour Linux. Peut-être as-tu utilisé la version Linux ?
      Mais quand tu dis que le programme dit quelque chose, c’est qu’il parle vraiment ? Si c’est le cas, c’est que tu ne dois pas être bien loin. Peut-être des problèmes de versions 32 / 64 bits ?
      Je sèche un peu … désolé.

      Nicolas

  2. Bonjour, quand je suis votre chemin cela ne fonctionne pas. Cela met:
    at t2s.traitement.GenerateurPreposition.tokensLine(GenerateurPreposition.java:101)
    at t2s.traitement.GenerateurPreposition.nouvellePreposition(GenerateurPreposition.java:128)
    at t2s.traitement.Arbre.(Arbre.java:60)
    at t2s.son.LecteurTexte.(LecteurTexte.java:71)
    at t2s.son.LecteurTexte.(LecteurTexte.java:100)
    at synthèse_français.test_synthèse_vocale.main(test_synthèse_vocale.java:9)

    Pourriez-vousm’aider svp

    • Bonjour,

      Désolé, mais la trace de la pile d’exception que vous m’avez envoyé n’est pas complète. Je ne peux donc pas dire ce qui ne va pas exactement.
      Je pense à un NullPointerException. Le chemin des fichiers de configuration est-il bon ?

      Cordialement,

      Nicolas

  3. Bonjour je sais ca mais je veux des commandes Vocal dans mon Projet !! Comment je vais faire ca ???

  4. Bonjour,

    Votre application fonctionne bien en mode test avec Eclipse mais après un Export les fichiers dans donnees ne sont plus accessible bien qu’il soient dans le .jar . Que puis-je faire ?

    Merci de ton aide.

  5. Bonjour,

    j’ai trouvé ma réponse. Il faut juste copier le fichier donnees dans le même folder que le .jar, et non pas essayer de le “packager” dans le jar.

    Merci pour le software…

    Luc

  6. Super. Cette librairie m’a beaucoup aidé pour un projet orienté reconnaissance vocale.

  7. bonjour j’ai mon fichier donnees a la source du projet mais ca ne se lance pas j’ai le message d’erreur suivant avez vous une idée de pourquoi?
    SI_VOX WARNING [SynthetiseurMbrola].play : Une erreur est survenue !
    java.io.IOException: Cannot run program “donnees/Mbrola/LinuxMbrolaExe/mbrola-linux-i386”: error=2, No such file or directory

    merci d’avance

    • Bonjour,
      A priori, le chemin de l’exécutable MBrola est bien calculé (apparemment vous êtes sous Linux).
      Ne serait-ce pas des problèmes de droit ? Tentez de lancer la commande suivante pour modifier les droits de l’exécutable :
      sudo chmod u+x /path/vers/le/projet/donnees/Mbrola/LinuxMbrolaExe/mbrola-linux-i386

      Puis relancez le programme.

  8. Bonjour,
    J’utilise SI_VOX dans un programme, et ça fonctionne. Sauf que dès que j’essaie d’executer le même code mais dans un thread, il ne prononce que la que la première syllabe de la phrase et pas la suite. Le multi threading n’est-il pas supporté?
    Merci d’avance

    • Bonjour,
      Désolé pour la réponse extrêmement tardive. Peut-être avez-vous déjà trouvé la réponse.
      Effectivement, ce problème doit être lié au multithread. Je pense que le premier thread (celui qui permet de lancer le thread de la synthèse vocale) doit se terminer avant le second. Il doit donc tuer le second. Résultat : le second thread n’a pas le temps de se terminer.
      Cordialement,
      Nicolas

  9. C:\jdk-18.0.1.1\bin\java.exe “-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1\lib\idea_rt.jar=50339:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1\bin” -Dfile.encoding=UTF-8 -classpath “C:\Users\Davy AGONMA\IdeaProjects\vidSwinng\out\production\vidSwinng;D:\taff\Nouveau dossier\SI_VOX-SRC\SI_VOX-src\SI_VOX.jar” honore.hounwanou.swwing.VocalAssistant
    SI_VOX WARNING [GenerateurPreposition] : Erreur lors du chargement du fichier de regles
    java.io.FileNotFoundException: donnees\rules\preposition.txt (Le chemin d�acc�s sp�cifi� est introuvable)
    Exception in thread “main” java.lang.NullPointerException: Cannot invoke “java.io.BufferedReader.readLine()” because “” is null
    at t2s.traitement.GenerateurPreposition.tokensLine(GenerateurPreposition.java:101)
    at t2s.traitement.GenerateurPreposition.nouvellePreposition(GenerateurPreposition.java:128)
    at t2s.traitement.Arbre.(Arbre.java:60)
    at t2s.son.LecteurTexte.(LecteurTexte.java:71)
    at t2s.son.LecteurTexte.(LecteurTexte.java:100)
    at honore.hounwanou.swwing.VocalAssistant.main(VocalAssistant.java:5)

    Process finished with exit code 1

Répondre à Valade Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *