2016-09-07 81 views
0

我不能让TTS使用与en_US不同的语言发言。如果我尝试使用例如en_GB,然后speak()不会产生任何声音并立即返回。仅当使用“en_US”语言时,TTS才有效

语言数据安装正确。我在设备上有Google Text-to-speech Engine。此外,我试图使用另一个应用程序(口袋),并与任何语言完美的工作。

我的代码很简单:

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

我在哪里错了?

+0

你尝试过'setLanguage(new Locale(“eng”,“GBR”))吗? – brandall

+0

@brandall刚试过。结果相同。但是,无论如何感谢 –

+0

当您转到Android文本到语音设置并将语音更改为英国时,是否“听取示例”的工作? 'onInit'' SUCCESS'的结果是什么?不要在'speak()'中使用null,请正确使用API​​,否则解决此问题会给您带来更多问题。 – brandall

回答

0

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

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

还要注意,除了ACTION_CHECK_TTS_DATA意图检查TTS数据的可用性,您还可以使用isLanguageAvailable()一旦你创建了文字转语音实例,这将返回TextToSpeech.LANG_MISSING_DATA如果所需的资源没有安装用于查询语言。

当引擎设置为法语时,使引擎说意大利语字符串会产生一些非常有趣的结果,但它不会完全是您的用户会理解的东西因此,请尽量使您的应用程序内容的语言与您在TextToSpeech实例中加载的语言。另外,如果您使用Locale.getDefault()来查询当前的语言环境,请确保至少支持默认语言。