收藏
回答

innerAudioContext.onPlay() 执行了三次

问题模块
API和组件



代码里只调用了一次innerAudioContext.play();结果innerAudioContext.onPlay() 和

innerAudioContext.onEnded()

都执行了三次。

是bug?


最后一次编辑于  2017-12-14  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

11 个回答

  • June
    June
    2017-12-14

    这个实现方法有很多呀……


    比如将事件注册挂在onLoad的时候做就可以了

    2017-12-14
    赞同
    回复
  • June
    June
    2017-12-14

    这里你每次点击都注册了一遍事件,点击了三次就注册了三遍事件了。如果你只想跑一遍回调,就把注册事件的代码分拆出去跑一次就可以了。

    2017-12-14
    赞同
    回复
  • June
    June
    2017-12-14

    方不方便提供下微信版本号,机型和基础库版本,和完整能复现问题的例子?我这边尝试复现下触发3次的问题。

    2017-12-14
    赞同
    回复
  • June
    June
    2017-12-14

    你这里重设了src,点击多少次录音按钮就调用多少次onplay是正常的。

    2017-12-14
    赞同
    回复
  • June
    June
    2017-12-14

    你好,请提供一下能复现问题的简单代码示例。

    2017-12-14
    赞同
    回复
  • devil_zds
    devil_zds
    2017-12-14

    好的谢谢

    2017-12-14
    赞同
    回复
  • devil_zds
    devil_zds
    2017-12-14

    你意思是把监听事件放到page()外面吗?如果是这样的话我怎么去操作page里面的数据状态?

    2017-12-14
    赞同
    回复
  • devil_zds
    devil_zds
    2017-12-14

    真机微信版本是最新的,开发工具也是最新的,机型测过5s 、6,基础版本库1.60.

    <view catchtap="record" style="display: block;height: 40px;line-height: 40px;width: 100px;font-size: 14px;color: #fff;border-radius: 4px;background: #fa7829;text-align: center;">{{record_status}}</view>

    这段是wxml的内容

    const recorderManager = wx.getRecorderManager();
    const innerAudioContext = wx.createInnerAudioContext();
    // pages/test/test.js
    Page({
     
      /**
       * 页面的初始数据
       */
      data: {
          record_status: '未录音'
      },
     
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
       
      },
     
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
       
      },
     
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
       
      },
     
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
       
      },
     
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
       
      },
     
      /**
       * 页面相关事件处理函数--监听用户下拉动作
       */
      onPullDownRefresh: function () {
       
      },
     
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
       
      },
     
      /**
       * 用户点击右上角分享
       */
      onShareAppMessage: function () {
       
      },
      record: function() {
            var that = this;
            var record_status = that.data.record_status;
            if (record_status === '未录音') {
                recorderManager.start({
                    duration: 60000,
                    sampleRate: 44100,
                    numberOfChannels: 1,
                    encodeBitRate: 192000,
                    format: 'mp3',
                    frameSize: 50
                })
                record_status = '录音中'
            } else if (record_status === '录音中') {
                recorderManager.stop();
            } else if (record_status === '录音结束') {
                innerAudioContext.src = that.data.recorderPath.tempFilePath;
                innerAudioContext.play();
            } else if (record_status === '录音播放中') {
                innerAudioContext.stop();
            }
     
            recorderManager.onStop((res) => {
                record_status = '录音结束';
                console.log(res);
                that.setData({
                    record_status: record_status,
                    recorderPath: res   
                })
            });
     
            innerAudioContext.onPlay(() => {
                console.log('录音播放中');
                record_status = '录音播放中';
                that.setData({
                    record_status: record_status
                })
            })
     
            innerAudioContext.onStop(() => {
                console.log('录音播放停止');
                record_status = '录音播放停止';
                innerAudioContext.destroy();
                that.setData({
                    record_status: record_status
                })
            })
     
            innerAudioContext.onEnded(() => {
                console.log('录音播放结束');
                record_status = '录音播放结束';
                innerAudioContext.destroy();
                that.setData({
                    record_status: record_status
                })
            })
            that.setData({
                record_status: record_status
            })
      }
    })

    这个是控制台的输出

    2017-12-14
    赞同
    回复
  • devil_zds
    devil_zds
    2017-12-14

    按你这么说,我第一次播放也应该只调用onplay()一次吧,但是我这边第一次就三次了


    2017-12-14
    赞同
    回复
  • devil_zds
    devil_zds
    2017-12-14

    我是做录音然后播放的,录完,点击播放,现在是点击多少次那个录音按钮就会调用多少次onplay(),我后面每一次点击都会增加一次

    2017-12-14
    赞同
    回复

正在加载...