/* Author: Andrew Greig, 2012 */
// Get album art
// http://stackoverflow.com/questions/11877392/using-shoutcast-display-now-playing-album-art
var app = app || {};
app.path = "assets/12 Everything Resolves.mp3";
// app.audio.play(); - This will play the music.
// app.audio.pause(); - This will stop the music.
// app.audio.duration; - Returns the length of the music track.
// app.audio.currentTime = 0; - This will rewind the audio to the beginning.
// app.audio.loop = true; - This will make the audio track loop.
// app.audio.muted = true; - This will mute the track
// Site Core
app.player = $(function() {
var button = {}, data = {},
init = function(){
createAudio();
bindings();
},
createAudio = function(){
app.audio = new Audio(app.path);
// elements
button.play = $('#action_play');
button.progress = $('.progress');
// Set data
var offset = button.progress.offset();
data.centerX = (offset.left) + (button.progress.width()/2);
data.centerY = (offset.top) + (button.progress.height()/2);
},
bindings = function(){
$(document).on('touchmove', function(e){
e.preventDefault();
});
// play / pause
button.play.on('click', function(e) {
var $this = $(this);
if ($this.is('.playing')) {
app.player.pause();
} else {
app.player.play();
}
e.preventDefault();
});
// seeker
button.progress.on('mousedown', function(e){
var x, y, r;
if (e.targetTouches) {
x = e.targetTouches[0].pageX;
y = e.targetTouches[0].pageY;
} else {
x = e.clientX;
y = e.clientY;
}
r = rotation(x,y);
updateProgress(r);
changeTime(r/360*100);
});
button.progress.on('touchmove', function(e) {
var x, y, r;
x = e.targetTouches[0].pageX;
y = e.targetTouches[0].pageY;
r = rotation(x,y);
updateProgress(r);
changeTime(r/360*100);
}, false);
// update bar onchange
app.audio.addEventListener('timeupdate',function (){
var curtime = app.audio.currentTime,
percent = (curtime/app.audio.duration)*100,
rounded = Math.round(percent*1000)/1000,
deg = 360/100*percent;
updateProgress(deg);
});
// when the audio has finished playing
app.audio.addEventListener('ended', function(){
app.player.pause();
//app.audio.currentTime = 0;
});
},
// play action
play = function(){
app.audio.play();
button.play.addClass('playing');
button.play.text('Pause');
},
// pause action
pause = function(){
app.audio.pause();
button.play.removeClass('playing');
button.play.text('Play');
},
// change seeked time
changeTime = function(percent){
var t = (app.audio.duration*percent)/100;
app.audio.currentTime = t;
}
updateProgress = function(deg){
var $slice = $('.slice');
if (deg > 180 && !$slice.is('.gt50')) {
$slice.addClass('gt50');
$slice.append('<div class="pie fill"></div>');
} else if (deg < 180 && $slice.is('.gt50')) {
$slice.removeClass('gt50');
$slice.find('.fill').remove();
}
$slice.find('.pie').css({
'-moz-transform':'rotate('+deg+'deg)',
'-webkit-transform':'rotate('+deg+'deg)',
'-o-transform':'rotate('+deg+'deg)',
'transform':'rotate('+deg+'deg)'
});
},
rotation = function(x,y){
var radians = Math.atan2(x - data.centerX, y - data.centerY);
var degree = Math.round( (radians * (180 / Math.PI) * -1) + 180 );
return degree;
//return (degree <= max ? degree : max);
}
return {
run: init,
play: play,
pause: pause
};
});
app.player.run();