柚苏
楼主
发布于 2023-6-7 23:21:10
阅读 1024
查看全部
需求:收款时语音播报
思路:从通知栏获取通知=>通过通知栏消息传来的状态实行语音播报=>对传来的金额字符串停止交换存为数组=>播放数组音频,实现功能
停止开发时需要准备对应的音频文件: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);
复制代码 到这里就可以正常的语音播报了,当然,深化一点还需要考虑正在播放音频文件时,又有一条通知时应该怎么做了
这里提供一个思路,队列,单线程
开源不易,请看完的朋友动动小手,点个赞哟,觉得对您有协助,可以点个收藏 |
|