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
[...] Si te interesa para Java, hace algunos dias escribi algo parecido, pero empleando un API llamado FreeTTS. Aqui el enlace. [...]
hola
hola hola
for (int i=0;i<3;i++)
{
System.out.println(“Hola”);
}
//—
hola necesito q me ayuden a convertir el texto a voz sobre un aplicacion q tengo hecha en java..gracias
¿Que necesitas hacer?. Echale de todas formas un vistazo a este API tal vez te sirva.
Y para Hablar en español ?
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.
Hola me pueden ayudar lo que pasa es que quiero convertir un texto en voz pero para el idioma Espñol.
Hola, yo también necesitaba convertir texto en voz en Español. Si alguien ha encontrado algo, por favor, que me avise. Un saludo
hola necesito ayuda!!!
Como puedo trabajar con TTS Festival y FreeTTS, por favor pueden ayudarme con información…
Saludos
annabell447@hotmail.com
Hola quisiera saber si alguien encontro el Engine TTS en español. porfa estoy desarrollando una aplicacion y lo necesito
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
Hola…. ta weno el programita…. si junciona… nomás ke pos toy chkando en español… gracias… me sirve… y mucho…
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.
aqui esta mi correro jajaja fnicolas_guillen@hotmail.com
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
como fuciona esto no puedo ejecuatra el ejemplo, por favor digamelo paso a paso
le pruebao pero sale q no encuentra package com.sun.speech
ayudeme por fa
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.
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.
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
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!