Просмотр полной версии : Узнать длину подгружаемого mp3-трека
Доброго времени суток всем =)
Перерыл сейчас весь форум, вопроса конкретно на свой вопрос не нашел.
Итак - все просто. Mp3 плеер. Все работает, кроме того, что я хочу сделать нормально перемотку. Для этого нужно знать position и duration, насколько я понимаю. Но учитывая, что собственно трек подгружается, duration для меня параметр совсем не тот. На локалке ессно все ок, но вот чтоб реально работало...
Я конечно извратился и добавил getBytesTotal / getBytesLoaded - примерно попадает )))) Но это ж не то совсем, как бы криво очень выходит.
Куча сайтов с подобными плеерами есть - и там как-то все идеально...
Можно конечно php задействовать, но по-моему длину там вытащить не проще, пробовал (хотя может не то).
Сложновато выходит, а так хотелось в одну строчку)
В общем, посоветуйте, как красивее обойти сию проблему)
position - сколько проиграло, duration - сколько скачалось или весь клип.
Перемотать можно только в пределах скачаного.
Или перематывать на стороне сервера, но чем?
position, duration - это ессно понятно.
но когда есть полоса прокрутки на 100% трека, загрузилось допустим 30% - как перемотать скажем на 15%, при этом видна вся полоса прокрутки (что очевидно) ... вот в чем вопрос.
собсно пример сразу - youtube.com. Только видео там, но это не важно - полоса прокрутки у меня аналогична.
Выдернуть duration из ID3 тега?
Можно вычислить достаточно точно длительность трека, имея длину скачаного участка, его вес в байтах и общий вес. Общая длина - серая, скачаный участок - белый, а то что перемотка ошибется секунд на 5, поди докажи, никто и внимания не обратит.
ID3 тоже хорошо, но смотря чем файл сжат - может и соврать, а может и вообще отсутствовать.
В mp3 информацию о длине трека в миллисекундах можно прочитать из тега TLEN (если она записана), но ID3 должна быть версии 2.0. Инфа 2.0 записывается в начале файла, в отличии от 1.0
Я думаю, об ID3 создатель должен позаботиться.
Можно вычислить достаточно точно длительность трека, имея длину скачаного участка, его вес в байтах и общий вес. Общая длина - серая, скачаный участок - белый, а то что перемотка ошибется секунд на 5, поди докажи, никто и внимания не обратит.
можете дать формулу вычесления?
Добавлено через 51 минуту
preloader.onEnterFrame = function() {
//этот Бар связан с буферизацией
this.bloaded._xscale = Math.round(mp3_sound.getBytesLoaded()/mp3_sound.getBytesTotal()*100);
//вычесление длины трека ВОТ ЭТО ТО ЧТО ТЫ ИЩЕШь нааверн :P !!!!!!
var loaded = mp3_sound.getBytesLoaded();
var duration = mp3_sound.duration;
kbps = ((loaded)/(duration));
var total = mp3_sound.getBytesTotal();
timeTotal = (total/kbps);
//ну а тут отображаем текущую позицию
this.curentPosition._xscale = Math.round(mp3_sound.position/timeTotal*100);
};
Вот выдерка из моего класса. Посмотри внимательнее разберись что зачем. Там полностью организована прокрутка ( как со 100% так и до 100% , то что ты хотел).
function setMusicActive(c, f) {
sound = new Sound(c);
sound.setVolume(100);
sound.onSoundComplete = mx.utils.Delegate.create(this, Complete_control);
sound.loadSound(soundArray[f],true);
sound.onLoad = mx.utils.Delegate.create(this, Complete_control);
sound.start();
CLP[0]._parent.o.drag.enabled = false; // клип драггера ползунка
CLP[0]._parent.stop_btn.onRelease = mx.utils.Delegate.create(this, Stop_control); // кнопка остановки трека
CLP[0]._parent.play_btn.onRelease = mx.utils.Delegate.create(this, Play_control); // кнопка проигрывания
CLP[0]._parent.pause_btn.onRelease = mx.utils.Delegate.create(this, Pause_control); // кнопка паузы
CLP[0]._parent.v.drag.onPress = mx.utils.Delegate.create(this, DRAGGER); // далее идут события для драгов
CLP[0]._parent.o.drag.onPress = mx.utils.Delegate.create(this, DRAG2);
CLP[0]._parent.o.drag.onRelease = mx.utils.Delegate.create(this, SDRAGGER2);
CLP[0]._parent.o.drag.onReleaseOutside = mx.utils.Delegate.create(this, SDRAGGER2);
CLP[0]._parent.v.drag.onRelease = mx.utils.Delegate.create(this, SDRAGGER);
CLP[0]._parent.v.drag.onReleaseOutside = mx.utils.Delegate.create(this, SDRAGGER);
clearInterval(_int2);
clearInterval(SU);
SU = setInterval(this, "checkProgress", 200);
update();
}
function Play_control() {
if (paused) {
sound.start(currentPosition);
paused = false;
}
}
function Stop_control() {
sound.stop();
currentPosition = 0;
paused = true;
}
function Pause_control() {
if (!paused) {
currentPosition = sound.position/1000;
sound.stop();
paused = true;
} else {
if (currentPosition>0) {
sound.start(currentPosition);
paused = false;
}
}
}
function Complete_control(success) {
clearInterval(inn);
if (success) {
inn = setInterval(this, "UP", 20);
CLP[0]._parent.o.drag.enabled = true;
}
}
function DRAGGER() {
clearInterval(_int2);
CLP[0]._parent.v.drag.startDrag(false,-50,0,50,0);
_int2 = setInterval(this, "update", 1);
}
function SDRAGGER() {
CLP[0]._parent.v.drag.stopDrag();
clearInterval(_int2);
}
function update() {
var vol = CLP[0]._parent.v.drag._x+50;
sound.setVolume(vol);
}
function DRAG2() {
clearInterval(inn);
clearInterval(_int2);
CLP[0]._parent.o.drag.startDrag(false,0,0,100,0);
_int2 = setInterval(this, "update2", 200);
}
function update2() {
sound.start((Math.floor(sound.duration/1000)*CLP[0]._parent.o.drag._x)/100);
clearInterval(_int2);
}
function SDRAGGER2() {
CLP[0]._parent.o.drag.stopDrag();
inn = setInterval(this, "UP", 20);
}
function UP() {
CLP[0]._parent.o.drag._x = Math.floor(sound.position/sound.duration*100);
}
function checkProgress() {
var Loaded = Math.round(sound.getBytesLoaded());
var Total = Math.round(sound.getBytesTotal());
var pct = Math.floor((Loaded/Total)*100);
if (Loaded/Total != 1) {
LIST_ITEM._parent["LIST_ITEM"+CI].progress._visible = true;
LIST_ITEM._parent["LIST_ITEM"+CI].progress.gotoAndStop(pct);
} else {
clearInterval(SU);
LIST_ITEM._parent["LIST_ITEM"+CI].progress._visible = false;
}
}
function UnFocusCicled() {
for (var a = 0; a<ar.length; a++) {
LIST_ITEM._parent["LIST_ITEM"+a].progress.gotoAndStop(1);
}
}
function DELETE() {
delete sound;
}
П.с. 1 - обрати внимане на функции UP и update2 . Честно щас не помню какие именно функции для ползунка громкости , а какие для прокрутки. но думаю разберешься
П.с. 2 много лишнего тут. обращай внимание только на механику. все удалить лишнее просто нет времени щас. удачи
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.