Skip to content

Instantly share code, notes, and snippets.

@cbaconnier
Last active November 11, 2016 16:34
Show Gist options
  • Select an option

  • Save cbaconnier/9a0eb2aa149da2a4340ef1d5bcdbc5c8 to your computer and use it in GitHub Desktop.

Select an option

Save cbaconnier/9a0eb2aa149da2a4340ef1d5bcdbc5c8 to your computer and use it in GitHub Desktop.

Revisions

  1. cbaconnier revised this gist Nov 11, 2016. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions SoundManager.js
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,8 @@
    /*
    * 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'
  2. cbaconnier created this gist Nov 9, 2016.
    118 changes: 118 additions & 0 deletions SoundManager.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,118 @@
    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()