Fix(云灵AI):[#5394]在云灵ai历史记录对话窗口,点击【语音播放】,播放中时点击重新生成,语音播放还在继续-2

This commit is contained in:
lifizer
2026-06-30 13:48:16 +08:00
parent ffeb37456c
commit f182d3b63a
2 changed files with 54 additions and 22 deletions
+44 -13
View File
@@ -84,6 +84,9 @@ export const chatMixinsV2 = {
this.audioStopHandle()
this.closeWsFn()
},
onHide() {
this.audioStopHandle()
},
created() {
const _this = this
uni.getSystemInfo({
@@ -671,6 +674,18 @@ export const chatMixinsV2 = {
})
},
audioStopHandle() {
// 强制关闭微信小程序背景音频
try {
const bgAudio = wx.getBackgroundAudioManager ? wx.getBackgroundAudioManager() : null
if (bgAudio && typeof bgAudio.stop === 'function') {
bgAudio.stop()
bgAudio.src = ''
bgAudio.title = ''
}
} catch (e) {
console.warn('stop background audio failed', e)
}
this.audioPlayId = ''
// Fix bug#4049
this.audioAyy = []
if (this.audioContext) {
@@ -679,11 +694,6 @@ export const chatMixinsV2 = {
this.audioContext = null
}
this.isPlayAudio = false
// 强制关闭微信小程序背景音频
if (typeof wx !== 'undefined' && wx.getBackgroundAudioManager) {
wx.getBackgroundAudioManager().stop()
}
},
ttsHandle(item) {
this.audioAyy = []
@@ -762,25 +772,46 @@ export const chatMixinsV2 = {
}
},
playNextChunk() {
if (this.audioAyy.length > 0 && this.audioPlayId) {
if (!this.audioAyy.length || !this.audioPlayId) {
this.isPlayAudio = false
return
}
// 销毁旧实例
if (this.audioContext) {
this.audioContext.stop()
this.audioContext.destroy()
this.audioContext = null
}
const src = this.audioAyy.shift()
this.isPlayAudio = true
const audioContext = uni.createInnerAudioContext({
// 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项
useWebAudioImplement: false
useWebAudioImplement: true // 短音频建议 true
})
this.audioContext = audioContext
audioContext.src = src
audioContext.onPlay(() => {
console.log('audio play:', src)
})
audioContext.onEnded(() => {
this.audioContext = null
audioContext.destroy()
this.playNextChunk()
})
audioContext.onError((err) => {
console.error('audio error', err)
this.audioContext = null
audioContext.destroy()
this.playNextChunk()
})
audioContext.play()
console.log('------------src' + src)
} else {
console.log('------------end')
this.isPlayAudio = false
}
},
bottomToolClickHandle(item) {
// 非界面跳转的需要校验登录状态
+1
View File
@@ -693,6 +693,7 @@ export default {
}
uni.removeStorageSync('addNewChat')
}
this.audioStopHandle()
},
methods: {
extraReqFn() {