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) } }) }