[英]android text to speech 0 supported languages on nexus 7
我正在開發一個小應用程序,它為用戶提供了“說出”該應用程序將響應的幾個命令的選項。
我已經完成了語音識別功能並注冊了命令。 他們正在被認可,並且應該以所有方式播放答案。
唯一的問題是:事實並非如此。
這是我用來確定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);
它將返回“不支持語言”錯誤。 考慮到我僅嘗試使用一種默認語言,這很奇怪:英語(英語,美國,沒關系,“不支持”)。
所以,很明顯,當我嘗試跑步時
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引擎需要進行自我初始化的時間,因此我在實例化它之后立即調用了“講話”。
現在,我將其移至OnInit偵聽器並預先保存:它可以正常工作!
現在是我的OnInitListener:
private OnInitListener listener = new OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
Log.d(TAG, "tts engine started succesfully");
Log.d(TAG, "setting language to default");
int id = tts.setLanguage(Locale.getDefault());
checkId(id);
tts.speak(mMessageToSpeak, TextToSpeech.QUEUE_FLUSH, null);
} else if (status == TextToSpeech.ERROR) {
Log.d(TAG, "seems like an error occured :c");
}
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.