FutureMedia
11/3/2014 - 4:59 PM

HTML5 Audio functions from http://www.kalliogladiators.fi/

HTML5 Audio functions from http://www.kalliogladiators.fi/

var Audio = function()
{
	var audioVolume = 0;
	
	var audioLibrary = new Array();
	//audioLibrary['music'] = {"src": "audio/whativebecome.mp3", "defaultVolume": 1, "loop": true};
	audioLibrary['music'] = {"src": "audio/theway.mp3", "defaultVolume": 1, "loop": true};
		
	var init = function() 
	{
		if (!Utils.isMobile())
		{
			audioVolume = 1;
					
			for (var key in audioLibrary)
			{
				$("#audio").append('<audio id="sound-' + key + '"></audio>');
				$("#sound-"+key).attr('src', audioLibrary[key].src);
				$("#sound-"+key).data('volume', audioLibrary[key].defaultVolume);
				$("#sound-"+key)[0].addEventListener('playing', soundHandler);
				$("#sound-"+key)[0].addEventListener('ended', soundHandler);
				$("#sound-"+key)[0].load();
				
				soundVolume(key, audioLibrary[key].defaultVolume, 0);
			}
		}
		else
		{
			kill();
		}
	}
	
	var soundHandler = function(e)
	{
		var key = e.target.id.substr(6, 32);
		
		switch(e.type)
		{
			case "ended":
				if (audioLibrary[key].loop)
					seek(key, 0);
			break;
			case "playing":
			
			break;
		}
	};
	
	var seek = function(audioKey, timeCode)
	{
		$("#sound-"+audioKey)[0].currentTime = timeCode;
		$("#sound-"+audioKey)[0].play();
	};
	
	var soundPlay = function(audioKey)
	{
		if (!Utils.isMobile())
		{
			$("#sound-"+audioKey)[0].play();
		}
	}
	
	var soundCreateAndPlay = function(audioKey)
	{
		if (audioVolume > 0 && !Utils.isMobile())
		{
			var time = new Date().getTime();
			$("#audio").append('<audio id="sound-' + time + '"></audio>');
			$("#sound-"+time).attr('src', audioLibrary[audioKey].src);
			$("#sound-"+time)[0].addEventListener('ended', soundRemove);
			$("#sound-"+time)[0].load();
			
			soundVolume(time, audioLibrary[audioKey].defaultVolume, 0);
			
			$("#sound-"+time)[0].play();
		}
	}
	
	function soundRemove(e)
	{
		var key = e.target.id.substr(6, 32);
		$("#sound-" + key).remove();
	}
	
	var soundStop = function(audioKey, duration)
	{
		if (!Utils.isMobile())
		{
			TweenMax.to($("#sound-"+audioKey), duration, {volume: 0, ease: Linear.easeNone, onComplete: function()
			{
				$("#sound-"+audioKey)[0].pause();
			}});
		}
	}
	
	var soundVolume = function(audioKey, volumeTo, duration)
	{
		TweenMax.to($("#sound-"+audioKey), (duration > 0 ? duration : 0), {volume: volumeTo, ease: Linear.easeNone});	
	};
	
	var mute = function()
	{
		TweenMax.to($("audio"), 1, {volume: 0, ease: Linear.easeNone});
	}
	
	var unMute = function()
	{
		$.each($("audio"), function()
		{
			TweenMax.to($(this), 1, {volume: $(this).data("volume"), ease: Linear.easeNone});
		});
	}
	
	var getVolume = function()
	{
		return audioVolume;
	}
	
	var kill = function()
	{
		audioVolume = 0;
		mute();
	}
	
	var unKill = function()
	{
		audioVolume = 1;
		unMute();
	}
	
	return {
		init:init,
		soundPlay:soundPlay,
		soundCreateAndPlay:soundCreateAndPlay,
		soundStop:soundStop,
		soundVolume:soundVolume,
		mute:mute,
		unMute:unMute,
		kill:kill,
		unKill:unKill,
		getVolume:getVolume
	};
	
}();

$(document).ready(function()
{
	Audio.init();
});

$(window).blur(function()
{
	Audio.kill();
});

$(window).focus(function()
{
	if (!$("body").hasClass("audio-killed"))
		Audio.unKill();
});