收藏
回答

声音播放完不触发onEnded事件

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小游戏 Bug iOS ios11 苹果7 苹果8 6.6.7

- 声音播放结束不触发onEnded


- 期望播放结束 触发onEnded


- 不是所有播放都不触发 , 一段1分钟背景音乐 结束 切换下一首 第一次100%不触发


- no demo


回答关注问题邀请回答
收藏

3 个回答

  • 梦醒的夏天
    梦醒的夏天
    2018-09-25

    用了个土方法,监听到 onPlay 事件 同时写个setttimeout 事件 时间是当前播放音乐时长+1秒 回调如果检测没进行播放下一个,执行下一个声音播放

    2018-09-25
    有用
    回复
  • Katherine
    Katherine
    2018-09-25

    我也遇到同样的问题了,楼主的问题解决了吗?

    //监听玩家发送的语音消息
    onPlayerWsAudioMessage:function (o) {
    cc.xdConst.HALL_VOICE[cc.xdConst.HALL_VOICE.length] = o;
    this.playerPlayVoice(cc.xdConst.HALL_VOICE[0]);
    },

    playerPlayVoice:function (voiceData) {
    let seat = voiceData.seat;
    let audioPath = voiceData.audioPath;
    if(this.playerScripts[seat]!=null){
    this.playerScripts[seat].showAudioMessage(audioPath, ()=>{ //开始播放
               cc.xdConst.HALL_VOICE.splice(0,1);
    }, (len)=>{ //播放中

           }, ()=>{ //播放完成
               if(cc.xdConst.HALL_VOICE.length > 0){
    this.playerPlayVoice(cc.xdConst.HALL_VOICE[0]);
    }
    });
    }

    },


    //展示语音消息
    showAudioMessage:function (o, startPlay, playing, playEnd) {
    let anim = this.audioMessage.node.getChildByName("audioplay").getComponent(cc.Animation);
    cc.xdSdk.playVoiceFile(o, ()=>{ //开始播放
           cc.xdSdk.log('开始播放语音');
    startPlay();
    }, (len)=>{ //播放中
           playing();
    cc.xdSdk.log('播放语音ing ' + + len + '秒');
    this.audioMessage.node.active = true;
    this.audioMessage.node.getChildByName("audiolength").getComponent(cc.Label).string = len+"\"";
    anim.play();
    cc.xdAudioManager.pauseMusic();
    }, ()=>{ //播放完成
           playEnd();
    // cc.xdConst.HALL_VOICE.splice(0,1);
           cc.xdSdk.log('停止语音');
    this.audioMessage.node.active = false;
    anim.stop();
    cc.xdAudioManager.resumeMusic();
    });

    },


    //小游戏播放语音
    playVoiceFile:function (audioPath, callStarPlay, callbackPlaying, callbackEnd) {
    if(window.wx){
    let flag = true;
    let innerAudioContext = wx.createInnerAudioContext();
    innerAudioContext.src = audioPath;
    //播放语音
           innerAudioContext.play();
    innerAudioContext.onPlay(() => {
    console.log('开始播放');
    callStarPlay();
    });
    innerAudioContext.onTimeUpdate(res=>{
    if(flag){
    callbackPlaying(innerAudioContext.duration.toFixed(2));
    flag = false;
    }
    });
    innerAudioContext.onEnded(()=>{
    console.log('播放完成');
    callbackEnd();
    });
    innerAudioContext.onError((res) => {
    console.log(res.errMsg);
    console.log(res.errCode);
    });
    }
    },



    收到多条语音时,采用逐条播放,第一条语音可以正常播放,正常走onEnded(), 但第二条语音播放完成后不回调onEnded(),是因为什么原因呢?


    2018-09-25
    有用
    回复
  • 是小白啊
    是小白啊
    2018-09-17

    你好,请提供一下出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2018-09-17
    有用
    回复
登录 后发表内容