1

TTSエンジンに奇妙な問題があり、なぜ/どこに間違いがあるのか​​理解できません。解決策を探すために何時間も検索されますが、言及できる結果はありません。

このAPIデモコードを使用しているときは、すべてが正常に機能しており、インストールされているすべての言語で音声を聞くことができます。

しかし、このメソッドでチェックしていると、カスタムTTSエンジンのリターンコードとしてCHECK_VOICE_DATA_FAILが返されます(必要なすべての言語に必要ですが、標準のgoogleでは不十分です)。

ここで何が欠けていますか?TTSエンジンの可用性を確認するにはどうすればよいですか?これは必ずしもコードの問題ではないことを私は知っていますが、他のプログラムではこれは機能しているようです。

SVox Webサイトから他のアプリをいくつかインストールしましたが、これらはすべてのデバイスで機能するようですが、以下のコードは失敗します。

例として、TalkToMeClassicはエンジンの可用性をチェックしており、機能しています。

ここで何が違うのですか?

これが私の正確なコードです(これは記事のコピーです):

@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);
        }
    }
}
4

1 に答える 1

3

残念ながら、initializing TextToSpeech信頼性は複雑で非同期であり、混乱を招きます。

コードが0x99をチェックしているのはなぜですか?

ACTION_CHECK_TTS_DATA Intent実際には、を使用して言語の可用性を確認する必要はありませんTextToSpeech.isLanguageAvailable。代わりにを使用してください。

これがそれを行うヘルパークラスです。そのライブラリのコードは、始めるのに役立ちます。このクラスを拡張するのと同じくらい簡単です。

または、この本の詳細について読むことができます。

于 2012-06-21T13:03:56.197 に答える