Pergunta

Como você pode ler dados, ou seja, converter cadeias de texto simples para voz (fala) no Android?

Existe uma API onde eu possa fazer algo como isto:

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

Solução

Aqui você vai . Um tutorial sobre como usar a biblioteca A grande desvantagem é que requer um cartão SD para armazenar as vozes.

Outras dicas

Usando o TTS é um pouco mais complicado do que o esperado, mas é fácil escrever um invólucro que lhe dá a API que você deseja.

Há uma série de questões que devem ser superados para obtê-lo funcionar muito bem.

Eles são:

  1. Sempre definir o UtteranceId (ou então OnUtteranceCompleted não será chamado)
  2. configuração
  3. OnUtteranceCompleted ouvinte (só depois de o discurso sistema é inicializado corretamente)

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();
    }
}

Um bom exemplo de tts uso de trabalho pode ser encontrado no "Pro Android 2 livro". Ter um olhar para o seu código-fonte para o capítulo 15.

Há de terceiros motores de text-to-speech. Há rumores de que Donut contém um mecanismo de texto-para-voz, sugerindo que ele estará disponível em futuras versões do Android. Além disso, porém, não há nada construído em Android para text-to-speech.

Donut tem essa:. Ver o pacote android.speech.tts

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top