2016-09-07 79 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()來查詢當前的語言環境,請確保至少支持默認語言。