
我无法弄清楚为什么TTS无法始终如一地工作.我想了解如何改善当前设置.该应用程序从TTS开始,欢迎用户或提示用户说出语音命令.因此,在onCreate中,我仅具有以下内容:
textToSpeech = new TextToSpeech(TTSActivity.this, this);@H_404_7@我的TTSActivity类实现OnInitListener,所以我也有以下重写方法:
@OverrIDe public voID onInit(int status) { if (status == TextToSpeech.SUCCESS) { textToSpeech.setonUtteranceProgressListener(new UtteranceProgressListener() { @OverrIDe public voID onStart(String utteranceID) { // Todo auto-generated method stub } @OverrIDe public voID one rror(String utteranceID) { // Todo auto-generated method stub } @OverrIDe public voID onDone(String utteranceID) { //do some work here } }); textToSpeech.setLanguage(Locale.US); map.put(TextToSpeech.Engine.KEY_ParaM_UTteraNCE_ID, "UniqueID"); ttsstring(0); } else if (status == TextToSpeech.ERROR){ //try to restart TTS textToSpeech = new TextToSpeech(TTSActivity.this, this); ttsstring(0); } } //end onInit() method@H_404_7@一些解释:存在textToSpeech.setonUtteranceProgressListener(),以便在TTS引擎停止讲话后就可以激活语音识别. map来自HashMap map = new HashMap()和ttsstring是我希望TTS讲话的所有字符串.因此,我的ttsstring(ID#)方法如下所示.在说TTS之前,我先调用ttsstring(ID#)设置字符串.
private voID ttsstring(int ID) { switch (ID) { case 0:{ MetaString = "Say string one"; speakText(MetaString); break; } case 1:{ MetaString = "Say string two"; speakText(MetaString); break; } case 2:{ MetaString = "Say string three"; speakText(MetaString); break; } } }@H_404_7@这就是我让TTS发言的方式:
private voID speakText(String text) { if(textToSpeech.isspeaking()) { return; } else { textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, map); } }@H_404_7@我没有收到TTS未绑定的错误,所有 *** 作都在某个时间点进行,但并不一致.换句话说,有时程序会说话,有时却不会.你建议我做什么?重组?
解决方法:
一些提示:
在您的if(状态== TextToSpeech.ERROR)中,调用ttsstring(0);将始终失败,因为TTS尚未初始化.
您似乎没有调用tts.shutdown().实际上,我会在onStart()中初始化tts,并在onStop()中调用shutdown().
在我的应用程序中,我已将TTS投入使用,因此在配置更改期间重新创建我的活动/片段时,不必理会所有初始化/取消初始化.
查看logcat,应该看到任何错误.据我记得,问题出在使用svox语音时,出现了奇怪的错误,原因是未正确调用shutdown.
总结以上是内存溢出为你收集整理的为何无法始终使用文本转语音(TTS)?全部内容,希望文章能够帮你解决为何无法始终使用文本转语音(TTS)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)