View file xmyx.ru/files/radio/audio_player.js

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 + '%');
	}
};