首页 > 编程知识 正文

uniapp 语音播报,uniapp发送语音

时间:2023-05-03 21:19:27 阅读:285363 作者:4675

需求:收款时语音播报

思路:从通知栏获取通知=>通过通知栏消息传来的状态实行语音播报=>对传来的金额字符串进行替换存为数组=>播放数组音频,实现功能

进行开发时需要准备对应的音频文件:0~10,小数点,元,百,千,万文件等

话不多说,直接开发:

第一步获取通知栏的消息:

//利用h5+方法监听通知传来的消息,这里建议大家使用透传消息的方法,并且后台传值需要使用自己的格式,不能使用官方传值的格式plus.push.addEventListener('receive', function(msg) {console.log("----用户收到通知信息---",msg)},false);

第二步定义方法来对音频文件拼接:

//定义一个方法来拼接音频文件function splicingAudioFiles(res){ //res为对应的金额,接下来对金额进行替换音频文件的操作 //这里定义的开关控制对应的零是否发声操作 let afterDecimalPoint=false,beforeDecimalPoint=false,tenThousandDigits=false,Thousand=false,Tenthousand=false //arr保存对应的音频文件let arr=[],that = this //res进行保留两位小数的操作res=parseFloat(val).toFixed(2) //arrSplit将res切割保存为一个一个数组let arrSplit=res.split('') //定义一个循环从尾部开始进行替换,尾部开始时自动添加一个元的音频,然后开始一个一个数字进行替换for(let i=arrSplit.length-1;i>=0;i--){if(i==arrSplit.length-1){ arr.unshift('/static/yuyin/end.mp3') if(arrSplit[i]==0){ }else{arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')afterDecimalPoint=true }}else if(i==arrSplit.length-2){if(arrSplit[i]==0){if(afterDecimalPoint){arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')}}else{arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')afterDecimalPoint=true }}else if(i==arrSplit.length-3){if(afterDecimalPoint){arr.unshift('/static/yuyin/spot.mp3')}}else if(i==arrSplit.length-4){if(i==0){arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')}else{if(arrSplit[i]==0){}else{arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')beforeDecimalPoint=true} }} } //创建播放器对象that.musicObj = uni.createInnerAudioContext(); //src为播放器的播放路径that.musicObj.src='/static/yuyin/start.mp3' //play()为播放的方法that.musicObj.play() //onEnded()为播放结束的时候继续操作that.musicObj.onEnded(function(res){ //这里调用playVoice()方法 arr为保存音频文件的数组 that.musicObj为播放器对象playVoice(arr,that.musicObj)})}//定义方法播放每个音频文件function playVoice(arr,music){ //playFile 保存arr头一个音频文件 let playFile = arr.shift() //playFile 为空时结束语音播放if(!playFile) {music = nullme.extractData()return}music.src= playFilemusic.play()music.onStop(function(res){ if(arr.length==0){ music = null}else{playVoice(arr,music)}})}

第三步就是在接收到通知时调用方法,进行语音播报:

//监听消息,进行语音播报的操作plus.push.addEventListener('receive', function(msg) {console.log("----用户收到通知信息---",msg) splicingAudioFiles('12.1')},false);

到这里就可以正常的语音播报了,当然,深入一点还需要考虑正在播放音频文件时,又有一条通知时应该怎么做了

这里提供一个思路,队列,单线程

开源不易,请看完的朋友动动小手,点个赞哟,觉得对您有帮助,可以点个收藏

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。