收藏
回答

createInnerAudioContext播放不完整?

代码片段: 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": {}
}
最后一次编辑于  06-18
回答关注问题邀请回答
收藏
登录 后发表内容