[Aporte by 4ng3r] Crear Voz con Java

Iniciado por AFelipeTrujillo, 21 Febrero 2010, 20:12 PM

0 Miembros y 1 Visitante están viendo este tema.

AFelipeTrujillo

    Si alguna vez escuchado el Narrator.exe de Windows, pues programe uno parecido en java solo es que toca agregarle la GUI pero no es gran cosa, simplemente es colocarle un jtextfield y un boton, enviar como parámetro el string que le de la entra al jtextfield al método hablar(), como cosa adicional hice que me generara un archivo .wav  y lo guardara en la carpeta del proyecto.

    Bueno para poder desarrollar algún code con estas características debemos descargar la siguiente librería (
AQUI) lo pegamos en el classpath todos los .jar y nos ponemos a codear !!!

Esta libreria solo puede generar tres tipos de archivo:


  • wav
  • au
  • aif

Bueno les dejo el code:

[/list]
Código (java) [Seleccionar]
import com.sun.speech.freetts.audio.AudioPlayer;
import com.sun.speech.freetts.audio.NullAudioPlayer;
import com.sun.speech.freetts.audio.SingleFileAudioPlayer;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioFileFormat.Type;

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

public class MiVoice_TTS {

    private Voice v;
    public MiVoice_TTS(String texto) {
        VoiceManager admin_voice= VoiceManager.getInstance();
        //administrador de recursos
        v=admin_voice.getVoice(texto);
        v.allocate();
    }

    public static void main(String[] args) {
        MiVoice_TTS voz = new MiVoice_TTS("kevin16");
        // Creamos el objeto que me generara la voz de Kevin16
        voz.hablar("Hi! my name is Anger");
        voz.hablar("Este es un DEMO, bye ");
        // LO QUE QUERAMOS QUE SE OIGA !!!
        voz.toFile("archivo.wav","Andres");
        //GENERAMOS EL ARCHIVO (archivo.wav)
        voz.cerrar();
    }

    private void cerrar() {
        v.deallocate();

    }

    private void toFile(String filename,String text) {
        Type tipo = getAudioType(filename);

        AudioPlayer audio = null;
        if(audio == null)
            audio = new NullAudioPlayer();
        audio = new SingleFileAudioPlayer(getNombre(filename), tipo);
        System.out.println("audioPlayer "+audio);
        this.v.setAudioPlayer(audio);
        this.v.speak(text);
        audio.close();   

    }

    private String getNombre(String filename) {
        int nam = filename.indexOf(".");
        if (nam==-1){
            return filename;
        }
        return filename.substring(0,nam);
    }

    private Type getAudioType(String filename) {
        // Elejimos el tipo de archivo
        Type [] tipo = AudioSystem.getAudioFileTypes();
        String ext = getExtension(filename);
        System.out.println(ext);
        for (int  i= 0; i < tipo.length; i++) {

            if (tipo[i].getExtension().equals(ext)){
                System.out.println("Se ha elejido la extensión: "+tipo[i].getExtension());
                return tipo[i];
            }
        }
        return null;
    }

    private String getExtension(String filename) {
        int sub = filename.indexOf(".");
        return filename.substring(sub+1);
    }

    private void hablar(String texto ) {
        this.v.speak(texto);
        // Meotodo que envia el texto para ser reproducido
    }
}


LINK


Blitzkrieg'

Buen aporte, yo habia hecho uno con GUI y con la libreria FreeTTS (creo que la usas ahi).



sapito169


Casidiablo



Debci

Sensacional.
Nada mas que decir :)

Saludos


anunnaki2011

Que buen aporte. Pero digo, si no es mucho, ya que lo implementaste seguramente podrías decirnos (o al menos orientarnos) como ponerlo en spanish. Gracias por compartir.