/* * Will not work as expected * Please refer to this: https://github.com/sharbelfs/pixi-game-template/issues/1 */ import { utils, loader } from 'pixi.js' import { Howler, Howl } from 'howler' // import * as ResourceLoader from 'resource-loader' class SoundManager extends utils.EventEmitter { constructor(){ super() this._audios = new Map() this.audioUse = ['webm', 'mp3', 'wav', 'ogg'] // const Resource = ResourceLoader.Resource // Resource.setExtensionLoadType( "wav", Resource.LOAD_TYPE.AUDIO ) // Resource.setExtensionLoadType( "mp3", Resource.LOAD_TYPE.AUDIO ) // Resource.setExtensionLoadType( "ogg", Resource.LOAD_TYPE.AUDIO ) // Resource.setExtensionLoadType( "webm", Resource.LOAD_TYPE.AUDIO ) loader.use( this.middleware() ) } volume(level){ Holwer.volume(level) } set mute(value){ this._mute = value Howler.mute(this._mute) } get mute(){ return this._mute } muteAudio(sound, value = null){ if(value === null){ return this.audio(sound)._muted } this.audio(sound).mute(value) } audio(value){ return this._audios.get(value) } middleware(){ const self = this return function(res, next){ if(res){ let i, ext = self.getFileExt(res.url) let urlWithoutExt = res.url.slice(0, ext.index) for (i = 0; i < self.audioUse.length; i++) { if (ext[0].indexOf(self.audioUse[i]) >= 0) { res.url = self.splitExts(ext[0]) // Has a list of extensions if (Array.isArray(res.url)) { for (i = 0; i < res.url.length; i++) { res.url[i] = `${urlWithoutExt}${res.url[i]}` } } else { // Has a single extension res.url = [`${urlWithoutExt}${res.url}`] } res.data = new Howl({ src: res.url, preload: true, //sprite: spritename }) self._audios.set(res.name, res.data) res.data.once('load', next) } } } next() } } getFileExt(path) { return (/[.]/.exec(path)) ? /[^.]+$/.exec(path) : undefined } splitExts(ext) { return (/[|]/.exec(ext)) ? ext.split('|') : ext } /* setupAudioSprite(spritemap){ let HowlerSprite = {} for(let key of Object.keys(spritemap)){ console.log(key) HowlerSprite[key] = this.audioSpriteToHowler(spritemap[key]) } return HowlerSprite } audioSpriteToHowler(data){ return [ data.start * 1000, (data.end - data.start) * 1000, data.loop ] } */ } export default new SoundManager()