TTS仅在使用“en_US”语言时才有效

时间:2016-09-07 10:33:48

标签: android text-to-speech

我无法让TTS发表任何与en_US不同的语言。如果我尝试使用例如en_GB,然后speak()不会产生任何声音并立即返回。

语言数据已正确安装。我在设备上有 Google文字转语音引擎。此外,我尝试使用另一个应用程序( Pocket ),它可以与任何语言完美配合。

我的代码很简单:

OnInitListener listener = new OnInitListener() {
  public void onInit(int status) {
    tts.setLanguage(Locale.UK); // returns LANG_COUNTRY_AVAILABLE
    tts.speak("Hello world", TextToSpeech.QUEUE_FLUSH, null);
  }
};
TextToSpeech tts = new TextToSpeech(activity, listener, "com.google.android.tts");

如您所见,setLanguage()会返回LANG_COUNTRY_AVAILABLE,但无所谓。

我尝试过多种语言,但没有任何改变:

tts.setLanguage(Locale.UK);
tts.setLanguage(Locale("spa", "ESP"));
tts.setLanguage(tts.getAvailableLanguages().iterator().next());

我哪里错了?

1 个答案:

答案 0 :(得分:0)

尝试检查语言的可用性。 它将返回TextToSpeech.LANG_COUNTRY_AVAILABLE以指示支持Locale参数描述的语言和国家(并且数据已正确安装)。

tts.isLanguageAvailable(new Locale("spa", "ESP")))

另请注意,除了ACTION_CHECK_TTS_DATA意图检查TTS数据的可用性之外,您还可以在创建TextToSpeech实例后使用isLanguageAvailable(),如果该实例将返回TextToSpeech.LANG_MISSING_DATA未查询所需资源。

当引擎设置为法语时,让引擎说一个意大利语字符串会产生一些非常有趣的结果,但它不会完全是您的用户会理解的东西所以尝试匹配您的应用程序的语言' s内容和您在TextToSpeech实例中加载的语言。此外,如果您使用Locale.getDefault()查询当前的区域设置,请确保至少支持默认语言。