Last active
November 11, 2016 16:34
-
-
Save cbaconnier/9a0eb2aa149da2a4340ef1d5bcdbc5c8 to your computer and use it in GitHub Desktop.
Sound Manager for Pixi.js using Howler
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment