jump to navigation

FreeTTS, convertir textos a voz… agosto 21, 2007

Posted by superpiwi in Eclipse, Java, Programacion.
trackback

Hoy algo divertido, vamos a convertir un texto en voz. Para ello hacemos uso del siguiente API: FreeTTS

Descargate el paquete desde su sitio web y lo descomprimes, Tienes que añadir a tu CLASSPATH los siguientes ficheros:

cmu_time_awb.jar, cmu_us_kal.jar, cmudict04.jar, cmulex.jar, cmutimelex.jar, en_us.jar, freets.jar, jsapi.jar

Aqui te dejo un ejemplo sencillito. He escrito una clase SimpleTTS. Con un constructor donde le pasas la voz que quieres usar («En el ejemplo Kevin16) y 2 metodos: speak (que te reproduce por el altavoz el texto especificado) y toFile (que te graba un fichero de audio).

Ejemplo:

SimpleTTS voz = new SimpleTTS(”kevin16″);
voz.speak(”Hello World!”);
voz.close();


/**
*
* FreeTTS
* requiere en el CLASSPATH: cmu_time_awb.jar, cmu_us_kal.jar, cmudict04.jar, cmulex.jar, cmutimelex.jar,
* en_us.jar, freets.jar, jsapi.jar
*
* @author jose
* @version 0.0.0.1
* @since JDK 1.5 / Eclipse Callisto
*/
import com.sun.speech.freetts.audio.AudioPlayer;
//import com.sun.speech.freetts.audio.JavaClipAudioPlayer;
//import com.sun.speech.freetts.audio.MultiFileAudioPlayer;
import com.sun.speech.freetts.audio.NullAudioPlayer;
//import com.sun.speech.freetts.audio.RawFileAudioPlayer;
import com.sun.speech.freetts.audio.SingleFileAudioPlayer;
//import java.io.*;
//import java.net.URL;
//import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
//import com.sun.speech.freetts.audio.JavaClipAudioPlayer;
public class SimpleTTS
{
Voice voice=null;
public SimpleTTS(String voiceName) throws Exception
{
VoiceManager voiceManager = VoiceManager.getInstance();
this.voice = voiceManager.getVoice(voiceName);
if (this.voice == null)
{
System.out.println("La lista de voces disponibles es:");
listAllVoices();
throw new Exception("No se encuentra la voz llamada: "+voiceName+". Por favor selecciona una voz diferente.");
}
this.voice.allocate();
}
//----
public void speak(String text) throws Exception
{
this.voice.speak(text);
}
//----
public void toFile(String filename,String text) throws Exception
{
javax.sound.sampled.AudioFileFormat.Type type = getAudioType(filename);
AudioPlayer audioPlayer = null;
if(audioPlayer == null)
audioPlayer = new NullAudioPlayer();
audioPlayer = new SingleFileAudioPlayer(getBasename(filename), type);
System.out.println("audioPlayer "+audioPlayer);
this.voice.setAudioPlayer(audioPlayer);
this.voice.speak(text);
audioPlayer.close();
}
//----
public void close() throws Exception
{
this.voice.deallocate();
}
//----
public static void listAllVoices()
{
System.out.println();
System.out.println("All voices available:");
VoiceManager voiceManager = VoiceManager.getInstance();
System.out.println("voiceManager:"+voiceManager);
Voice[] voices = voiceManager.getVoices();
for (int i = 0; i < voices.length; i++) {
System.out.println(" " + voices[i].getName()
+ " (" + voices[i].getDomain() + " domain)");
}
}
//----
public static javax.sound.sampled.AudioFileFormat.Type getAudioType(String file)
{
javax.sound.sampled.AudioFileFormat.Type types[] = AudioSystem.getAudioFileTypes();
String extension = getExtension(file);
for(int i = 0; i < types.length; i++)
if(types[i].getExtension().equals(extension))
return types[i];
return null;
}
//----
public static String getExtension(String path)
{
int index = path.lastIndexOf(".");
if(index == -1)
return null;
else
return path.substring(index + 1);
}
//----
public static String getBasename(String path)
{
int index = path.lastIndexOf(".");
if(index == -1)
return path;
else
return path.substring(0, index);
}
//----
static public void main(String[] args) throws Exception
{
try
{
// Instanciamos para usar la voz "kevin16"
SimpleTTS voz = new SimpleTTS("kevin16");
// Reproduce por el altavoz
//while (true)
//{
voz.speak("auan babuluba balan bambu");
voz.speak("Hello World!");
//}
voz.speak("Text to Speech demo");
// Graba un fichero de audio con el contenido en el directorio
voz.toFile("ttsdemo.wav", "Ubuntu Life is the best site of Linux");
// Podriamos reproducir este fichero desde consola: $ mplayer ttsdemo.wav
// Cerramos
voz.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//----
}
//end of class SimpleTTS

Comentarios»

1. Ubuntu Life » Blog Archive » Festival, Convertir un texto a voz - agosto 29, 2007

[…] Si te interesa para Java, hace algunos dias escribi algo parecido, pero empleando un API llamado FreeTTS. Aqui el enlace. […]

2. dd - octubre 17, 2007

hola

3. dd - octubre 17, 2007

hola hola

4. superpiwi - octubre 19, 2007

for (int i=0;i<3;i++)
{
System.out.println(«Hola»);
}
//—

😉

5. lorena - octubre 22, 2007

hola necesito q me ayuden a convertir el texto a voz sobre un aplicacion q tengo hecha en java..gracias

6. superpiwi - octubre 25, 2007

¿Que necesitas hacer?. Echale de todas formas un vistazo a este API tal vez te sirva.

7. lorena - noviembre 8, 2007

Y para Hablar en español ?

8. superpiwi - noviembre 13, 2007

ah, en eso estoy yo tambien 😉 , hace falta un engine TTS en español. pero los que conozco no son libres. asi que no los uso. Pero si encuentro alguno, lo comentare aca.

9. AlboradaJose - noviembre 28, 2007

Hola me pueden ayudar lo que pasa es que quiero convertir un texto en voz pero para el idioma Espñol.

10. Tuska - enero 6, 2008

Hola, yo también necesitaba convertir texto en voz en Español. Si alguien ha encontrado algo, por favor, que me avise. Un saludo

11. aap - abril 9, 2008

hola necesito ayuda!!!
Como puedo trabajar con TTS Festival y FreeTTS, por favor pueden ayudarme con información…
Saludos
annabell447@hotmail.com

12. Roger - septiembre 9, 2008

Hola quisiera saber si alguien encontro el Engine TTS en español. porfa estoy desarrollando una aplicacion y lo necesito

13. Dav!d - febrero 27, 2009

RESPONDAN por favor se necesita la voz en español, como se lo importo a mi aplicacion usando freetts, si podrian responder al email dmcoding@hotmail.com GRACIAS

14. Noel Pimentel - marzo 12, 2009

Hola…. ta weno el programita…. si junciona… nomás ke pos toy chkando en español… gracias… me sirve… y mucho…

15. Francisco Nicolás - abril 14, 2009

seeeee el programa esta chido y como importo la voz en español de festival al freetts , es para pasar la materia.
Si alguien sabe contesten a mi correro se los agradecere.

16. Francisco Nicolás - abril 14, 2009

aqui esta mi correro jajaja fnicolas_guillen@hotmail.com

17. karina - junio 7, 2009

hola yo tambien estoy necesitando la voz en español para mi programita con fretts , si me la pueden mandar a mi mail se los agradezzo . gracias

18. Miriam - julio 23, 2009

como fuciona esto no puedo ejecuatra el ejemplo, por favor digamelo paso a paso

19. Miriam - julio 23, 2009

le pruebao pero sale q no encuentra package com.sun.speech
ayudeme por fa

20. joordan - agosto 17, 2009

hola ke tal superwipi a penas hasta hoy vi este ejemplo practico de tts en java ke hiciste , y esta muy didactico se ve ke eres muy buen programador , kiero desarrollar un traductor con la ayuda de free tts , pero para eso necesito la opcion en español de tts , y no se si si tu ya has probado algo parecido a esto
????

espero me puedas ayudar a terminar mi proyecto gracias soy de queretaro, mex un saludo.

21. Diox76 - octubre 8, 2009

Saludos a tod@s. Muchas gracias por la explicación….y comentarios.

Quisiera pedir ayuda para mi problema…..

A mi me da este error:

Exception in thread «Thread-1» java.lang.Error: Unable to load voice directory. java.lang.ClassNotFoundException: com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory

cuando intenta ejecutar la instrucción:

VoiceManager voiceManager = VoiceManager.getInstance();

Mi entorno de programación es:

Eclipse
PAX CURSOR
Java

El caso es que he subido todos los .jar, que se encuentra en el directorio \lib, a un repositorio NEXUS.
En el procedo de ejecutar la configuración de este proyecto, se generan unos bundles con estos nombres:

wrap_mvn_com.sun.speech.freetts.en.us_cmutimelex_1.0.1_0
wrap_mvn_com.sun.speech.freetts.en.us_cmu_us_kal_1.0.1_0

¿Puede ser que el nombre de estos .jar sea el motivo por el cual no esté cargando correctamente el directorio de voces?

Gracias por la ayuda.

22. roberto - octubre 11, 2009

Hola chicos me llamo roberto necesito ayuda estoy creando mi proyecto en JAVA es para implementarlo en una cabina de internet el problema es que no se como deshabilitar las teclas del teclado en especial los teclados WINDOWS, Ctrl+C, Ctrl+V les doy las gracias pr ayudarme el codigo fuente me lo envian a mi correo robertocardenas8523@gmail.com que dios os vendiga

23. Diox76 - octubre 28, 2009

saludos chic@s….

ahora he avanzado en mi problema y no tengo el que comenté en el post #21…..sino que ahora mi error es que es incapaz de reproducir el sonido. No tengo ninguna excepción….y, cuando hago el deallocate, me genera el correspondiente fichero .wav con el sonido que le paso al método speak (que, como debe ser, es «hello world»)

¿Alguien me puede ayudar con esta labor que es reproducir el sonido?

¡Gracias de antemano!

24. anonimous - diciembre 3, 2010

Pero…¿esto no es un blog?, parece un foro…

25. jhonny nina veizaga - enero 4, 2011

Ya de una vez publiquen en español, lo que si es hay que modificar varias librerias , ya que casi todas la librerias hay *.en.us.*, que a mi parecer significa english to united stated. por eso debemos buscar librerias parecidas que tengan *.en.es.* y asi tendremos la conversion en español, paro todos mis amigos javeros, busquen sobre la librerias mbrola buscar en google download mbrola tolls y veran mucho que desear sobre texto a voz. y un tutorial en pdf que les sertvira de mucho ha y ademas para los que trabajan con delhpi tambien exite un libreria en la misma pagina. bueno para el que se tomo tiempo de leer esto , le aseguro que le servira mucho. por favor si les sirve de algo no olviden agradecerme, ya que eso hara que publique mas cuando siga encontrando cosas , mi nombre es jhonny nina veizaga ing. informatica la universidad autonoma gabriel rene moreno de santa cruz – bolivia. gracias.

Justicia - abril 24, 2011

no te entiendo, de lo que se venia hablando vos no encajas, perdon. La idea es hacer un la libreria en java para español, y vos no ayudas en nada, perdon q me meta pero es asi.
Chau «jhonny nina veizaga ing. informatica la universidad autonoma gabriel rene moreno de santa cruz» ufff

OPA - abril 24, 2011

-estoy de acurdo contigo «Justicia», se mando chapa al pedo, sos una reveranda pelotudaaaaa., uh perdoname se me fue la boca

26. Starbucksss - enero 25, 2011

Hola, cómo escribir texto a la consola? Gracias.

27. Starbucksss - enero 25, 2011

Hola, cómo escribo texto a la consola? Gracias.

28. Josefino - noviembre 26, 2011

Me sale este error! : System property «mbrola.base» is undefined. Will not use MBROLA voices.

29. dani - noviembre 29, 2011

para voz en español vean MBROLA

30. Rony - diciembre 12, 2011

Hola a todos,
Alguien encontro la voz para español. Por favor si alguien sabe de una version nueva de Fre TTS o alguna otra API con la en español estare muy agradecido.

boolean spanish = false;
while(! spanish){
System.out.println(«Searching the spanish voice …..»);
}

31. Rony - diciembre 12, 2011

Investigue algo de MBROLA y esto es para sistemas operativos Android en celulares.

32. Rony - diciembre 12, 2011

Pensaba migrar de Java a .NET por que ahi puedo usar los MS Agent de microsoft llamando desde C++ o C#, con un monton de agentes e idiomas, la única desventaja para mi es que no funciona bien en Windows 7. Espero encontrar algun dia la voz en español para Java.

33. yubini - abril 21, 2012

Hola necesito crear una aplicacion que convierta texto a voz en espanol estoy usando eclipse gracias

34. Lucas - abril 21, 2012

Hola como hago un nuevo engine tts ? y en caso de tenerlo, como agrego uno nuevo para poder usarlo =/ ?

35. ganar dinero en casa foro - enero 29, 2013

Howdy, i read your blog from time to time and i own a similar one and i was just wondering if you get a lot of spam
feedback? If so how do you protect against it, any plugin or anything you can advise?
I get so much lately it’s driving me crazy so any help is very much appreciated.

36. EDER RAFAEL BARRIOS CAMARGO - febrero 15, 2013

Como se añade una voz diferente a la de Alan kevin o kevin16 que son la predefinidas? urgente!!! Si alguna respuesta escribir a Ederb1.1c@gmail.com Gracias

37. livelif.com - abril 28, 2013

Howdy! Do you know if they make any plugins to help with Search Engine Optimization?
I’m trying to get my blog to rank for some targeted keywords but I’m not seeing
very good success. If you know of any please share. Kudos!

38. Armand Rose - septiembre 13, 2013

Hola me gustaria hacerlo a lo inverso un archivo de audio (.wav) a texto (.txt)????

39. legal advice - abril 26, 2014

Hi Dear, are you truly visiting this web page
on a regular basis, if so afterward you will absolutely obtain fastidious knowledge.

40. Fix Cmulex.jar Errors - Windows XP, Vista, 7 & 8 - septiembre 9, 2014

[…] FreeTTS, convertir textos a voz… | Java.Lang.NullPointer – Aug 21, 2007 · FreeTTS, convertir textos a voz… agosto 21, 2007 Posted by superpiwi in Eclipse, Java, Programacion. trackback. Hoy algo divertido, vamos a convertir un …… […]

41. finance - septiembre 24, 2014

This web site certainly has all the information I wanted about this subject and didn’t know who to ask.

42. Fix Jbapi.jar Errors - Windows XP, Vista, 7 & 8 - septiembre 27, 2014

[…] FreeTTS, convertir textos a voz… | Java.Lang.NullPointer – Aug 21, 2007 · FreeTTS, convertir textos a voz… agosto 21, 2007 Posted by superpiwi in Eclipse, Java, Programacion. trackback. Hoy algo divertido, vamos a convertir un …… […]

43. Fix Jcapi.jar Errors - Windows XP, Vista, 7 & 8 - octubre 23, 2014

[…] FreeTTS, convertir textos a voz… | Java.Lang.NullPointer – Aug 21, 2007 · FreeTTS, convertir textos a voz… agosto 21, 2007 Posted by superpiwi in Eclipse, Java, Programacion. trackback. Hoy algo divertido, vamos a convertir un …… […]

44. Spring - febrero 10, 2015

My heart broke when they zoomed in on Nando’s face at the beginning with the match. He looked so sad. I honestly thought he’d come in after the 70th minute or so. I’d love for him to see some action in Munich.

45. Rafael Angel Montero Fernández - enero 28, 2018

Donde descargo la biblioteca


Replica a roberto Cancelar la respuesta