1

Android では、アプリケーションが言語ファイルの可用性についてプラットフォームにクエリを実行できます。以下のインテントをインスタンス化し、startActivityForResultメソッドを使用して非同期リクエストで送信するだけです。

Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_CHECK_DATA_REQUEST_CODE);

上記のリクエストの結果は、onActivityResultメソッドを呼び出すことによって返されます。2 番目の引数は、上記のリクエストの成功または失敗を表す値であり、3 番目の引数には追加データが含まれます。追加データの中には、2 つのリストがあります (空の可能性があります)。

  • 利用可能な声;

    ArrayList<String> availableVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
    Log.i(LOG_TAG, String.format("Available voices: %s %s", availableVoices.size(), availableVoices.toString()));
    
  • 利用できない声。

    ArrayList<String> unavailableVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES);
    Log.i(LOG_TAG, String.format("Unavailable voices: %s %s", unavailableVoices.size(), unavailableVoices.toString()));
    

上記のような単純なリクエストの場合、使用できないボイスのリストは空ですが、使用可能なボイスの配列はシステムにインストールされているすべてのボイスで満たされます。

エクストラを追加すると、動作が変わりますTextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR。ドキュメントによると、このエクストラは、特定の音声をチェックする TTS エンジンに指示を与えるために使用されます。ソースコードの例を次に示します。

ArrayList<String> checkVoiceDataFor = new ArrayList<String>(3);
checkVoiceDataFor.add("ita-ITA");   // installed on emulator
checkVoiceDataFor.add("eng-USA-female");  // not installed
checkVoiceDataFor.add("eng-USA");   // installed on emulator
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
checkIntent.putStringArrayListExtra(TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR, checkVoiceDataFor);

応答に次のものが含まれていることを期待しています。

  • 使用可能な音声のリストにある ita-ITA と eng-USA。
  • 使用できない声のリストに eng-USA-female があります。

ただし、結果は次のとおりです。

  • 使用可能なボイス: 2 [eng-USA ita-ITA]
  • 使用できないボイス: 0 []

なんで?

4

1 に答える 1

1

利用できない音声については、次を使用します。

    ArrayList<String> unavailable = data
            .getStringArrayListExtra("unavailableVoices");

結果は常に「eng-GBR」または「eng」の形式になります。

私があなたの質問を誤解していて、なぜあなたが「eng-USA-female」の検索のために特別に「unavailable」出力を受け取らないのか疑問に思っているなら、私は提案することができるだけです形式は、検索に渡すには適していません。'zzz-ZZZ'を検索して、実際の問題がどこにあるかを確認することをお勧めします...

お役に立てば幸いです。

于 2012-05-19T23:37:14.570 に答える