TextToSpeech Android не работает регулярно - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь выяснить, почему мое приложение не работает должным образом.Чтобы выяснить, почему, я создал небольшой проект с одним «Упражнением», в котором, если вы нажмете кнопку, должны произойти предопределенные слова.Я использую Sony Xperia Compact Android 9. В последнее время я сделал обновление системы, может ли это быть причиной?

import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;

import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import java.util.Locale;

public class MainActivity extends AppCompatActivity {
    private TextToSpeech textToSpeech;
    private boolean isInitialized = false;
    private MainActivity mainActivity;
    int ctr = 0;
    private String words[] = {"handboll", "kula", "golf"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mainActivity = this;

        textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == TextToSpeech.SUCCESS){
                    textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                        @Override
                        public void onStart(String utteranceId) {
                            System.out.println("---onStart");
                        }

                        @Override
                        public void onDone(String utteranceId) {
                            System.out.println("-----onDone");
                        }

                        @Override
                        public void onError(String utteranceId) {
                            System.out.println("-----onError");
                        }

                        @Override
                        public void onError(String utteranceId, int errorCode){
                            onError(utteranceId);
                            System.out.println("Error with code: " + errorCode);
                        }
                    });
                    isInitialized = true;
                    Locale locale = new Locale("sv");
                    textToSpeech.setLanguage(locale);
                }
            }
        });
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (isInitialized){
                    System.out.println(textToSpeech.getLanguage().getDisplayLanguage());
                    textToSpeech.speak(words[ctr], TextToSpeech.QUEUE_FLUSH, null, "SpeakTest");
                    ctr++;
                    ctr %= words.length;
                } else {
                    Snackbar.make(view, "Speaker not ready", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            }
        });

    }
}

То, что происходит, это то, что только несколько слов произнесены, когда я нажимаю кнопку.Например, в этом случае можно сказать только handboll и kula, но не golf.В других случаях kula не может быть сказано.

Затем я создал массив {"kula", "kula", "kula"} и нажал кнопку, может быть, 100 раз, после чего он неожиданно начал работать.Очевидно, что он может произносить слова, но это не всегда происходит, когда я нажимаю кнопку.

Для объекта Locale я пробовал sv, sv-SV и swe, все с одинаковым результатом.

Если я использую английский и en, он работает нормально.

1 Ответ

0 голосов
/ 18 марта 2019

У меня была такая же проблема с тайским в Ankidroid.Обычно нет речи, но если я использую жесты, чтобы повторять речь достаточно часто, это иногда беспокоит.Английский работает нормально.Я удалил обновления для текста Google в речь, и он снова работает.

...