引擎组大佬求助,2.3.1关于音频播放setFinishCallback 只能回调一次

大家好!

用2.3.1新建一个空白项目,然后在helloword里面写音频播放的代码,如下

playMusic(){
let file = “2”;
// console.log(“播放”);

    cc.loader.loadRes(file, cc.AudioClip, (err, r) => {
        console.log(err);
        let id = cc.audioEngine.playMusic(r, false);
        cc.audioEngine.setFinishCallback(id, this.playMusic);
    });
}

第一次播放没问题,播放完可以回调,但是第二次播放完,就不回调了,之前1.9.3还是可以回调的

我也是遇到了这个问题,不知道老兄你解决了没,我的需求是需要播放好几首不同的背景音乐

public static playMusic(name: string){
    const path = ``;
    let that = this;
    cc.loader.loadRes(path, cc.AudioClip, (err: any, clip: cc.AudioClip)=>{
        if(err){
            console.warn(err);
            return;
        }
        that.playMusicLoop(clip);
    })
}

public static playMusicLoop(clip){
    let audioID =cc.audioEngine.play(clip, false, 1);
    cc.audioEngine.setFinishCallback( audioID,  ()=> {
        this.playMusicLoop(clip);
    })
}

试试。

谢谢回答,无法播放原因找到了,应该是引擎问题,setFinishCallback立马再调用自己去playMusic时会存在逻辑冲突,大概是js层调用play前会先调用stop导致的,在原生上不会出现这个问题,目前我只发现在web端会遇到这个问题,解决方法就是在回调前加上延迟。
let musicClip = this._audioMap.get(musicName);
if (musicClip) {
let id = cc.audioEngine.playMusic(musicClip, false);
cc.audioEngine.setFinishCallback(id, () => {
// 延时0.1s,防止callback调用不到
setTimeout(() => {
this.playMusicGroup(musicGroup, model, index);
}, 100);
});
} else {
cc.loader.loadRes(“audio/” + musicName, (err, clip) => {
if (err) {
console.error([AudioManager.playMusicGroup] audio/${musicName} 加载AudioClip失败);
} else {
this._audioMap.set(musicName, clip);
let id = cc.audioEngine.playMusic(clip, false);
cc.audioEngine.setFinishCallback(id, () => {
// 延时0.1s,防止callback调用不到
setTimeout(() => {
this.playMusicGroup(musicGroup, model, index);
}, 100);
});
}
});
}