代码片段: https://developers.weixin.qq.com/s/FoS9qZmt8s0s
全文内容为:”你向投资人演示商业计划时,对方打断说:“给你1分钟说清楚盈利模式!”你应如何回答?“
只播到了:”你向投资人演示商业计划时“
音频有8秒的时长,
在oncanplay回调里的innerAudioContext.duration只有2+秒
代码:
// index.js
Page({
data: {
audioSrc: 'https://f.foundingaz.cn/api/files/audio/cherry_935b408fcf480c24d8411b2bbefbdd1e',
innerAudioContext: null,
errorMsg: ''
},
initAudio() {
console.log("🚀 ~ initAudio ~ initAudio:");
if (this.data.innerAudioContext) {
this.data.innerAudioContext.destroy();
}
const innerAudioContext = wx.createInnerAudioContext();
innerAudioContext.autoplay = false;
innerAudioContext.src = this.data.audioSrc;
innerAudioContext.onCanplay(() => {
console.log('准备好了,可以开始播放', innerAudioContext.duration);
});
innerAudioContext.onPlay(() => {
console.log('开始播放');
this.setData({ errorMsg: '' });
});
innerAudioContext.onPause(() => {
console.log('暂停播放');
});
innerAudioContext.onStop(() => {
console.log('停止播放');
});
innerAudioContext.onEnded(() => {
console.log('播放结束');
// 可以在这里处理播放结束后销毁实例的逻辑,如果需要的话
// if (this.data.innerAudioContext) {
// this.data.innerAudioContext.destroy();
// this.setData({ innerAudioContext: null });
// console.log('音频实例已销毁');
// }
});
innerAudioContext.onError((res) => {
console.error('播放错误:', res.errMsg, res.errCode);
this.setData({ errorMsg: `播放错误: ${res.errMsg} (错误码: ${res.errCode})` });
// 发生错误时,可以考虑销毁实例,避免资源占用
if (this.data.innerAudioContext) {
this.data.innerAudioContext.destroy();
this.setData({ innerAudioContext: null });
console.log('音频实例因错误已销毁');
}
});
this.setData({ innerAudioContext });
},
playAudio() {
console.log("🚀 ~ playAudio ~ playAudio:", this.data.innerAudioContext);
if (!this.data.innerAudioContext) {
this.initAudio();
}
if (this.data.innerAudioContext) {
this.data.innerAudioContext.play();
}
},
pauseAudio() {
if (this.data.innerAudioContext) {
this.data.innerAudioContext.pause();
}
},
stopAudio() {
if (this.data.innerAudioContext) {
this.data.innerAudioContext.stop();
this.data.innerAudioContext.destroy();
this.setData({ innerAudioContext: null });
console.log('音频实例已销毁');
}
},
onLoad() {
this.initAudio();
},
onUnload() {
if (this.data.innerAudioContext) {
console.log('组件卸载,销毁音频实例');
this.data.innerAudioContext.destroy();
this.setData({ innerAudioContext: null });
}
}
});
// index.wxml
<view class="audio-player-container">
<button bindtap="playAudio">播放</button>
<button bindtap="pauseAudio">暂停</button>
<button bindtap="stopAudio">停止并销毁</button>
<view wx:if="{{errorMsg}}">错误: {{errorMsg}}</view>
</view>
// index.wxss
.audio-player-container {
display: flex;
flex-direction: column;
align-items: center;
padding: 20px;
}
button {
margin: 10px;
padding: 10px 20px;
}
// index.json
{
"component": true,
"usingComponents": {}
}