Skip to content

Instantly share code, notes, and snippets.

@FutureMedia
Created November 3, 2014 16:59
Show Gist options
  • Save FutureMedia/7f9abfff8065c56f39b6 to your computer and use it in GitHub Desktop.
Save FutureMedia/7f9abfff8065c56f39b6 to your computer and use it in GitHub Desktop.
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();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment