Android 文本转语音非 google 引擎

Android Text to Speech non google engine

在我的 android 应用程序中,我有一个使用 Google 引擎的 TTS。

有这样的东西:

tts=new TextToSpeech(MyClass.this, status -> {
    if(status == TextToSpeech.SUCCESS){
       tts.setLanguage(locale);
       tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
            @Override
            public void onDone(String utteranceId) {

                if (utteranceId.equals("***")) {

                runOnUiThread(() -> {
                    Button view2 = findViewById(R.id.speech);
                    view2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.play, 0, 0, 0);
                });
                }
            }

            @Override
            public void onError(String utteranceId) {
            }

            @Override
            public void onStart(String utteranceId) {
            }
        });

    }
});

基本上我使用两种语言,斯洛伐克语和英语。两者都与 Google TTS 一起正常工作。

问题是,三星设备默认设置了自己的 TTS 引擎,因此文本语音转换应用不适用于这些设备。

用户将设备设置更改为使用 Google TTS 后,它就可以正常工作了。

但是有没有办法让我的代码支持两种 TTS 引擎?

我发现可能会有这样的工作:

TextToSpeech(Context context, TextToSpeech.OnInitListener listener, String engine) 

例如使用 com.google.android.tts 作为引擎参数。

但是在我的代码中我有类似 new TextToSpeech(MyClass.this, status -> {... 并且它不接受引擎作为第三个参数,而且我仍然不知道如何检测何时需要三星引擎并切换相应的引擎。

值得尝试通过传递此第三个参数来强制 TTS 引擎,因此交换发布的代码段中的最后一行

});

}, "com.google.android.tts");

还有两个对你有用的方法:getDefaultEngine() and getEngines()。只需在开始时创建一些带有两个参数(空侦听器)的虚拟 new TextToSpeech 并检查您有哪些可能性。

当 Google 引擎不存在时,getAvailableLanguages() and isLanguageAvailable(Locale loc) 也可能有用,但默认引擎仍可能支持您想要的语言