uni-app音频播放没声音问题
uni-app音频播放没声音问题
uni-app打包的Android App,按钮触发播放,在多次播放后(不确定多少次,每次都不一样),就会出现没声音的情况,然后把app重启了之后就又有声音了.
addCode(result) {
if (this.codes.includes(result)) {
// 发出重复扫码的提示音
// 优先判断是否重复扫码(避免产品流速过快,想要确定哪个产品是这一箱的最后扫的一个产品都不可以)
// 不要弹窗需要确认的提示弹窗,因为流水线不会停下来让用户按那个返回
console.log('重复扫码,播放失败声音')
const failAudio = uni.createInnerAudioContext();
failAudio.src = '/static/sound/fail.mp3'
failAudio.play()
// failAudio.destroy()
this.$refs.uToast.show({
title: `提示: 重复扫码(${result})`,
type: 'error'
})
} else {
const itemData = this.$refs.detailForm.getFieldsValue()
// 判断是否整箱,是否扫满
console.log('个数', itemData.pack_conversion, this.codes.length)
if (this.codes.length >= itemData.pack_conversion) {
console.log('已经完成所有扫码,播放失败声音')
const failAudio = uni.createInnerAudioContext();
failAudio.src = '/static/sound/fail.mp3'
failAudio.play()
// failAudio.destroy()
this.$refs.uToast.show({
title: `提示: 已完成整箱扫码,不能再录入(${result})`,
type: 'error'
})
return false
}
this.codes.unshift(result)
if (itemData.box_type !== 2 && (Number(itemData.pack_conversion) === this.codes.length)) {
console.log('扫码完成,播放完成声音')
const completeAudio = uni.createInnerAudioContext();
completeAudio.src = '/static/sound/complete.mp3'
completeAudio.play()
// completeAudio.destroy()
this.$refs.uToast.show({
title: `提示: 已完成所有扫码(${result})`,
type: 'success'
})
} else {
const successAudio1 = uni.createInnerAudioContext();
console.log('扫码成功,播放成功声音')
successAudio1.src = '/static/sound/success_1.mp3'
successAudio1.play()
this.$refs.uToast.show({
title: `提示: 录入成功(${result})`,
type: 'primary'
})
}
}
},
更多关于uni-app音频播放没声音问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
6 回复
在播放结束后销毁当前示例试试还会有这个问题吗?
Audio.onEnded(function() {
Audio.destroy();
});
更多关于uni-app音频播放没声音问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
试了,暂时没有用户反映这个问题.
回复 起風了: 在播放结束后销毁当前实例,还是一会播放有声音,一会播放没声音,醉了,不知道到底因为啥,昨天下班之前没声音,下班回家之后app再发语音就有声音了,早上试了也有声音,刚刚新发的语音还有声音,现在新发的又没有声音了
我也遇到了 扫码成功提示了十几次 音效就没有了 有解决方案么?
就是楼上说的那样,每次play之后都把播放的销毁.
这是一个典型的音频资源未正确释放导致的内存泄漏问题。每次触发播放时都创建新的InnerAudioContext实例,但未及时销毁,造成系统音频资源耗尽。
解决方案:
- 预创建音频实例并复用
data() {
return {
audioInstances: {
fail: null,
complete: null,
success: null
}
}
},
onLoad() {
// 预创建音频实例
this.audioInstances.fail = uni.createInnerAudioContext();
this.audioInstances.fail.src = '/static/sound/fail.mp3';
this.audioInstances.complete = uni.createInnerAudioContext();
this.audioInstances.complete.src = '/static/sound/complete.mp3';
this.audioInstances.success = uni.createInnerAudioContext();
this.audioInstances.success.src = '/static/sound/success_1.mp3';
},
methods: {
addCode(result) {
// 复用音频实例
if (this.codes.includes(result)) {
this.audioInstances.fail.play();
// ... toast提示
} else {
// ... 其他逻辑使用对应的音频实例
}
}
},
onUnload() {
// 页面卸载时销毁音频实例
Object.values(this.audioInstances).forEach(audio => {
audio.destroy();
});
}
- 添加错误监听和状态管理
// 在创建音频实例后添加
this.audioInstances.fail.onError((res) => {
console.error('音频播放失败:', res);
});
- 确保单次播放 在快速连续触发时,先停止当前播放再重新播放:
playAudio(audioInstance) {
audioInstance.stop();
audioInstance.play();
}

