Faster sniffing
- Sniffing now goes through the old extension-based filter before doing it the bitsniffing way. - Refractored get_media_type_and_manager(filename). - Removed ogg extension from video accepted extensions, audio will take care of that. - Added custom audio player, still WIP,but working. - Added test for sniffing. This only tests for the mediagoblin.media_types.image type, as that is the only one enabled from start.
This commit is contained in:
140
mediagoblin/static/js/audio.js
Normal file
140
mediagoblin/static/js/audio.js
Normal file
@@ -0,0 +1,140 @@
|
||||
/**
|
||||
* GNU MediaGoblin -- federated, autonomous media hosting
|
||||
* Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
var audioPlayer = new Object();
|
||||
|
||||
(function (audioPlayer) {
|
||||
audioPlayer.init = function (audioElement) {
|
||||
audioPlayer.audioElement = audioElement;
|
||||
console.log(audioElement);
|
||||
attachEvents();
|
||||
$(audioElement).hide();
|
||||
};
|
||||
|
||||
function attachEvents () {
|
||||
audioPlayer.audioElement.addEventListener('durationchange', audioPlayer.durationChange, true);
|
||||
audioPlayer.audioElement.addEventListener('timeupdate', audioPlayer.timeUpdate, true);
|
||||
audioPlayer.audioElement.addEventListener('progress', audioPlayer.onProgress, true);
|
||||
$(document).ready( function () {
|
||||
$('.audio-spectrogram').delegate('.seekbar', 'click', audioPlayer.onSeek);
|
||||
$('.audio-spectrogram').delegate('.audio-control-play-pause', 'click', audioPlayer.playPause);
|
||||
});
|
||||
}
|
||||
|
||||
audioPlayer.onProgress = function(a, b, c) {
|
||||
console.log(a, b, c);
|
||||
buffered = audioPlayer.audioElement.buffered;
|
||||
|
||||
ranges = new Array();
|
||||
|
||||
for (i = 0; i < buffered.length; i++) {
|
||||
ranges[i] = new Array();
|
||||
ranges[i][0] = buffered.start(i);
|
||||
ranges[i][1] = buffered.end(i);
|
||||
}
|
||||
console.log('ranges', ranges);
|
||||
$('.audio-spectrogram .buffered').width(
|
||||
(ranges[0][1] / audioPlayer.audioElement.duration) * audioPlayer.imageElement.width());
|
||||
};
|
||||
|
||||
audioPlayer.onSeek = function (e) {
|
||||
console.log('onSeek', e);
|
||||
im = audioPlayer.imageElement;
|
||||
pos = e.offsetX / im.width();
|
||||
audioPlayer.audioElement.currentTime = pos * audioPlayer.audioElement.duration;
|
||||
audioPlayer.audioElement.play();
|
||||
audioPlayer.setState(audioPlayer.PLAYING);
|
||||
};
|
||||
|
||||
audioPlayer.playPause = function (e) {
|
||||
console.log('playPause', e);
|
||||
if (audioPlayer.audioElement.paused) {
|
||||
audioPlayer.audioElement.play();
|
||||
audioPlayer.setState(audioPlayer.PLAYING);
|
||||
} else {
|
||||
audioPlayer.audioElement.pause();
|
||||
audioPlayer.setState(audioPlayer.PAUSED);
|
||||
}
|
||||
};
|
||||
|
||||
audioPlayer.NULL = null;
|
||||
audioPlayer.PLAYING = 2;
|
||||
audioPlayer.PAUSED = 4;
|
||||
|
||||
audioPlayer.state = audioPlayer.NULL;
|
||||
|
||||
audioPlayer.setState = function (state) {
|
||||
if (state == audioPlayer.state) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (state) {
|
||||
case audioPlayer.PLAYING:
|
||||
$('.audio-spectrogram .audio-control-play-pause')
|
||||
.removeClass('paused').addClass('playing')
|
||||
.text('■');
|
||||
break;
|
||||
case audioPlayer.PAUSED:
|
||||
$('.audio-spectrogram .audio-control-play-pause')
|
||||
.removeClass('playing').addClass('paused')
|
||||
.text('▶');
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
audioPlayer.durationChange = function () {
|
||||
duration = audioPlayer.audioElement.duration;
|
||||
};
|
||||
|
||||
audioPlayer.timeUpdate = function () {
|
||||
currentTime = audioPlayer.audioElement.currentTime;
|
||||
playhead = audioPlayer.imageElement.parent().find('.playhead');
|
||||
playhead.css('width', (currentTime / audioPlayer.audioElement.duration) * audioPlayer.imageElement.width());
|
||||
time = formatTime(currentTime);
|
||||
duration = formatTime(audioPlayer.audioElement.duration);
|
||||
audioPlayer.imageElement.parent().find('.audio-currentTime').text(time + '/' + duration);
|
||||
};
|
||||
|
||||
function formatTime(seconds) {
|
||||
var h = Math.floor(seconds / (60 * 60));
|
||||
var m = Math.floor((seconds - h * 60 * 60) / 60);
|
||||
var s = Math.round(seconds - h * 60 * 60 - m * 60);
|
||||
return '' + (h ? (h < 10 ? '0' + h : h) + ':' : '') + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s);
|
||||
}
|
||||
|
||||
audioPlayer.attachToImage = function (imageElement) {
|
||||
/**
|
||||
* Attach the player to an image element
|
||||
*/
|
||||
console.log(imageElement);
|
||||
im = $(imageElement);
|
||||
audioPlayer.imageElement = im;
|
||||
$('<div class="playhead"></div>').appendTo(im.parent());
|
||||
$('<div class="buffered"></div>').appendTo(im.parent());
|
||||
$('<div class="seekbar"></div>').appendTo(im.parent());
|
||||
$('<div class="audio-control-play-pause paused">▶</div>').appendTo(im.parent());
|
||||
$('<div class="audio-currentTime">00:00</div>').appendTo(im.parent());
|
||||
};
|
||||
})(audioPlayer);
|
||||
|
||||
$(document).ready(function () {
|
||||
audioElements = $('.audio-media .audio-player');
|
||||
audioPlayer.init(audioElements[0]);
|
||||
audioPlayer.attachToImage($('.audio-spectrogram img')[0]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user