Как / Может ли SoundJS загружать звуковые файлы, загруженные другим Preloader(например, Pixi.loaders.Loader())?
В настоящее время я использую Pixi.js и его встроенный Loader, поскольку, просматривая код, я замечаю, что могу также загружать звуки. Я использую другой загрузчик для Sound, который также встроен в 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 загружать / воспроизводить уже загруженный звук совершенно другим / не связанным загрузчиком.
Я не уверен, что делать, как я могу управлять двумя отдельными загрузчиками? Проблема с моим предыдущим состояла в том, что первый загрузчик смог дать мне 0-100% прогресса, который мне очень нужен, чтобы я мог использовать его в моем индикаторе прогресса. Но это только для текстуры, я хотел включить звуки в процентах и решил, что могу использовать только загрузчик и заставить SoundJS загружать файлы оттуда.
Это вообще возможно?
Спасибо!
1 ответ
SoundJS может воспроизводить только те звуки, которые были зарегистрированы и загружены SoundJS. Может быть возможно зарегистрировать звук и его загруженные данные, используя частные API, но это потребует некоторой работы, и нет официального подхода.
Ключевые вещи, которые вы должны сделать:
- Зарегистрируйте звук. AbstractPlugin выполняет большую часть работы, но для завершения процесса требуется событие "complete"
- Вы можете заставить полный (проверить
AbstractPlugin._handlePreloadComplete
метод, который сохраняет загруженный ArrayBuffer в_audioSources
хэш.
Вы должны сделать это для каждого звука. Как только звук зарегистрирован и у него есть необходимые данные для каждого идентификатора, API SoundJS должны работать.
Это интересный подход, и, возможно, имеет смысл добавить его в качестве запроса функции в SoundJS.