0

我正在使用 preloadJS 1.0 加载 SoundJS 1.0 音频精灵。audiosprite 分为 4 个声音,我称之为 a、b、c 和 d。(在代码的其他地方,它随机播放 4 种声音中的哪一种。)

这是基本的加载和声明代码:

 var queue = new createjs.LoadQueue();
 createjs.Sound.alternateExtensions = ["mp3"];
 queue.addEventListener("complete",handleComplete);

 //load audiosprite and define start/duration times with variables.
 queue.loadFile({src:path,data:{
     audioSprite:[
     {id:sound+"a", startTime:aStart, duration: aDur},
     {id:sound+"b", startTime:bStart, duration: bDur},
     {id:sound+"c", startTime:cStart, duration: cDur},
     {id:sound+"d", startTime:dStart, duration: dDur},
     ]
     }});

 //register the 4 audioSprite sounds as individual sound instances
    myAudio[sound+"a"] = createjs.Sound.createInstance(sound+"a");
    myAudio[sound+"b"] = createjs.Sound.createInstance(sound+"b");
    myAudio[sound+"c"] = createjs.Sound.createInstance(sound+"c");
    myAudio[sound+"d"] = createjs.Sound.createInstance(sound+"d");

当我加载声音时,我得到: Uncaught TypeError: Cannot read property '1' of null

如果我注释掉最后 3 行并只创建 1 个实例(例如声音 +“a”),声音加载并且我没有收到错误,但显然我只得到 4 个部分中的 1 个。

我觉得问题是它不喜欢我像这样背靠背调用 createInstance 。这样做的正确方法是什么?

4

1 回答 1

0

您需要对多个文件使用 loadManifest;loadFile 仅加载单个文件。

 queue.loadManifest({src:path,data:{
 audioSprite:[
 {id:sound+"a", startTime:aStart, duration: aDur},
 {id:sound+"b", startTime:bStart, duration: bDur},
 {id:sound+"c", startTime:cStart, duration: cDur},
 {id:sound+"d", startTime:dStart, duration: dDur},
 ]
 }});

编辑 - 第 286 行的 handlePreloadComplete 函数看起来有点可疑,可能是一个错误https://createjs.com/docs/soundjs/files/soundjs_AbstractPlugin.js.html

p._handlePreloadComplete = function (event) {
    var src = event.target.getItem().src;
    this._audioSources[src] = event.result;
    for (var i = 0, l = this._soundInstances[src].length; i < l; i++) {
        var item = this._soundInstances[src][i];
        item.playbackResource = this._audioSources[src];
        // ToDo consider adding play call here if playstate == playfailed
        this._soundInstances[src] = null;
    }
};

迭代 this._soundInstances[src] 的长度,但在第一次迭代时将其设置为 null 将给出您提到的错误。

也许应该是

this._soundInstances[src][i] = null;
于 2018-03-09T12:19:40.797 回答