Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Узнать длину подгружаемого mp3-трека (http://www.flasher.ru/forum/showthread.php?t=94281)

EddieA 09.04.2007 14:29

Узнать длину подгружаемого mp3-трека
 
Доброго времени суток всем =)

Перерыл сейчас весь форум, вопроса конкретно на свой вопрос не нашел.

Итак - все просто. Mp3 плеер. Все работает, кроме того, что я хочу сделать нормально перемотку. Для этого нужно знать position и duration, насколько я понимаю. Но учитывая, что собственно трек подгружается, duration для меня параметр совсем не тот. На локалке ессно все ок, но вот чтоб реально работало...
Я конечно извратился и добавил getBytesTotal / getBytesLoaded - примерно попадает )))) Но это ж не то совсем, как бы криво очень выходит.
Куча сайтов с подобными плеерами есть - и там как-то все идеально...
Можно конечно php задействовать, но по-моему длину там вытащить не проще, пробовал (хотя может не то).

Сложновато выходит, а так хотелось в одну строчку)

В общем, посоветуйте, как красивее обойти сию проблему)

Kikasso 09.04.2007 15:33

position - сколько проиграло, duration - сколько скачалось или весь клип.
Перемотать можно только в пределах скачаного.
Или перематывать на стороне сервера, но чем?

EddieA 09.04.2007 20:09

position, duration - это ессно понятно.
но когда есть полоса прокрутки на 100% трека, загрузилось допустим 30% - как перемотать скажем на 15%, при этом видна вся полоса прокрутки (что очевидно) ... вот в чем вопрос.

собсно пример сразу - youtube.com. Только видео там, но это не важно - полоса прокрутки у меня аналогична.

etc 09.04.2007 20:20

Выдернуть duration из ID3 тега?

Kikasso 10.04.2007 00:35

Можно вычислить достаточно точно длительность трека, имея длину скачаного участка, его вес в байтах и общий вес. Общая длина - серая, скачаный участок - белый, а то что перемотка ошибется секунд на 5, поди докажи, никто и внимания не обратит.
ID3 тоже хорошо, но смотря чем файл сжат - может и соврать, а может и вообще отсутствовать.

iNils 10.04.2007 01:00

В mp3 информацию о длине трека в миллисекундах можно прочитать из тега TLEN (если она записана), но ID3 должна быть версии 2.0. Инфа 2.0 записывается в начале файла, в отличии от 1.0

etc 10.04.2007 03:04

Я думаю, об ID3 создатель должен позаботиться.

kpch 25.03.2010 15:29

Цитата:

Сообщение от Kikasso (Сообщение 630465)
Можно вычислить достаточно точно длительность трека, имея длину скачаного участка, его вес в байтах и общий вес. Общая длина - серая, скачаный участок - белый, а то что перемотка ошибется секунд на 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);
};

in4core 25.03.2010 17:13

Вот выдерка из моего класса. Посмотри внимательнее разберись что зачем. Там полностью организована прокрутка ( как со 100% так и до 100% , то что ты хотел).
Код AS1/AS2:

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 много лишнего тут. обращай внимание только на механику. все удалить лишнее просто нет времени щас. удачи


Часовой пояс GMT +4, время: 21:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.