Domanda

Sto cercando di implementare il testo alla tecnologia vocale di Android nella mia attività, ma affronto uno strano errore.Non riesco a sentire alcun suono, dal mio codice.Il metodo Speak funziona solo se lo metto nel metodo Oninit, altrimenti non parla.

Il mio codice è il seguente:

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

La cosa strana è che se metto il metodo dire in oninit, funziona bene!

Ho visto il logcat con attenzione e qui ci sono i risultati:

ttsservice.oncreate () Sta caricando Audiotrack ha iniziato Ttsservice.setlanguage. caricato it-noi con successo Impostazione del tasso vocale a 100

E poi non succede nulla.

Qualche idea su ciò che è sbagliato nel codice sopra?

Grazie in anticipo!

È stato utile?

Soluzione

Dopo alcune ore in più guardando il codice, ho notato che il problema è che l'inizializzazione del motore TTS richiede un po 'di tempo.Se l'inizializzazione non è finita, la chiamata del metodo Speak fallirà.

Se tu "dica" qualcosa sul pulsante clicca, probabilmente non avrai bisogno di questo, perché l'utente richiederà del tempo per pensare prima di premere il pulsante e l'inizializzazione sarà finita.

Se vuoi "dire" qualcosa come la prossima inizializzazione finisce, usa questo codice:

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

Altri suggerimenti

Si consiglia di implementare TextToSpeech.OnInitListener dall'attività principale.Prova questo

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;
}
.

Bene un'altra causa di questo problema potrebbe essere il tuo motore TTS, a volte nei telefoni Samsung il motore TTS predefinito è il motore Samsung che non funziona su alcune lingue come persiano (non intendo per il testo persiano, anche se tu "Sta cercando di leggere un testo inglese, ancora non funziona, è strano ma succede). Per risolvere tutto ciò che devi fare è impostare il motore TTS sul tuo codice (o selezionare Manualmente Setting -> Language input -> Text to speech -> Google Text-to-speech)

Un problema che ho avuto con testo-to-discorso è che se è installato nella scheda SD, non funzionerà quando l'USB è collegato.Quindi potresti provare a scollegare il tuo dispositivo di prova dal USB e vedere se risolve il problema.

Un'altra cosa che potresti provare sta facendo un passo attraverso il programma e vedere se stai modificando il tuo oggetto TEXT-TO-SPEGNO in alcun modo in caso di incidente.Imposta un punto di interruzione nella parte del tuo codice del tuo codice e dai un'occhiata a tutte le variabili nell'oggetto del talker.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top