Salut.
J'utilise en ce moment ttslib permettant à processing de générer de la voix.
La librairie marche très bien mais je suis limité à une voix alors que la version java freetts prévoir plusieurs types de voix de synthèse.
J'ai vu un sujet similaire sur le forum de processing.org mais l'inscription au forum est bloquée (???)
La doc de ttslib étant très limitée, je me demandais si il était possible de faire des changement dans la librairie pour tester les autres voix.
Hors ligne
Hello,
ttslib est juste un wrapper (pas trop d'idée pour la traduction!) qui permet d'utiliser freetts dans processing. Si tu regardes la source, elle est très courte :
package guru.ttslib; import com.sun.speech.freetts.Voice; import com.sun.speech.freetts.VoiceManager; /** * @author guru * * a freetts wrapper for processing */ public class TTS { private Voice voice; public TTS() { VoiceManager voiceManager = VoiceManager.getInstance(); voice = voiceManager.getVoice( "kevin16" ); voice.allocate(); } public TTS( String name ) { VoiceManager voiceManager = VoiceManager.getInstance(); voice = voiceManager.getVoice( name ); voice.allocate(); } public void speak( String in ) { voice.speak( in ); } }
En théorie, tu peux appeler les autres voix de freetts, j'ai fait l'essai avec alan (dans le setup : tts = new TTS( "alan" ); ), mais ça ne fonctionne pas bien, des erreurs sortent sur la console. Les fichiers / bases de données vocales ont l'air d'être un sujet assez subtil... ( cf : http://festvox.org/festvox/festvox_toc.html )
Avec ttslib, il y a aussi un fichier "voices.txt" qui indique qu'on peut utiliser les voix du projet MBROLA :
# This file lists the voice directories avialable to FreeTTs. # To get the name of a voice directory from a voice jar file, # type "java -jar voicefile.jar". # # Entries should look like: #com.sun.speech.freetts.en.us.cmu_time_awb.AlanVoiceDirectory #com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory com.sun.speech.freetts.en.us.cmu_time_awb.AlanVoiceDirectory com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory # Uncomment to allow MBROLA voices: #de.dfki.lt.freetts.en.us.MbrolaVoiceDirectory
Et là il y a du choix : http://tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html
Il faudrait probablement installer mbrola pour avoir accès à d'autres voix, mais ça n'a pas l'air simple (j'ai juste jeté un coup d'oeil vite fait...). Si tu te lances, tiens nous au courant!
mbrola pour freetts : http://freetts.sourceforge.net/mbrola/README.html
et http://sourceforge.net/projects/freetts … ic/1219083
+ un lien ressources sur le tts : http://www.speech.cs.cmu.edu/
Hors ligne
J'ai essayé de mettre en place MBROLA en vain. Je bloque lors de la liaison processing > MBROLA. Pour être plus exact, c'est à cette phrase que je bloque :
citation :
To enable FreeTTS support for MBROLA, merely copy mbrola/mbrola.jar to lib/mbrola.jar. Then, whenever you run any FreeTTS application, specify the "mbrola.base" directory as a system property
Quoi qu'il en soit, mon projet a avancé, et ce que je peux dire pour aider les gens intéressés par ttslib, c'est que lors de la synthèse vocale, il faut avoir recours à un process parallèle pour s'affranchir de la lecture en cours : thread. Autrement il est impossible d'effectuer quoi que ce soit pendant l'acte de parole.
Seul inconvénient, ttslib ne prévoit pas de tts.kill(); ou de tts.stop(); donc on a des superpositions de voix si l'on travaille avec plusieurs thread.
Je vais encore creuser un peu pour voir si je peux stopper un thread. Bisous.
Hors ligne
hello,
tentative de coup de main :
as tu placé ton mbrola.jar dans ton sketchbook/librairies/ttslib/library ?
si c'est pas fonctionnel dans ce cas là tu devrais tenter de le placer dans ton usr/lib (mais au fait sous quel OS es tu ?)
pour la seconde pharse, à première vue tu dois effectuer cette commande en ligne de commande :
java -Dmbrola.base=/home/jim/mbrola -jar bin/FreeTTSHelloWorld.jar mbrola_us1
bonne suite
+++
Hors ligne
Hello,
Je viens de voir qu'il y avait des fonctions de text-to-speech dans la librairie Rita (avec Rispeech). On peut également l'utiliser avec mbrola et il y a un guide pour les faire fonctionner ensemble : http://www.rednoise.org/pdal/index.php?n=Main.Mbrola
Hors ligne
Pour une utilisation en différé, tu peux toujours utiliser eSpeak.
http://espeak.sourceforge.net/
Je l'utilise sous ubuntu, ça marche bien, en ligne de commande, et avec mbrola.
+++
Hors ligne
Ce sujet n'est plus tout jeune, mais je viens de tomber là-dessus, alors à toutes fins utiles ...
Using Mbrola-Voices with the Processing ttslib
Hors ligne
Hello
j'essaye de faire marcher ça sous ubuntu
j'ai suivis toutes les recommendations du gourou, mais j'ai toujours en retour :
Could not validate any MBROLA voices at /usr/share/mbrola/voices Make sure you FULLY specify the path to the MBROLA directory using the mbrola.base system property.
j'ai essayé plein de chemins dans :
System.setProperty("mbrola.base", "/usr/share/mbrola/voices");
mes voix sont dans /usr/share/mbrola/voices
j'ai essayé avec
/usr/share/mbrola
mbrola
usr/bin/mbrola
sans succès
(j'ai installé mbrola avec legestionnaire de paquets)
qq a une idée pour ce
mbrola.base
?
Hors ligne
Salut Cédric,
voici une solution pour utiliser espeak et mborola dans Processing via shell.
Tout d'abord, de mon côté, j'ai placé mes voices mborola dans le répertoire suivant:
/home/toto/share/espeak-1.42.04-linux/espeak-data
Je trouve dans ce dossier:
- le dossier mbrola contenant fr1, fr3 et fr6.
- le dossier mbrola_ph contenant un paquet de fichier type af1_phtrans, ca1_phtrans...
- le dossier voices, contenant lui même plusieurs dossiers dont un dossier mb avec des fichiers types mb-af1...
ce sont ces fichiers mb-fr1... que je place dans la ligne de commande capable d'utiliser espeak avec mborola.
Il est à noter que mon dossier mborola contenant les bin est en dehors de mon dossier espeak.
Il contient des executables (mborola..)
par ailleurs j'ai écrit le script bash suivant :
#!/bin/bash espeak -v mb-fr1 -f /home/toto/lolab/lecture--citations/deleuze | mbrola -e /home/toto/share/espeak-1.42.04-linux/espeak-data/mbrola/fr1 - - | aplay -r16000 -fS16
Je ne me souvient plus en détails des fonctions des arguments qui suivent la commande espeak mais tu peux trouver ça en ligne ici :
http://espeak.sourceforge.net/commands.html
Tu dois faire en sorte que ton script soit exécutable en bash :
clic droit / propriétés / ouvrir avec / bash
si il n'y est pas tu le crée toi même.
Pour processing, voici le code dont je me suis servis :
void setup() { size(200, 200); } void draw() { } void mousePressed() { try { Runtime r = Runtime.getRuntime(); if (r == null) System.out.println("Unable to get runtime"); else System.out.println("Runtime aquired"); System.out.println(r); Process p; System.out.println("Prepare process for start"); System.out.flush(); String cmd = "/home/toto/sketchbook/Tips & Astuces/shell_command/espeak.sh"; String[]command = { "/bin/bash", cmd }; p = r.exec(command); } catch (Exception e) { System.out.println("Error: " + e); } }
dis moi si ça le fait pour toi
+++
Hors ligne