我正在开发一个小应用程序,它让用户可以选择“说出”应用程序将响应的几个命令。
我已经让语音识别工作并注册了命令。他们正在被认可,无论如何,应该播放答案。
唯一的问题是:它没有。
这是我用来确定谷歌的 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);
它会返回“不支持的语言”错误。这很奇怪,因为我只尝试使用一种默认语言:英语(英国、美国,没关系,它“不支持”)。
所以,很明显,当我尝试跑步时
speaker.getLanguage();
它返回空...
更奇怪的是,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 种语言?
- 我怎样才能解决这个问题?