2012-06-20 62 views
1

我有一個奇怪的問題與TTS引擎,我不知道爲什麼/我的錯誤在哪裏。搜索解決方案的小時數,但沒有任何可提及的結果。TTS - CHECK_VOICE_DATA_FAIL - 檢查引擎可用

當我使用這API Demo code一切工作正常,我可以聽到所有已安裝的語言的聲音。

但是,當我通過this method檢查時,我將CHECK_VOICE_DATA_FAIL作爲自定義TTS引擎(我需要所有必要語言,標準谷歌是不夠的)的返回碼。

我在這裏錯過了什麼?我如何檢查TTS引擎的可用性? 我知道這不一定是一個代碼問題,但是,對於其他程序,這似乎是工作。

我從SVox Website安裝了一些其他應用程序,這些似乎適用於我的所有設備,而下面的代碼失敗。

作爲示例,TalkToMeClassic正在檢查引擎的可用性並且它正在工作。

這裏有什麼不同嗎?

這裏是我的excact代碼(這是文章的複印件):

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent checkIntent = new Intent(); 
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(checkIntent, 0x99); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 0x99) { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      // success, create the TTS instance 
      mTts = new TextToSpeech(this, this); 
     } else { 
      Log.e("TTS","Missing Data:" + resultCode); 
      // missing data, install it 
      Intent installIntent = new Intent(); 
      installIntent.setAction(
       TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
     } 
    } 
} 
+0

您開發的這些引擎是?此代碼僅檢查默認引擎,如果未執行該檢查,則可能會得到奇怪的結果。如果忽略此檢查的結果(即,您是否獲得語音音頻),它會起作用嗎? –

回答

3

不幸的是,initializing TextToSpeech可靠是複雜的,異步和混亂。

爲什麼你的代碼檢查0x99?

實際上,您不需要使用ACTION_CHECK_TTS_DATA Intent來檢查語言可用性,而是使用TextToSpeech.isLanguageAvailable

因此here is a helper class這樣做。該庫中的代碼將幫助您開始。它可以像擴展this class一樣簡單。

或者您可以閱讀關於this book的詳細信息。

+0

謝謝。輔助類非常有用。但有一點我還不清楚:Intent是否已經過時,只能用於舊版本? – KarlKarlsom

+0

意圖不是過時的,並提供有關TTS引擎的其他信息。我相信這不是檢查語言數據的最便捷方式。 – gregm