87 lines
3.1 KiB
JavaScript
87 lines
3.1 KiB
JavaScript
import { $mchConfig } from "@/http/apiManager"
|
|
import storageManage from '@/commons/utils/storageManage.js'
|
|
let num = 0 //计算错误此时 超过5次错误 不在出触发
|
|
const plugin = requirePlugin("WechatSI")
|
|
const pushMsgArr = [] //维护一个消息队列
|
|
let backgroundAudioManager = undefined //获取背景音频实例
|
|
let audioMp3 = ''
|
|
console.log('执行创建 语音播报逻辑');
|
|
// 获取配置项 判断是否 开启 小程序 语音推送
|
|
export function getPushStatus () {
|
|
if (!storageManage.token()) return //未登录 不播放
|
|
$mchConfig('orderConfig').then(({ bizData = [] }) => {
|
|
const weChat = bizData.find(v => v.configKey == "weChatVoice")
|
|
if (weChat && weChat?.configVal == 1) {
|
|
createBgMusice()
|
|
}
|
|
})
|
|
}
|
|
// getPushStatus()
|
|
// 创建 背景音乐
|
|
function createBgMusice (file) {
|
|
backgroundAudioManager = wx.getBackgroundAudioManager()
|
|
backgroundAudioManager.title = '订单通知'
|
|
if (!audioMp3) {
|
|
createFile()
|
|
} else {
|
|
backgroundAudioManager.src = audioMp3
|
|
}
|
|
|
|
// 监听 音频播放失败事件
|
|
backgroundAudioManager.onError(function (res) {
|
|
console.log('音频播放失败', res, num);
|
|
if (num >= 5) return
|
|
createFile()
|
|
num++
|
|
})
|
|
// 监听 音频播放结束事件
|
|
onBgMusiceEnd()
|
|
}
|
|
// 监听bei背景音乐播放状态
|
|
export function onBgMusiceEnd () {
|
|
backgroundAudioManager.onEnded(() => {
|
|
if (pushMsgArr.length > 0) return broadcast(pushMsgArr.pop()) //如果有消息 则继续播放
|
|
backgroundAudioManager.src = audioMp3 //否则播放默认背景音乐
|
|
})
|
|
}
|
|
export function startOrEndMusice (flag) {
|
|
if (!flag && !!backgroundAudioManager) return backgroundAudioManager.stop() //关闭背景音乐 地址指向空即可
|
|
if (!backgroundAudioManager) return createBgMusice() // 如果一开始是关闭状态 则创建背景音乐实例
|
|
backgroundAudioManager.src = audioMp3 // 否则重新赋值背景音地址即可
|
|
}
|
|
export default function (message) {
|
|
if (!backgroundAudioManager) return
|
|
pushMsgArr.unshift(message) //将消息添加到消息队列头部 背景音乐播放结束后 会对消息队列 进行校验 如果消息队列有消息 会进行播放 否则继续循环背景音乐
|
|
}
|
|
// 播放订单
|
|
function broadcast (msg) {
|
|
plugin.textToSpeech({
|
|
lang: "zh_CN",
|
|
tts: true,
|
|
content: msg,
|
|
success: function (res) {
|
|
backgroundAudioManager.src = res.filename;
|
|
onBgMusiceEnd()
|
|
},
|
|
fail: function (res) {
|
|
console.log("fail tts", res)
|
|
}
|
|
})
|
|
}
|
|
|
|
// 创建文件
|
|
export function createFile (file) {
|
|
const fs = wx.getFileSystemManager()
|
|
fs.copyFile({
|
|
srcPath: `static/noiseless.mp3`,
|
|
destPath: `${wx.env.USER_DATA_PATH}/noiseless.mp3`,
|
|
success (res) {
|
|
console.log(res, `${wx.env.USER_DATA_PATH}/noiseless.mp3`)
|
|
audioMp3 = `${wx.env.USER_DATA_PATH}/noiseless.mp3`
|
|
backgroundAudioManager.src = audioMp3
|
|
},
|
|
fail (res) {
|
|
console.error(res)
|
|
}
|
|
})
|
|
} |