2012-06-20 34 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