アプリが応答するいくつかのコマンドを「話す」オプションをユーザーに提供する小さなアプリに取り組んでいます。
音声認識が機能し、コマンドが登録されました。それらは認識されつつあり、必ず答えを出す必要があります。
唯一の問題は、そうではありません。
Google の tts エンジンでサポートされている言語を特定するために使用するコードは次のとおりです (古いバージョンの Android 用に開発しているため、残念ながら "tts.getAvailableLangues()" は含まれていません)。
Locale[] locales = Locale.getAvailableLocales();
List<Locale> localeList = new ArrayList<Locale>();
for (Locale locale : locales) {
int res = speaker.isLanguageAvailable(locale);
if (res == TextToSpeech.LANG_COUNTRY_AVAILABLE) {
Log.d(tag, "language: " + locale);
localeList.add(locale);
}
}
Log.d(tag, "languages available: " + localeList.size());
その最後のログの出力は常に「利用可能な言語: 0」です。
実際、このコードを実行すると、次のようになります。
int id = speaker.setLanguage(Locale.ENGLISH);
checkId(id);
「言語がサポートされていません」というエラーが返されます。デフォルトの言語の 1 つだけを使用しようとしていることを考えると、これは奇妙です: 英語 (英国、米国は関係ありません。「サポートされていません」)。
だから、明らかに、私が走ろうとすると
speaker.getLanguage();
nullを返します...
さらに奇妙なのは、InitListener が常に "TextToSpeech.SUCCESS" を報告することです。
private OnInitListener listener = new OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
Log.d(TAG, "tts engine started succesfully");
} else if (status == TextToSpeech.ERROR) {
Log.d(TAG, "seems like an error occured :c");
}
}
};
そのため、ログには常に「tts エンジンが正常に開始されました」と表示されます。
そして、これは私がttsを実行するために使用する実際のコードです:
public void speak(String text, Context context, OnInitListener listener) {
String tag = "dashboardactivity";
Log.d(tag, "speaking started in dummy module");
TextToSpeech speaker = new TextToSpeech(context, listener);
// int id = speaker.setLanguage(Locale.UK);
int id = speaker.setLanguage(Locale.ENGLISH);
speaker.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
そのコードには何も問題がないように見えますか、それとも何か不足していますか?
これが私が試した/チェックした/インストールしたもののリストです:
- ttsがインストールされています
- ボイスデータ搭載(イギリス英語、アメリカ英語の複数ボイス)
- 設定で「例を聞く」ボタンを押すと機能します!
だから、私が座っているところから、それが機能しない理由はありません。私の質問は次のとおりです。
- 私は何かを逃していますか?(特別な権限? 一部のデータ?)
- なぜ私のコードは、tts エンジンが 400 もの「ロケール」のうち 0 言語をサポートしていると言っているのですか?
- どうすればこれを修正できますか?