Android で Google TTS を使用してオフライン音声認識が可能かどうかに興味があり、それを機能させようとしましたが、成功しませんでした。私は、ユーザーが電話に「魔法の言葉」を話すことを要求する Android アプリに取り組んでおり、電話は正しい言葉を聞くと応答します。ネットワークに接続しているときは音声認識は問題なく機能しますが、オフラインで機能させる必要があります。
Android のドキュメントを調べていたところ、[KEY_FEATURE_EMBEDDED_SYNTHESIS][1] getFeatures(Locale) を使用して機能を取得し、エンジンがサポートする機能を確認するように記載されているドキュメントに出会いました。Google Text-to-Speech Engine の embeddedTts と networkTts の 2 つの機能が返されたため、embeddedTts 機能が利用可能です。以下のコードの 3 行目で、Android のドキュメントに従ってこの機能を有効にしましたが、効果がないようです。また、networkTts 機能を false に設定しようとしましたが、動作も変わりませんでした。データ ネットワークに接続していないときは常に、「現在 Google に接続できません」というエラーが表示されます。
ここの誰かが embeddedTts の使い方を理解するのを手伝ってくれることを願っています。
Android 4.1.1 を実行している Samsung Galaxy S3 でアプリをテストしています
ありがとうございました。
関連するコードは次のとおりです。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
HashMap<String, String> localSpeech = new HashMap<String, String>();
localSpeech.put(TextToSpeech.Engine.KEY_FEATURE_EMBEDDED_SYNTHESIS, "true");
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
// Fill the list view with the strings the recognizer thought it could have heard
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
if (matches.size() == 0)
{
tts.speak("Heard nothing", TextToSpeech.QUEUE_FLUSH, null);
} else {
String mostLikelyThingHeard = matches.get(0);
String magicWord = "Magic";
if (mostLikelyThingHeard.equals(magicWord)) {
//tts.speak("You got it!", TextToSpeech.QUEUE_FLUSH, null);
tts.speak("You got it!", TextToSpeech.QUEUE_FLUSH, localSpeech);
} else {
tts.speak("The magic word is not " + mostLikelyThingHeard + " try again", TextToSpeech.QUEUE_FLUSH, localSpeech);
}
}
}
else {
Log.d("APP", "result NOT ok");
}
super.onActivityResult(requestCode, resultCode, data);
}