SoundJS - 将声音分配给变量

时间:2016-11-16 15:35:01

标签: audio jquery-animate createjs soundjs

我正在使用loadManifest加载几个mp3文件,但我对如何将加载的声音分配给变量感到有点困惑。我可以在这里使用createInstance吗?

我的代码目前看起来像这样:

var myRoot = this;

var queue = new createjs.LoadQueue();
queue.addEventListener("fileload", handleFileLoad);
queue.addEventListener("complete", handleComplete);

queue.loadManifest([{ src: "media/file1.mp3", id: "sound1" },
                    { src: "media/file2.mp3", id: "sound2" },
                    { src: "media/file3.mp3", id: "sound3" }]);

function handleFileLoad(event) {    
    // assign each sound to unique variable
    myRoot.sound1 = createjs.Sound.createInstance("sound1");
    myRoot.sound2 = createjs.Sound.createInstance("sound2");
    myRoot.sound3 = createjs.Sound.createInstance("sound3");
}

function handleComplete(event) {
    // start playing sound1
    myRoot.sound1.play();
}

如何使用它的ID创建声音实例并将其分配给我以后可以轻松访问的变量?在我能够做到之前,我是否需要注册声音?

谢谢!

2 个答案:

答案 0 :(得分:1)

createjs.Sound.play(id)方法返回声音对象的实例。

所以你可以这样做:

myRoot.sound1 = createjs.Sound.play(id, [createjs.Sound.INTERRUPT_ANY], [delay], [offset], [loops], [volume]);

在此之后,您可以使用参考来自由地操纵声音。例如:

myRoot.sound1.volume = 0.5;
myRoot.sound1.addEventListener("complete", handleSoundComplete);
myRoot.sound1.play();
myRoot.sound1.stop();

通过使用此功能,您还可以使用其他几种可能性,例如将声音实例保存在数组中以重复使用它们,或者您可以使用自定义播放方法始终通过ID来播放它们。

此外,如果您使用清单加载程序加载声音,则无需单独注册每个声音,因为它们将自动注册。

答案 1 :(得分:1)

缺少以下行,并且该代码无需工作:

queue.installPlugin(createjs.Sound); 

那,最好将变量赋值移到handleComplete函数

完整的工作代码如下所示:

var myRoot = this;

var queue = new createjs.LoadQueue();
queue.installPlugin(createjs.Sound); 
queue.addEventListener("complete", handleComplete);

queue.loadManifest([{ src: "media/file1.mp3", id: "sound1" },
                    { src: "media/file2.mp3", id: "sound2" },
                    { src: "media/file3.mp3", id: "sound3" }]);

function handleComplete(event) {
    // assign each sound to unique variable
    myRoot.sound1 = createjs.Sound.createInstance("sound1");
    myRoot.sound2 = createjs.Sound.createInstance("sound2");
    myRoot.sound3 = createjs.Sound.createInstance("sound3");
    // start playing sound1
    myRoot.sound1.play();
}