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 []
なんで?