探究 TextToSpeech 语音播报中的speak与setOnUtteranceCompletedListener方法以及相应的替换方法

     最近在做一个有关于语音播报的功能,在安卓原生TextToSpeech 中可以支持文字转语音的语音播报功能,对于英文的文字,应该都会支持转成语音,但是对于中文的文字,你手机中不一定有中文语言包,所以不一定可以转成中文语音。据研究现在的大部分机型都支持中文,如华为,小米之类的手机中的TTS都是“科大讯飞”或者“度秘”的TTS,这类的TTS是可以支持中文的,具体可以到设置中搜索TTS查看,我就不多说这方面的东西了。

    1.下面先介绍一下setOnUtteranceCompletedListener的用法吧,这个方法就是监听语音播报完成之后的回调,很多人用了也设置了这个监听,但是没有回调,这是为什么呢?因为我们在设置播放语音的时候,习惯性的把最后一个参数设置为null,事实上要使用setOnUtteranceCompletedListener方法是要用到最后一个参数的。

 tts.setPitch(1.0f);
                    // 设置语速
 tts.setSpeechRate(1.0f);
 final HashMap ttsOptions = new HashMap<>();
 ttsOptions.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utterance");//utterance,这个参数随便写,用于监听播报完成的回调中
 tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener(){
                        int i=0;
                        @Override
                        public void onUtteranceCompleted(String s) { //这个s就是上面写的utterance,
                            if (i<3){//简单的做了个播报三次的功能
                                tts.speak("这是一条语音播报", TextToSpeech.QUEUE_FLUSH, ttsOptions);
                                i++;
                            }
                        }
                    });
tts.speak("这是一条语音播报", TextToSpeech.QUEUE_FLUSH, ttsOptions);

这样setOnUtteranceCompletedListener就生效了。

2.事实上我们在写这段代码的时候可以看到上述写法setOnUtteranceCompletedListener已经过期了,代替方法成了setOnUtteranceProgressListener,这个方法是比较好用,多了两个功能具体的用法就不多说了。

  tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                        int i=0;
                        @Override
                        public void onStart(String s) {//开始播放

                        }

                        @Override
                        public void onDone(String s) {//完成之后
                            if (i<3){
                                tts.speak("这是一条语音播报", TextToSpeech.QUEUE_FLUSH, ttsOptions);
                                i++;
                            }
                        }

                        @Override
                        public void onError(String s) {//播放错误的处理

                        }
                    });

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值