加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么UtteranceProgress侦听器没有被调用文本来说话?

发布时间:2020-12-14 05:28:59 所属栏目:Java 来源:网络整理
导读:我试图调用一些方法开始和结束文本到语音,所以我使用setOnUtteranceProgressListener,但它不工作/获取调用. 我究竟做错了什么? 这里需要的代码: 类: public class SpeechRecognizerActivity extends Activity implements TextToSpeech.OnInitListener 初
我试图调用一些方法开始和结束文本到语音,所以我使用setOnUtteranceProgressListener,但它不工作/获取调用.

我究竟做错了什么?

这里需要的代码:

类:

public class SpeechRecognizerActivity extends Activity implements TextToSpeech.OnInitListener

初始化方法:

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {
        String language = Locale.getDefault().getLanguage();
        int result = tts.setLanguage(Locale.US);
        if (result == TextToSpeech.LANG_MISSING_DATA
                || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS","This Language is not supported");
        } else {

        }
    } else {
        Log.e("TTS","Initilization Failed!");
    }
}

发言方式:

private void speakOut(String text) {
    setTtsListener();
    tts.setPitch(1.5f);
    tts.setSpeechRate(1.5f);
    tts.speak(text,TextToSpeech.QUEUE_FLUSH,null);
}

监听器(方法被调用在speakOut)中:
这些日志都没有显示在Logcat中.

private void setTtsListener() {
    if (Build.VERSION.SDK_INT >= 15)
    {
        int listenerResult = tts.setOnUtteranceProgressListener(new UtteranceProgressListener()
        {
            @Override
            public void onDone(String utteranceId)
            {
                Log.d(TAG,"progress on Done " + utteranceId);
            }

            @Override
            public void onError(String utteranceId)
            {
                Log.d(TAG,"progress on Error " + utteranceId);
            }

            @Override
            public void onStart(String utteranceId)
            {
                Log.d(TAG,"progress on Start " + utteranceId);
            }
        });
        if (listenerResult != TextToSpeech.SUCCESS)
        {
            Log.e(TAG,"failed to add utterance progress listener");
        }
    }
    else
    {
        int listenerResult = tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener()
        {
            @Override
            public void onUtteranceCompleted(String utteranceId)
            {
                Log.d(TAG,"progress on Completed " + utteranceId);
            }
        });
        if (listenerResult != TextToSpeech.SUCCESS)
        {
            Log.e(TAG,"failed to add utterance completed listener");
        }
    }
}

我发现一点解决方法是:

boolean speakingEnd = tts.isSpeaking();
    do {
        speakingEnd = tts.isSpeaking();
    } while ((speakingEnd));
    Log.d(TAG,"talking stopped");

我已经添加了一个sayOut方法的结尾,但这个解决方案不是很好.
与听众合作将是完美的.

那我做错了什么?

解决方法

当你调用tts.speak(text,null);
您需要使用KEY_PARAM_UTTERANCE_ID传递地图
HashMap<String,String> map = new HashMap<String,String>();
    map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"messageID");
    tts.speak(text,map);

这可以让TextToSpeech知道为该文本使用您的话语侦听器

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读