Форум 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)
-   -   Seek Bar для mp3-плеера созданный вручную косячит (http://www.flasher.ru/forum/showthread.php?t=118029)

alexeyco 13.11.2008 00:15

Seek Bar для mp3-плеера созданный вручную косячит
 
Здравствуйте!

У меня маленький вопрос. Я лепил mp3-плеер на локалке. Все замечательно работает но на локалке. Как только дело дошло до испытаний в интернете, случилось следующее:

1. ID3-теги читаются только после того, как звук полностью будет загружен.

2. Самодельный seek bar скачет, т.к. my_sound.duration во время загрузки меняется.

Как бороться с первой проблемой - я ума не приложу. Вторая проблема кажется мне разрешимой: ведь еще до завершения загрузки можно получить общее кол-во данных... и кол-во загруженных.

Получается, в случае когда звук еще не загружен (байтс лоадед != байтс тотал) мы можем динамически вычислить длину трека. То есть.. ну конечно если кол-во байтов целиком и полностью зависит от длины трека (в чем я кстати сомневаюсь), мы можем прикинуть сколько в загруженной длительности трека байтов и спроецировать это на общее кол-во байтов. И хоть как-то отрисовать сикбар...

Господа, посоветуйте, пожалуйста, что делать...

etc 13.11.2008 00:31

1. Значит они записаны в конце файла;

2. Конечно изменяется, это время проигрывания загруженной части.

alexeyco 13.11.2008 00:36

Ну хорошо... я просто не разбираюсь в спецификации мп3... нельзя разобрать id3-теги до полной загрузки - черт с ними, уберем их совсем.

Парит seek bar. Как определить суммарную длину трека (время) до (в процессе) загрузки? Или посоветуйте как выйти из положения?

scarbo 13.11.2008 00:38

Код AS1/AS2:

var KonSound:Sound = new Sound()
var L = KonSound.getBytesLoaded();
var T = KonSound.getBytesTotal();
var ST = KonSound.duration*T/L/1000;

Выдаст в секундах

etc 13.11.2008 00:47

alexeyco, надо сделать так, чтобы ID3-теги шли в начале файла (а это, кажется, теги первой версии). Тогда при получении тегов можно получить и время трека (тег TIME или как-то так).

scarbo, никаких секунд не будет, будет некая цифра, которая от реальных секунд такая же далекая, как Москва от Токио.

alexeyco 13.11.2008 01:15

Ну а как (какой программой ли) сделать чтобы теги шли в начале?

scarbo 13.11.2008 01:47

ну не так уж и на много,на 2-4 сек,Понятно дело,что время трека можно и через xml и ID3-теги передавать.

alexeyco 13.11.2008 02:26

Я пока вот что придумал:
Код AS1/AS2:

function getDuration (my_sound:Sound) {
 
        var total = my_sound.getBytesTotal();
        var loaded = my_sound.getBytesLoaded();
 
        if (loaded == total) {
 
                _root.isLoaded = true;
                return my_sound.duration;
 
        } else if (my_sound.id3.TIME != undefined) {
 
                return my_sound.id3.TIME;
 
        } else {
 
                return my_sound.duration * (total / loaded);
 
        }
 
} // getDuration();

Это может и не с хирургической точностью отражает картину, но спасает сильно - не так дрыгается бегунок... когда _root.isLoaded == true - кадр перестает запаривать эту функцию и просто пользуется своей переменной _root.trackDuration...

Возникает другой вопрос - я пользовался AIMP'ом - так вот после очистки ID3 и его восстановлении ничего хорошего не произошло - то есть, переменная my_sound.id3.TIME не перестала быть undefined... помогите пожалуйста разобраться

etc 13.11.2008 12:41

Цитата:

Сообщение от scarbo (Сообщение 776627)
ну не так уж и на много,на 2-4 сек,

Битрейты разные бывают, более того — переменные.


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

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