TextToSpeech重音更改

时间:2018-09-20 10:38:58

标签: android text-to-speech

我正在使用下面的库来实现TextToSpeech的功能-

'net.gotev:speech:1.3.1'

现在我需要更改所有国家/地区的口音,就像我尝试过的美国英语-

Speech.getInstance().setLocale(Locale.US);

但是它不起作用,请指导我。

借助以下代码,我试图让它说一个字-

Speech.getInstance().say("Hello", new TextToSpeechCallback() {

                @Override
                public void onStart() {

                }

                @Override
                public void onCompleted() {

                }

                @Override
                public void onError() {

                }
            });

例如,现在它实际上会使用基于语言环境的英语口音- 如果它是由俄罗斯用户经营的,则由于其语言环境,它会用俄语口音说英语,但我希望它应该使用美国英语口音而不是基于语言环境的口音

1 个答案:

答案 0 :(得分:2)

在查看了该库的代码之后,我认为仅使用标准Android TextToSpeech object会更好。

使用normal TextToSpeech,做您想做的事情就很简单:

TextToSpeech tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int i) {
                tts.setLanguage(Locale.US);
                tts.speak("Hello", TextToSpeech.QUEUE_FLUSH, null);
            }
        });

该库我遇到的问题:

  • 它不使用它自己的嵌入式引擎,而是仅包装一个标准的Android TextToSpeech对象,而无需知道设备上使用哪种引擎!
  • 它使用的是Singleton模式,在某些语音引擎(如Google)的情况下,该模式容易发生内存泄漏。
  • 这个问题与您的问题有关:检查或响应其内部TextToSpeech对象的初始化没有任何意义。这意味着,当它尝试在其内部TTS对象上设置默认语言环境时,它实际上什么也不做...但是该错误是不可见的,因为无论如何TTS默认都会这样做。但是,当您尝试手动设置区域设置时,会发生同样的事情(什么也没有发生),因为TTS对象尚未初始化。