How/Can SoundJS 加载由其他 Preloader 加载的声音文件(如 Pixi.loaders.Loader())?
How/Can SoundJS load sound files loaded by other Preloader(like that of Pixi.loaders.Loader())?
我目前正在使用 Pixi.js 及其内置加载器,当我浏览代码时,我注意到我也可以加载声音。我正在为声音使用不同的加载器,它也专门内置在 SoundJS 中。
问题是,我必须管理两个不同的加载程序才能完成此操作。一个用于声音,另一个用于纹理。
我有这样的 Pixi.js 加载声音文件:
new PIXI.loaders.Loader()
.add("_assets/textures/p1_walk/Von.json")
.add("_assets/textures/p2_walk/Don.json")
.add("_assets/textures/p3_walk/Bon.json")
.add("_assets/textures/tiles.json")
.add("_assets/textures/textures.json")
//.add('bgm1' , '_assets/bgm/bgm.mp3')
.add('jump' , '_assets/sfx/jump.wav')
.add('pickupcoin' , '_assets/sfx/pickupcoin.wav')
.add('hit' , '_assets/sfx/hit.wav')
.add('hit1' , '_assets/sfx/hit1.wav')
.add('died' , '_assets/sfx/died.wav')
.on("progress" , function(loader , resource)
{
console.log("Finished loading : " + resource.name + " progress : " + loader.progress);
})
.once("complete" , function()
{
console.log("Finished loading assets");
//soundManifest = soundManifest.concat(
// [
// {id : "bgm1" , src : "_assets/bgm/bgm.mp3" }
// , {id : "jump" , src : "_assets/sfx/jump.wav" }
// , {id : "pickupcoin" , src : "_assets/sfx/pickupcoin.wav" }
// , {id : "hit" , src : "_assets/sfx/hit.wav" }
// , {id : "hit1" , src : "_assets/sfx/hit1.wav" }
// , {id : "died" , src : "_assets/sfx/died.wav" }
// ]);
//createjs.Sound.alternateExtensions = ['mp3' , 'ogg' , 'wav' ];
//createjs.Sound.addEventListener('fileload' , handleLoad);
//createjs.Sound.registerSounds(soundManifest);
SoundJS.play("jump");
loadingScene = new LoadingScene(renderer , screenSize);
})
.load();
不幸的是,这行不通。不会播放跳跃音效。我不知道如何让 SoundJS load/play 已经通过完全 different/unrelated 加载器加载声音。
我不知道该怎么做,如何管理两个独立的加载程序?我之前的问题是第一个加载器能够给我 0-100% 的进度,这是我非常需要的,这样我就可以在我的进度条中使用它。但是,这仅适用于纹理,我想在百分比中包括声音,并决定也许我可以只使用加载器并让 SoundJS 从那里加载文件。
这可能吗?
谢谢!
SoundJS只能播放已经被SoundJS注册加载的声音。可能可以使用私有 API 注册声音及其加载的数据,但这需要一些工作,并且没有官方方法。
你必须做的关键事情:
- 注册声音。 AbstractPlugin 完成了大部分工作,但需要一个 "complete" 事件来完成该过程
- 您可以强制完成(查看
AbstractPlugin._handlePreloadComplete
方法,该方法将加载的 ArrayBuffer 存储在 _audioSources
散列中。
你必须对每个声音都这样做。一旦声音被注册,并且每个 ID 都有必要的数据,SoundJS API 应该可以工作了。
这是一种有趣的方法,将其作为功能请求添加到 SoundJS 可能很有意义。
我目前正在使用 Pixi.js 及其内置加载器,当我浏览代码时,我注意到我也可以加载声音。我正在为声音使用不同的加载器,它也专门内置在 SoundJS 中。
问题是,我必须管理两个不同的加载程序才能完成此操作。一个用于声音,另一个用于纹理。
我有这样的 Pixi.js 加载声音文件:
new PIXI.loaders.Loader()
.add("_assets/textures/p1_walk/Von.json")
.add("_assets/textures/p2_walk/Don.json")
.add("_assets/textures/p3_walk/Bon.json")
.add("_assets/textures/tiles.json")
.add("_assets/textures/textures.json")
//.add('bgm1' , '_assets/bgm/bgm.mp3')
.add('jump' , '_assets/sfx/jump.wav')
.add('pickupcoin' , '_assets/sfx/pickupcoin.wav')
.add('hit' , '_assets/sfx/hit.wav')
.add('hit1' , '_assets/sfx/hit1.wav')
.add('died' , '_assets/sfx/died.wav')
.on("progress" , function(loader , resource)
{
console.log("Finished loading : " + resource.name + " progress : " + loader.progress);
})
.once("complete" , function()
{
console.log("Finished loading assets");
//soundManifest = soundManifest.concat(
// [
// {id : "bgm1" , src : "_assets/bgm/bgm.mp3" }
// , {id : "jump" , src : "_assets/sfx/jump.wav" }
// , {id : "pickupcoin" , src : "_assets/sfx/pickupcoin.wav" }
// , {id : "hit" , src : "_assets/sfx/hit.wav" }
// , {id : "hit1" , src : "_assets/sfx/hit1.wav" }
// , {id : "died" , src : "_assets/sfx/died.wav" }
// ]);
//createjs.Sound.alternateExtensions = ['mp3' , 'ogg' , 'wav' ];
//createjs.Sound.addEventListener('fileload' , handleLoad);
//createjs.Sound.registerSounds(soundManifest);
SoundJS.play("jump");
loadingScene = new LoadingScene(renderer , screenSize);
})
.load();
不幸的是,这行不通。不会播放跳跃音效。我不知道如何让 SoundJS load/play 已经通过完全 different/unrelated 加载器加载声音。
我不知道该怎么做,如何管理两个独立的加载程序?我之前的问题是第一个加载器能够给我 0-100% 的进度,这是我非常需要的,这样我就可以在我的进度条中使用它。但是,这仅适用于纹理,我想在百分比中包括声音,并决定也许我可以只使用加载器并让 SoundJS 从那里加载文件。
这可能吗?
谢谢!
SoundJS只能播放已经被SoundJS注册加载的声音。可能可以使用私有 API 注册声音及其加载的数据,但这需要一些工作,并且没有官方方法。
你必须做的关键事情:
- 注册声音。 AbstractPlugin 完成了大部分工作,但需要一个 "complete" 事件来完成该过程
- 您可以强制完成(查看
AbstractPlugin._handlePreloadComplete
方法,该方法将加载的 ArrayBuffer 存储在_audioSources
散列中。
你必须对每个声音都这样做。一旦声音被注册,并且每个 ID 都有必要的数据,SoundJS API 应该可以工作了。
这是一种有趣的方法,将其作为功能请求添加到 SoundJS 可能很有意义。