动态加载音频的时间滞后

请教大佬。

在script中写了一个方法动态加载音频(方法如下):

playSound:function(){

    const url = "/sound/" + this.str_eng  //this.str_eng是全局变量,存储一个英文单词
     cc.log(url)

    cc.loader.loadRes(url,cc.AudioClip, function(err, AudioClip){

        if (err){
             cc.log(err)
        }else{
            this.soundWord = AudioClip;
        }
    }.bind(this));

cc.log(this.soundWord)

cc.audioEngine.play(this.soundWord, false, 1);

}

想要实现的效果是:呈现单词(this.str_eng),同时播放相应的单词的音频。
问题是:每次出现单词,对应的音频都不是这个单词,而是前面一次呈现的单词(单词是多个,逐个呈现)。输出结果也发现,url和this.soundWord对应的不是同一个单词。

请问这是怎么一回事呢?

加载需要时间啊

提前缓存 后续直接使用.

是提前把所有的音频都缓存吗?怎么缓存呢?

这…

如果加载需要时间的话,为什么滞后的刚好是一个单词的长度,而不是更长或更短?

刚开始学习,问的问题可能有些白,请不吝赐教 :pray:

如何缓存

  • 加载后保存所有的引用
    播放延迟的问题
  • 你要确定你的sound格式 你要确定下这个加载是否包含了解码的过程. wav是可以直接播放的无需再解码.

所有的音频文件都保存在assests/resources/sound下,音频文件换成了wav格式,可是依然延迟 :confounded:

缓存后播放还会延迟吗?

问题解决了,谢谢 :smile:
把前面的一个方法分成了两个方法,在调用方法2之前先调用方法1,这样是不是就是先缓存后播放?

playSound_1:function(){

const url = "/sound/" + this.str_eng  //this.str_eng是全局变量,存储一个英文单词
 cc.log(url)

cc.loader.loadRes(url,cc.AudioClip, function(err, AudioClip){

    if (err){
         cc.log(err)
    }else{
        this.soundWord = AudioClip;
    }
}.bind(this));

//cc.audioEngine.play(this.soundWord, false, 1);

}
playSound_2:function(){
cc.audioEngine.play(this.soundWord, false, 1);
}

加载是异步的,你直接把 cc.audioEngine.play(this.soundWord, false, 1)这句放在this.soundWord = AudioClip下面就好了

mark~

学习了
的确,效果一样

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。