为何无法始终使用文本转语音(TTS)?

为何无法始终使用文本转语音(TTS)?,第1张

概述我无法弄清楚为什么TTS无法始终如一地工作.我想了解如何改善当前设置.该应用程序从TTS开始,欢迎用户或提示用户说出语音命令.因此,在onCreate中,我仅具有以下内容:textToSpeech=newTextToSpeech(TTSActivity.this,this);我的TTSActivity类实现OnInitListener,所以我也有以

我无法弄清楚为什么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)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1076998.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存