discurso Android - como você pode ler o texto no Android?
-
18-09-2019 - |
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");
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:
- Sempre definir o UtteranceId (ou então OnUtteranceCompleted não será chamado) configuração
- 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