Frage

Ich versuche, die Text-to-Speech-Technologie von Android in meiner Aktivität zu implementieren, aber es tritt ein seltsamer Fehler auf.Ich kann von meinem Code keinen Ton hören.Die Speak-Methode funktioniert nur, wenn ich sie in die onInit-Methode platziere, andernfalls spricht sie nicht.

Mein Code ist wie folgt:

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

Das Seltsame ist, dass es einwandfrei funktioniert, wenn ich die say-Methode in onInit platziere!

Ich habe mir Logcat genau angesehen und hier sind die Ergebnisse:

Ttsservice.oncreate () tts laden Audiotrack Start ttsService

und dann passiert nichts.

Irgendeine Idee, was mit dem obigen Code falsch ist?

Dank im Voraus!

War es hilfreich?

Lösung

Nach einander mehr Stunden, um den Code zu suchen, bemerkte ich, dass das Problem ist, dass TTS Engine Initialisierung einige Zeit dauert.Wenn die Initialisierung nicht vorbei ist, fehlschlägt der Anruf der Speak-Methode.

Wenn Sie "sagen", klicken Sie an, Sie müssen dies wahrscheinlich nicht benötigen, da der Benutzer einige Zeit dauert, bevor Sie den Knopfdruck drücken, und die Initialisierung wird vorbei sein.

Wenn Sie "sagen möchten, dass etwas in der Initialisierung endet, verwenden Sie diesen Code:

generasacodicetagpre.

Andere Tipps

Es wird empfohlen, den generationspflichtigen Code von Ihrer Hauptaktivität implementieren.Versuchen Sie das

generasacodicetagpre.

Nun, eine weitere Ursache für dieses Problem könnte Ihre TTS-Engine sein. Manchmal ist bei SAMSUNG-Telefonen die Standard-TTS-Engine die SAMSUNG Engine, die bei einigen Sprachen wie Persisch nicht funktioniert (ich meine nicht bei persischem Text, selbst wenn Sie es versuchen). Ich habe einen englischen Text gelesen, es funktioniert immer noch nicht, es ist seltsam, aber es passiert).Um das Problem zu lösen, müssen Sie lediglich die TTS-Engine für Ihren Code festlegen (oder auswählen). Setting -> Language input -> Text to speech -> Google Text-to-speech manuell)

Ein Problem, das ich mit Text-to-Rede hatte, ist, dass, wenn es an der SD-Karte installiert ist, nicht funktioniert, wenn das USB angeschlossen ist.Sie können also möglicherweise versuchen, Ihr Testgerät vom USB abzutrennen und zu sehen, ob das Problem löst.

Eine andere Sache, die Sie möglicherweise versuchen, wird durch das Programm geführt und sehen, ob Sie Ihr Text-to-Sprach-Objekt in irgendeiner Weise verändern, in irgendeiner Weise zu verändern.Stellen Sie einen Break Point auf den Talk-Teil Ihres Codes ein und schauen Sie sich alle Variablen in Ihrem Sprecher-Objekt an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top