File size: 5.12Kb
function AudioPlayer(ClickManager)
{
this.clickManager = new ClickManager;
this.phone = navigator.userAgent.match(/(iPad|iPhone|iPod|Android)/i);
this.clickManager.on("audioPlayPause", this.audioPlayPause.bind(this));
this.clickManager.on("audioSetPosition", this.audioSetPosition.bind(this));
this.clickManager.on("audioSetVolume", this.audioSetVolume.bind(this));
this.audioAction = {
playing_id: null,
state: 'stop',
last_file: null
};
this.node = null;
this.audioId = null;
this.audioVolume = 80;
this.audioFile = null;
this.whilePlaying = false;
this.sliderBar = null;
this.radioUse = $('div.radio_container').length === 1 ? true : false;
}
// Play the audio
AudioPlayer.prototype.audioPlayPause = function (node) {
var self = this;
self.node = node;
self.audioId = self.node.attr('id');
self.audioFile = self.node.find('input').val();
self.sliderBar = self.node.find('td.aic_progress_wrap div.aic_back_line');
var audioProgressLine = self.node.find('td.aic_progress_wrap div.aic_progress_line');
var audioLoadLine = self.node.find('td.aic_progress_wrap div.aic_load_line');
var ai_dur = self.node.find('div.ai_dur');
if(self.phone !== null)
{
self.audioVolume = 100;
$('td.aic_volume_wrap').hide();
}
if(self.audioAction.playing_id !== null && self.audioAction.playing_id != self.audioId)
self.audioStop();
if(self.audioAction.state == 'play' && self.audioAction.playing_id == self.audioId)
{
soundManager.pause(self.audioId);
self.node.removeClass('ai_playing');
self.audioAction.state = 'pause';
return;
}
if(self.audioAction.state == 'pause' && self.audioAction.playing_id == self.audioId)
{
soundManager.resume(self.audioId);
self.node.addClass('ai_playing');
self.audioAction.state = 'play';
return;
}
self.node.addClass('ai_playing ai_current');
self.audioAction.state = 'play';
self.audioAction.playing_id = self.audioId;
self.audioAction.last_file = self.audioFile;
soundManager.createSound({
id: self.audioId,
url: self.audioFile,
whileplaying: function () {
audioProgressLine.css('width', ((this.position / this.duration) * 100) + '%');
if(self.whilePlaying === false)
{
self.sliderBar.removeClass('slider_loading_bar');
self.whilePlaying = true;
}
var a = (parseInt(this.position) / 1E3);
a & ( a = a.toFixed());
ai_dur.text(self.timeFormat(a));
},
whileloading:function() {
audioLoadLine.css('width', ((this.bytesLoaded / this.bytesTotal * 100).toFixed(0)) + "%");
},
volume: self.audioVolume
});
soundManager.play(self.audioId, {
onfinish: function () {
self.audioStop();
var node = self.node.next();
if(node.length > 0)
self.audioPlayPause(node);
else
self.audioPlayPause($('div.audioPlay').filter(':first'));
}
});
};
AudioPlayer.prototype.timeFormat = function(a)
{
a = Math.round(a);
var b = Math.floor(a / 3600), c = a % 3600;
a = Math.floor(c / 60);
c = Math.ceil(c % 60);
0 != b && (b += ":");
return b + (0 != b && 10 > a ? "0" + a : a) + ":" + (10 > c ? "0" + c : c);
};
AudioPlayer.prototype.audioStop = function()
{
soundManager.stop(this.audioAction.playing_id);
if(this.radioUse === false)
$.post("/audio/deleteFile/", {deleteFile: this.audioAction.last_file});
var node = $('#' + this.audioAction.playing_id);
node.removeClass('ai_playing ai_current');
node.find('td.aic_progress_wrap div.aic_back_line').addClass('slider_loading_bar');
node.find('td.aic_progress_wrap div.aic_load_line').css('width', '0%');
node.find('td.aic_progress_wrap div.aic_progress_line').css('width', '0%');
this.whilePlaying = false;
this.audioAction.state = 'stop';
};
AudioPlayer.prototype.audioSetPosition = function(event)
{
var node = $(event.currentTarget);
var sound_obj = soundManager.getSoundById(this.audioId);
var pos = Math.min(Math.max((event.pageX - node.offset().left) / node.width() * 100, 0), sound_obj.duration);
if(!isNaN(pos) && sound_obj)
sound_obj.setPosition(Math.round(pos*sound_obj.duration/100));
//console.log(Math.round(Math.min(Math.max((event.pageX - node.offset().left) / node.width() * 161707328, 0), 161707328)));
};
AudioPlayer.prototype.audioSetVolume = function(event)
{
if(this.phone !== null)
return true;
var node = $(event.currentTarget);
var sound_obj = soundManager.getSoundById(this.audioId);
var pos = Math.min(Math.max((event.pageX - node.offset().left) / node.width() * 100, 0), 100);
if(!isNaN(pos) && sound_obj)
{
sound_obj.setVolume(pos);
this.audioVolume = pos;
$('td.aic_volume_wrap div.aic_progress_line').css('width', pos + '%');
}
};