TextToSpeech Android无法正常运行

时间:2019-03-14 21:11:07

标签: android google-text-to-speech sony-xperia

我正在尝试找出为什么我的应用程序无法按预期运行的原因。为了找出原因,我创建了一个包含单个活动的小项目,如果您按一个按钮,则应该说出预定义的单词。我正在使用Sony Xperia Compact Android9。最近我进行了一些系统更新,这可能是原因吗?

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

    }
}

发生的事情是,当我按下按钮时只说了几个字。例如,在这种情况下,只能说handbollkula,而不能说golf。在其他情况下,不能说kula

然后,我创建了数组{"kula", "kula", "kula"}并按下了大约100次按钮,然后突然开始工作。因此很明显它可以说出单词,但是当我按下按钮时并不会总是发生。

对于Locale对象,我尝试了sv, sv-SVswe,它们的结果相同。

如果我使用英语和en,效果很好。

1 个答案:

答案 0 :(得分:0)

我在Ankidroid中遇到泰国人同样的问题。通常不讲话,但如果我使用手势重复讲话的次数足够多,有时会感到困惑。英语很好用。我卸载了Google文字语音转换的更新,并且可以再次使用。