uniapp-实现语音播报功能,实时收款播报
需求:收款时语音播报
思路:从通知栏获取通知=>通过通知栏消息传来的状态实行语音播报=>对传来的金额字符串进行替换存为数组=>播放数组音频,实现功能
进行开发时需要准备对应的音频文件: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 = null me.extractData() return } music.src= playFile music.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);
到这里就可以正常的语音播报了,当然,深入一点还需要考虑正在播放音频文件时,又有一条通知时应该怎么做了
这里提供一个思路,队列,单线程
下一篇:
【百度翻译api】中文自动翻译为英文