Pregunta

¿Cómo se puede leer los datos, es decir, convertir cadenas de texto simple a voz (habla) en Android?

¿Existe una API donde puedo hacer algo como esto:

TextToVoice speaker = new TextToVoice();
speaker.Speak("Hello World");
¿Fue útil?

Solución

Aquí tiene . Un tutorial sobre el uso de la biblioteca El gran inconveniente es que requiere una tarjeta SD para almacenar las voces.

Otros consejos

Uso del TTS es un poco más complicado de lo esperado, pero es fácil escribir un envoltorio que proporciona la API que desee.

Hay una serie de cuestiones que debe superar para conseguir que funcione muy bien.

Estos son:

  1. Siempre establecer el UtteranceId (o de lo contrario OnUtteranceCompleted no será llamada)
  2. configuración OnUtteranceCompleted oyente (sólo después del discurso sistema se ha inicializado correctamente)

public class TextSpeakerDemo implements OnInitListener
 {
    private TextToSpeech tts;
    private Activity activity;

    private static HashMap DUMMY_PARAMS = new HashMap();
    static 
    {
        DUMMY_PARAMS.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "theUtId");
    }
    private ReentrantLock waitForInitLock = new ReentrantLock();

    public TextSpeakerDemo(Activity parentActivity)
    {
        activity = parentActivity;
        tts = new TextToSpeech(activity, this);       
        //don't do speak until initing
        waitForInitLock.lock();
    }

    public void onInit(int version)
    {        //unlock it so that speech will happen
        waitForInitLock.unlock();
    }  

    public void say(WhatToSay say)
    {
        say(say.toString());
    }

    public void say(String say)
    {
        tts.speak(say, TextToSpeech.QUEUE_FLUSH, null);
    }

    public void say(String say, OnUtteranceCompletedListener whenTextDone)
    {
        if (waitForInitLock.isLocked())
        {
            try
            {
                waitForInitLock.tryLock(180, TimeUnit.SECONDS);
            }
            catch (InterruptedException e)
            {
                Log.e("speaker", "interruped");
            }
            //unlock it here so that it is never locked again
            waitForInitLock.unlock();
        }

        int result = tts.setOnUtteranceCompletedListener(whenTextDone);
        if (result == TextToSpeech.ERROR)
        {
            Log.e("speaker", "failed to add utterance listener");
        }
        //note: here pass in the dummy params so onUtteranceCompleted gets called
        tts.speak(say, TextToSpeech.QUEUE_FLUSH, DUMMY_PARAMS);
    }

    /**
     * make sure to call this at the end
     */
    public void done()
    {
        tts.shutdown();
    }
}

Un buen ejemplo de trabajo de TTS uso se pueden encontrar en el "Pro Android 2 book". Echar un vistazo a su código fuente para el capítulo 15.

Hay motores de texto a voz de terceros. Se rumorea que dona contiene un motor de texto a voz, lo que sugiere que estará disponible en futuras versiones de Android. Más allá de eso, sin embargo, no hay nada integrado en Android para el texto-a-voz.

El buñuelo tiene esto: ver el paquete android.speech.tts

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top