Skip to content

Instantly share code, notes, and snippets.

@cbaconnier
Last active November 11, 2016 16:34
Show Gist options
  • Save cbaconnier/9a0eb2aa149da2a4340ef1d5bcdbc5c8 to your computer and use it in GitHub Desktop.
Save cbaconnier/9a0eb2aa149da2a4340ef1d5bcdbc5c8 to your computer and use it in GitHub Desktop.
Sound Manager for Pixi.js using Howler
/*
* 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