uniapp-实现语音播报功能,实时收款播报
需求:收款时语音播报思路:从通知栏获取通知=>通过通知栏消息传来的状态实行语音播报=>对传来的金额字符串进行替换存为数组=>播放数组音频,实现功能进行开发时需要准备对应的音频文件:0~10,小数点,元,百,千,万文件等话不多说,直接开发:第一步获取通知栏的消息://利用h5+方法监听通知传来的消息,这里建议大家使用透传消息的方法,并且后台传值需要使用自己的格式,不能使用官方传值的
·
需求:收款时语音播报
思路:从通知栏获取通知=>通过通知栏消息传来的状态实行语音播报=>对传来的金额字符串进行替换存为数组=>播放数组音频,实现功能
进行开发时需要准备对应的音频文件: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);
到这里就可以正常的语音播报了,当然,深入一点还需要考虑正在播放音频文件时,又有一条通知时应该怎么做了
这里提供一个思路,队列,单线程
开源不易,请看完的朋友动动小手,点个赞哟,觉得对您有帮助,可以点个收藏
更多推荐
已为社区贡献17条内容
所有评论(0)