SoundJS如何/可以加载其他预加载程序加载的声音文件(如Pixi.Loader.Loader())

How/Can SoundJS load sound files loaded by other Preloader(like that of Pixi.loaders.Loader())?

本文关键字:加载 Loader 文件 声音 Pixi 程序 如何 其他 SoundJS      更新时间:2023-09-26

我目前正在使用Pixi.js及其内置的Loader,当我浏览代码时,我注意到我也可以加载声音。我正在使用不同的声音加载程序,它是专门内置在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%的进度,这是我非常需要的,这样我就可以在进度栏中使用它。但是,这只是针对纹理,我想在百分比中包括Sounds,并决定也许我可以只使用loader,让SoundJS从那里加载文件。

这可能吗?

谢谢!

SoundJS只能播放已由SoundJS注册和加载的声音。使用私有API注册声音及其加载的数据可能是可能的,但这需要一些工作,而且没有官方方法。

你必须做的关键事情:

  1. 注册声音。AbstractPlugin完成了大部分工作,但需要一个"完整"事件来完成该过程
  2. 您可以强制执行complete(检查AbstractPlugin._handlePreloadComplete方法,该方法将加载的ArrayBuffer存储在_audioSources散列中

你必须对每个声音都这样做。一旦声音被注册,并且每个ID都有必要的数据,SoundJS API就应该可以工作了。

这是一种有趣的方法,将其作为功能请求添加到SoundJS中可能是有意义的。