小程序innerAudioContext问题

最近在准备做一个录音倒放小程序的时候,遇到了点问题,就在这里做一下笔记,踩一下坑。
我这里采用的是基于vue开发的uniapp的前端框架来开发小程序。uniapp里面也集成封装了微信小程序的API接口,只需要把之前的wx.createInnerAudioContext()的wx,替换成uni就可以使用相同的API。
对比一下差别:详情可以参考uniapp的官方文档小程序的官方文档

    //uniapp
    methods: {
        clickPlay(){
            const innerAudioContext = uni.createInnerAudioContext();
            innerAudioContext.autoplay = true;
            innerAudioContext.src = 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/audio/music.mp3';
            innerAudioContext.onPlay(() => {
              console.log('开始播放');
            });
            innerAudioContext.onError((res) => {
              console.log(res.errMsg);
              console.log(res.errCode);
            });
        },
    }

    //wx
    methods: {
        clickPlay() {
            const innerAudioContext = wx.createInnerAudioContext();
            innerAudioContext.autoplay = true;
            innerAudioContext.src =
                'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46';
            innerAudioContext.onPlay(() => {
                console.log('开始播放');
            });
            innerAudioContext.onError(res => {
                console.log(res.errMsg);
                console.log(res.errCode);
            });
        }
    }

我们使用上面的代码,每次进行点击事件调用这个方法,会不断的生成innerAudioContext实例,就会导致点一下会放一次,点两下会叠在一起,点个十几下估计会成为混沌的噪音。解决的方法就是把生成实例放在export default上面。

const innerAudioContext = uni.createInnerAudioContext();
export default {
    data() {
        return {};
    },
    onLoad() {},
    mounted() {},
    methods: {
        clickPlay() {           
            innerAudioContext.autoplay = true;
            innerAudioContext.src =
                'https://img-cdn-qiniu.dcloud.net.cn/uniapp/audio/music.mp3';
            innerAudioContext.onPlay(() => {
                console.log('开始播放');
            });
            innerAudioContext.onError(res => {
                console.log(res.errMsg);
                console.log(res.errCode);
            });
        }
    }
};

后续问题接着更新

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容