La synthèse vocale en Français avec SI_VOX et en Anglais avec FreeTTS

La synthèse vocale ou synthèse de la parole (ou TTS, Text-To-Speech) est une méthode qui permet de créer une parole artificielle à partir du texte. Elle s’appuie sur des techniques de traitement linguistique pour transcrire le texte et notamment le traitement de signal pour générer des signaux sonores à partir d’une version phonétique. Stephen Hawking utilise cette technique qui lui permet de communiquer avec les autres.

1 - Synthèse vocale en Français (avec SI_VOX)

SI_VOX est une librairie française et la meilleurs API pour la synthèse de la parole en français en Java. Pour pouvoir l'utiliser, suivez les étapes suivantes
  1. Télécharger l'api SI_VOX : http://users.polytech.unice.fr/~helen/SI_VOX-SRC.tar.gz
  2. Après la création du projet, Importer la bibliothèque 'SI_VOX.jar' dans votre projet.
  3. Copier et coller le dossier "données" qui se trouve  dans le dossier compressé dans la racine du projet, ce fichier contient les paramètres de la voix.
  4. Importer la classe pour lire le texte:
import t2s.son.LecteurTexte;
 5.  Créer un lecteur de texte :
LecteurTexte lecteur = new LecteurTexte("Bonjour");
 6. Lire le texte: 
lecteur.playAll();
 7.  Modifier le texte: 
lecteur.setTexte("je suis un programme de synthèse vocale");

import t2s.son.LecteurTexte;

public class Synthese_Vocale{
public static void main(String[] args) {
LecteurTexte lecteur = new LecteurTexte("bonjour");
lecteur.playAll();
lecteur.setTexte("je suis un synthétiseur vocal, qui êtes-vous?");
lecteur.playAll();
}
}

2- Synthèse vocale en Anglais (Avec FreeTTS)

FreeTSS est un système de la synthèse vocale open source, il a été crée avec le langage Java. FreeTTS est une implémentation de Java Speech API.


Pour des informations complémentaire sur l'api FreeTTS, cliquez sur ce lien http://freetts.sourceforge.net/docs/index.php#what_is_freetts

Pour transformer le texte en paroles, on a besoin de l'interface FreeTTSSpeakable qui convertie le texte en un objet FreeTTSSpeakable.

Voice: est le point central de FreeTTS, il prend en entrée un FreeTTSSpeakable et traduit le texte associé en un discours puis génère l'audio correspondant en sortie.

VoiceManager: est l'entrepôt des voix de FreeTTS. Voici comment procéder pour choisir une voix :
VoiceManager voiceManager = VoiceManager.getInstance();
// Créer une liste des voix
Voice[] voix = voiceManager.getVoices();

//Chaque voix a des propriétés, vous pouvez parcourir la liste pour trouver la voix selon vos besoin.
// allouer les ressources pour cette voix

voix [x].allocate();
Le code suivant est une application démonstratif pour démontrer l'utilisation du discours de Synthétiseur FreeTTS . Ce programme montre comment utiliser FreeTTS sans besoin de l'API "JSAPI".

import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;

public class Synthese_Vocale {
/**
* Comment afficher toutes les voix
*/
public static void listedesvoix() {
System.out.println("Toutes les voix disponibles:");
VoiceManager voiceManager = VoiceManager.getInstance();
Voice[] voix = voiceManager.getVoices();
for (int i = 0; i < voix.length; i++) {
System.out.println(" " + voix[i].getName()
+ " (" + voix[i].getDomain() + " domain)");
}
}

public static void main(String[] args) {

/*Méthode qui permet l'affichage de toutes les voix disponible*/
listedesvoix();

String nomVoix = "kevin";
System.out.println("\nVoix utilisée: " + nomVoix);

/* Le VoiceManager manages toutes les voix pour FreeTTS
*/
VoiceManager voiceManager = VoiceManager.getInstance();
/*Charger la voix
*/
Voice voix = voiceManager.getVoice(nomVoix);

/*Si le nom de voix n'existe pas alors erreur
*/
if (voix == null) {
System.err.println(
"La voix "
+ nomVoix + ". n'est pas reconnue svp essayez un autre nom.");
System.exit(1);
}

/* Charger les ressources dont la voix utilise
*/
voix.allocate();

/* synthétiser le discours
*/
voix.speak("hello world");
voix.speak("how are you today");
voix.speak("I am a programmer");

/* désalouer
*/
voix.deallocate();
/*programme terminé avec succès
*/
System.exit(0);
}
}