伙伴云客服论坛»论坛 S区 S行业资讯 查看内容

0 评论

0 收藏

分享

uniapp-实现语音播报功能,实时收款播报

需求:收款时语音播报
思路:从通知栏获取通知=>通过通知栏消息传来的状态实行语音播报=>对传来的金额字符串停止交换存为数组=>播放数组音频,实现功能
停止开发时需要准备对应的音频文件:0~10,小数点,元,百,千,万文件等
话不多说,直接开发:
第一步获取通知栏的消息:
  1. //利用h5+方法监听通知传来的消息,这里建议大家使用透传消息的方法,并且后台传值需要使用自己的格式,不能使用官方传值的格式
  2. plus.push.addEventListener('receive', function(msg) {
  3.                 console.log("----用户收到通知信息---",msg)
  4. },false);
复制代码
第二步定义方法来对音频文件拼接:
  1. //定义一个方法来拼接音频文件
  2. function splicingAudioFiles(res){
  3.     //res为对应的金额,接下来对金额停止交换音频文件的操作
  4.     //这里定义的开关控制对应的零是否发声操作
  5.     let afterDecimalPoint=false,beforeDecimalPoint=false,tenThousandDigits=false,Thousand=false,Tenthousand=false
  6.     //arr保管对应的音频文件
  7.         let arr=[],that = this
  8.     //res停止保留两位小数的操作
  9.         res=parseFloat(val).toFixed(2)
  10.     //arrSplit将res切割保管为一个一个数组
  11.         let arrSplit=res.split('')
  12.     //定义一个循环从尾部开端停止交换,尾部开端时自动添加一个元的音频,然后开端一个一个数字停止交换
  13.         for(let i=arrSplit.length-1;i>=0;i--){
  14.                 if(i==arrSplit.length-1){
  15.                     arr.unshift('/static/yuyin/end.mp3')
  16.                     if(arrSplit[i]==0){
  17.                                           
  18.                         }
  19.                         else{
  20.                                 arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')
  21.                                 afterDecimalPoint=true  
  22.                         }
  23.                 }
  24.                 else if(i==arrSplit.length-2){
  25.                         if(arrSplit[i]==0){
  26.                                 if(afterDecimalPoint){
  27.                                         arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')
  28.                                 }
  29.                         }
  30.                         else{
  31.                                 arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')
  32.                                 afterDecimalPoint=true
  33.                         }
  34.                 }
  35.                 else if(i==arrSplit.length-3){
  36.                         if(afterDecimalPoint){
  37.                                 arr.unshift('/static/yuyin/spot.mp3')
  38.                         }
  39.                 }
  40.                 else if(i==arrSplit.length-4){
  41.                         if(i==0){
  42.                                 arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')
  43.                         }else{
  44.                                 if(arrSplit[i]==0){
  45.                                                
  46.                                 }else{
  47.                                         arr.unshift('/static/yuyin/'+arrSplit[i]+'.mp3')
  48.                                         beforeDecimalPoint=true
  49.                                 }
  50.                         }
  51.                 }
  52.     }
  53.      //创建播放器对象
  54.         that.musicObj = uni.createInnerAudioContext();
  55.     //src为播放器的播放途径
  56.         that.musicObj.src='/static/yuyin/start.mp3'
  57.     //play()为播放的方法
  58.         that.musicObj.play()
  59.     //onEnded()为播放完毕的时候继续操作
  60.         that.musicObj.onEnded(function(res){
  61.         //这里调用playVoice()方法 arr为保管音频文件的数组 that.musicObj为播放器对象
  62.                 playVoice(arr,that.musicObj)
  63.         })
  64. }
  65. //定义方法播放每个音频文件
  66. function playVoice(arr,music){
  67.     //playFile 保管arr头一个音频文件
  68.     let playFile = arr.shift()
  69.     //playFile 为空时完毕语音播放
  70.         if(!playFile) {
  71.                 music = null
  72.                 me.extractData()
  73.                 return
  74.         }
  75.         music.src= playFile
  76.         music.play()
  77.         music.onStop(function(res){
  78.             if(arr.length==0){
  79.                     music = null
  80.                 }else{
  81.                         playVoice(arr,music)
  82.                 }
  83.         })
  84. }
复制代码
第三步就是在接收到通知时调用方法,停止语音播报:
  1. //监听消息,停止语音播报的操作
  2. plus.push.addEventListener('receive', function(msg) {
  3.         console.log("----用户收到通知信息---",msg)
  4.     splicingAudioFiles('12.1')
  5. },false);
复制代码
到这里就可以正常的语音播报了,当然,深化一点还需要考虑正在播放音频文件时,又有一条通知时应该怎么做了
这里提供一个思路,队列,单线程
开源不易,请看完的朋友动动小手,点个赞哟,觉得对您有协助,可以点个收藏

回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

柚苏
注册会员
主题 16
回复 20
粉丝 0
|网站地图
快速回复 返回顶部 返回列表