function SoundInstance( soundObj, loop ){ this.soundObj = soundObj; } function SoundManager( gameState ){ var that = this; var soundCache = {}; var AUDIO_OUT = 1; var AUDIO_IN = 2; var AUDIO_STABLE = 0; this.audioState = AUDIO_STABLE; // Register all sounds loaded in gameState createjs.Sound.registerSound("res/sound/turkey_in_the_straw.mp3", "TitleMusic"); createjs.Sound.registerSound("res/sound/Store/supermarket.mp3", "MarketBackgroundSound"); createjs.Sound.registerSound("res/sound/Store/Waterford.mp3", "MarketMusic"); createjs.Sound.registerSound("res/sound/GUI/pop.mp3", "Pop"); createjs.Sound.registerSound("res/sound/GUI/lowclick.mp3", "LowClick"); createjs.Sound.registerSound("res/sound/GUI/click.mp3", "Click"); createjs.Sound.registerSound("res/sound/GUI/buzz.mp3", "Error"); createjs.Sound.registerSound("res/sound/Store/buy.mp3", "Buy"); createjs.Sound.registerSound("res/sound/Store/entrance.mp3", "Entrance"); createjs.Sound.registerSound("res/sound/GUI/ding.mp3", "Ding"); // Kitchen sound createjs.Sound.registerSound("res/sound/Kitchen/Oven_Door_Full_Open.mp3", "Oven_Door_Full_Open"); createjs.Sound.registerSound("res/sound/Kitchen/Oven_Door_Full_Close.mp3", "Oven_Door_Full_Close"); createjs.Sound.registerSound("res/sound/Kitchen/Oven_Door_Peek_Close.mp3", "Oven_Door_Peek_Close"); createjs.Sound.registerSound("res/sound/Kitchen/Oven_Door_Peek_Open.mp3", "Oven_Door_Peek_Open"); createjs.Sound.registerSound("res/sound/Kitchen/sizzle.mp3", "Sizzle"); createjs.Sound.registerSound("res/sound/Kitchen/Open_Cookbook.mp3", "Open_Cookbook"); createjs.Sound.registerSound("res/sound/Kitchen/Close_Cookbook.mp3", "Close_Cookbook"); this.backgroundSounds = []; this.backgroundSoundsQueue = []; this.fadeOut = function(){ for ( var i in that.backgroundSounds ){ that.backgroundSounds[i].audioState = AUDIO_OUT; } }; this.play = function( soundName ){ var channel = createjs.Sound.createInstance("Pop"); if( typeof soundName != "object" ){ channel = ( soundCache[soundName] ? soundCache[soundName] : soundCache[soundName] = createjs.Sound.createInstance(soundName) ); channel.volume = 1; } else{ channel = ( soundCache[soundName.name] ? soundCache[soundName.name] : soundCache[soundName.name] = createjs.Sound.createInstance(soundName.name) ); channel.volume = soundName.volume; } channel.play(); }; this.backgroundLoop = function( soundName ){ var newBackgroundSound; if( typeof soundName != "object" ){ newBackgroundSound = soundCache[soundName] ? soundCache[soundName] : soundCache[soundName] = createjs.Sound.createInstance(soundName); } else{ newBackgroundSound = soundCache[soundName.name] ? soundCache[soundName.name] : soundCache[soundName.name] = createjs.Sound.createInstance( soundName.name ); newBackgroundSound.setPosition(soundName.pos || 0); newBackgroundSound.volume = newBackgroundSound.desiredVolume = soundName.volume || 1; newBackgroundSound.play(); // loop-de-loop newBackgroundSound.addEventListener("complete", function(){ if( newBackgroundSound.volume == 0 ){ newBackgroundSound.stop(); return; } newBackgroundSound.setPosition(soundName.pos || 0); newBackgroundSound.volume = newBackgroundSound.desiredVolume = soundName.volume || 1; newBackgroundSound.play(); }); } that.backgroundSoundsQueue.push(newBackgroundSound); }; gameState.pubsub.subscribe( "Play", this.play ); gameState.pubsub.subscribe( "BackgroundLoop", this.backgroundLoop ); gameState.pubsub.subscribe( "FadeOut", this.fadeOut ); return { tick: function(){ for ( var i in that.backgroundSounds ){ if( that.backgroundSounds[i].audioState == AUDIO_OUT ){ that.backgroundSounds[i].volume -=0.03; } if( that.backgroundSounds[i].audioState == AUDIO_IN ){ that.backgroundSounds[i].volume +=0.03; } if( that.backgroundSounds[i].volume >= that.backgroundSounds[i].desiredVolume ){ that.backgroundSounds[i].volume = that.backgroundSounds[i].desiredVolume; } if( that.backgroundSounds[i].volume <= 0.0 ){ that.backgroundSounds[i].volume = 0; that.backgroundSounds[i].stop(); that.backgroundSounds.splice( i, 1 ); } } if( that.backgroundSounds.length == 0 ){ for ( var i in that.backgroundSoundsQueue ){ var newSound = that.backgroundSoundsQueue[i]; newSound.audioState = AUDIO_IN; that.backgroundSounds.push( newSound ); } that.backgroundSoundsQueue = []; } } } }