其他分享
首页 > 其他分享> > 为何无法始终使用文本转语音(TTS)?

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

作者:互联网

我无法弄清楚为什么TTS无法始终如一地工作.我想了解如何改善当前设置.该应用程序从TTS开始,欢迎用户或提示用户说出语音命令.因此,在onCreate中,我仅具有以下内容:

textToSpeech = new TextToSpeech(TTSActivity.this, this); 

我的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

一些解释:存在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;
            }

        }
    }

这就是我让TTS发言的方式:

private void speakText(String text) {
        if(textToSpeech.isSpeaking()) {
            return;
        } else {
            textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, map);
        } 
    }

我没有收到TTS未绑定的错误,所有操作都在某个时间点进行,但并不一致.换句话说,有时程序会说话,有时却不会.你建议我做什么?重组?

解决方法:

一些提示:

在您的if(状态== TextToSpeech.ERROR)中,调用ttsString(0);将始终失败,因为TTS尚未初始化.

您似乎没有调用tts.shutdown().实际上,我会在onStart()中初始化tts,并在onStop()中调用shutdown().

在我的应用程序中,我已将TTS投入使用,因此在配置更改期间重新创建我的活动/片段时,不必理会所有初始化/取消初始化.

查看logcat,应该看到任何错误.据我记得,问题出在使用svox语音时,出现了奇怪的错误,原因是未正确调用shutdown.

标签:text-to-speech,android
来源: https://codeday.me/bug/20191122/2056447.html