Pergunta

Estou tentando implementar texto para fala a tecnologia do android na minha Atividade, mas eu enfrento um erro estranho.Eu não consigo ouvir nenhum som, do meu código.O método de falar só funciona se eu colocar no método onInit, mais ele não fala.

O meu código é o seguinte :

public class GameOverActivity extends Activity implements OnInitListener {
private TextToSpeech talker;
....
talker = new TextToSpeech(this, this);  
say("Something",false);
...
   public void onInit(int status) {  
        if (status == TextToSpeech.SUCCESS) {
          talker.setLanguage(Locale.US);
        }
        else if (status == TextToSpeech.ERROR) {
            Toast.makeText(this,"Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
        }

void say(String text, boolean flush) {
         if(flush == true)
         {
        talker.speak(text,TextToSpeech.QUEUE_FLUSH,null);
         }
         if(flush == false)
         {
        talker.speak(text,TextToSpeech.QUEUE_ADD,null);
         }         
    }

O estranho é que se eu colocar o diga método onInit, ele funciona muito bem!

Eu assisti logcat cuidadosamente e aqui estão os resultados :

TtsService.OnCreate () TTs é carregamento AudioTrack começou TTSService.setLanguage carregado en-US succusfully configuração de velocidade da fala para 100

e depois não acontece nada.

Qualquer ideia sobre o que há de errado com o código acima?

Obrigado antecipadamente!

Foi útil?

Solução

Depois de mais algumas horas olhando o código, notei que o problema é que o mecanismo TTS inicialização demora algum tempo.Se a inicialização não é mais, o método de falar chamada falhará.

Se você "dizer" algo no botão do mouse, você provavelmente não precisa desta, porque o usuário vai demorar algum tempo para pensar antes de pressionar o botão, e a inicialização será mais.

Se você quer "dizer" algo logo de inicialização for concluída, use este código :

talker = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int arg0) {
       if(arg0 == TextToSpeech.SUCCESS) 
           {
        talker.setLanguage(Locale.US);
            say(gameover,true);
            say(line,false);
            say(definition_string,false);
            }
        }
    });

Outras dicas

É recomendável que você implemente TextToSpeech.OnInitListener a partir de sua atividade principal.tente isso

public class GameOverActivity extends Activity implements TextToSpeech.OnInitListener {

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {

        int result = mTts.setLanguage(Locale.US);
        // Try this someday for some interesting results.
        // int result mTts.setLanguage(Locale.FRANCE);
        if (result == TextToSpeech.LANG_MISSING_DATA ||
                result == TextToSpeech.LANG_NOT_SUPPORTED) {
            // Lanuage data is missing or the language is not supported.
            //Log.e(TAG, "Language is not available.");
        } else {
            // Check the documentation for other possible result codes.
            // For example, the language may be available for the locale,
            // but not for the specified country and variant.

            // The TTS engine has been successfully initialized.
            // Allow the user to press the button for the app to speak again.
            // mAgainButton.setEnabled(true);
            // Greet the user.
            //sayHello();
        }
    } else {
        // Initialization failed.

    }

}

private TextToSpeech mTts;
}

Bem outra causa deste problema pode ser o seu mecanismo de TTS, às Vezes em celulares da SAMSUNG o padrão do mecanismo de TTS é a SAMSUNG Motor que não funciona em algumas línguas como o persa (não estou a dizer para persa de texto, Mesmo se você estiver tentando ler um texto em inglês, ele ainda não funciona, é estranho, mas acontece).A fim de resolver tudo que você tem a fazer é definir o mecanismo de TTS no seu código (ou seleccione Setting -> Language input -> Text to speech -> Google Text-to-speech manualmente)

Um problema que tive com o texto-para-fala é que, se ele está instalado no cartão SD, então ele não irá funcionar quando a ligação USB é conectado para cima.Então você pode tentar desligar o dispositivo de teste a partir da USB e veja se isso resolve o problema.

Outra coisa que você pode tentar é examinar o programa e ver se você está alterando o seu texto-para-fala objeto de qualquer forma no acidente.Definir um ponto de interrupção na conversa parte de seu código e dar uma olhada em todas as variáveis em seu locutor objeto.

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