Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
#1

Полоса процесса проигрывания музыки

10.07.2013, 22:47. Просмотров 2115. Ответов 27
Метки нет (Все метки)

Доброго здравия всем!

Пишу простой плеер.
Получает путь до файла через flashvars, создаёт канал как-то так
ActionScript 3
1
2
3
4
5
6
var channel:SoundChannel;
var soundFactory:Sound;
var trans:SoundTransform;
trans = new SoundTransform(1,0);
soundFactory = new Sound();
soundFactory.load(new URLRequest(songurl));
Далее полученный файл играем, останавливаем, меняем громкость, всё хорошо, всё написал, а вот, как придумать полосу показа прогресса проигрывания и текущее время проигрывания файла нигде не могу найти информацию. Буду благодарен за подсказку!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 22:47
Ответы с готовыми решениями:

Вывод времени проигрывания фильма
Обеспечьте возможность вывода времени проигрывания фильма

Загрузка html после проигрывания flash
Добрый день. Подскажите пожалуйста, как запустить (перейти) html страницу сразу...

Проигрывание следущего мувиклипа после проигрывания предыдущего
Есть 2 сцены и в каждом имеется клип. Нужно, чтобы по завершении проигрывания...

Как сделать кнопку для проигрывания анимации?
как правильно прописать скрипт чтобы анимация сначала была застопорена, а при...

Блокировка кнопки проигрывания песни при ее воспроизведении
Доброго времени суток, для своих нужд потребовалось написать плеер для...

27
moomot
9 / 9 / 6
Регистрация: 12.07.2013
Сообщений: 57
12.07.2013, 17:07 #2
добрый день. Поделись, пожалуйста, как ты сделал звуковую полосу.
Длительность песни я делал через sound.duration
время проигрывания делал через
ActionScript 3
1
2
3
4
t = sound.getBytesTotal(); // получаем полный размер песни (в байтах)
    l = sound.getBytesLoaded(); // число загруженых байт
// в зависимости от размера части загруженого mp3 трека, меняем ширину mp3_load
    position.mp3_load._width = Math.round(l/t * position._width);
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
12.07.2013, 23:02  [ТС] #3
moomot, помогло очень твоё сообщение, только не понял вопроса. у тебя же всё сделано. или я не так понял вопрос?
0
moomot
9 / 9 / 6
Регистрация: 12.07.2013
Сообщений: 57
13.07.2013, 00:10 #4
ну мне нужна сама регулировка громкости. Как её реализовать - не знаю. Напиши, пожалуйста, как её.
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
13.07.2013, 02:14  [ТС] #5
moomot, Единственное, я не понял про duration. Он мне на него ругается спасу нет, в мануале написано, что нужно использовать
ActionScript 3
1
sound.lenth
но эта строка мне всё время выдаёт 0 пока бьюсь с этим. Если кто подскажет, буду благодарен.

Добавлено через 2 минуты
Цитата Сообщение от moomot Посмотреть сообщение
ну мне нужна сама регулировка громкости. Как её реализовать - не знаю. Напиши, пожалуйста, как её.
А. С этим без проблем.
Я создал клип и назвал его volume_Bar в нём создал ползунок volume_track ширина volume_Bar 50 пикселей. Дальше просто:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
volume_Bar.volume_track.addEventListener(MouseEvent.MOUSE_DOWN, startMascotDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, stopMascotDrag);
volume_Bar.volume_track.addEventListener(Event.ENTER_FRAME, dragMascot);
var clickOffset:Point = null;
function startMascotDrag(event:MouseEvent)
{
    clickOffset = new Point(event.localX,event.localY);
}
function stopMascotDrag(event:MouseEvent)
{
    clickOffset = null;
}
function dragMascot(event:Event)
{
    if (clickOffset != null)
    {
        volume_Bar.volume_track.x = mouseX - 300;
        if (volume_Bar.volume_track.x < 0)
        {
            volume_Bar.volume_track.x = 0;
        }
        if (volume_Bar.volume_track.x > 50)
        {
            volume_Bar.volume_track.x = 50;
        }
        trans.volume = (volume_Bar.volume_track.x*2)/100;
        channel.soundTransform = trans;
        ExternalInterface.call("setVolume", trans.volume);
    }
}
trans здесь это переменная типа SoundTransform, отвечающая в данном случае за громкость, так же можно регулировать и баланс.

ActionScript 3
1
volume_Bar.volume_track.x = mouseX - 300;
Здесь я отнимаю 300 пикселей, потому как volume_bar имеет координаты по иксу 300.
0
moomot
9 / 9 / 6
Регистрация: 12.07.2013
Сообщений: 57
13.07.2013, 02:23 #6
Спасибо конечно! А ты не сможешь сделать это actionscript 2.0?
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
13.07.2013, 02:48  [ТС] #7
moomot, а... вот в чём и подвох. Я в AS2 очень многого не помню уже, честно признаться, так что не смогу помочь...
Давно вообще за флеш не брался, решить начать с нуля именно AS3, и вот тут первые же грабли...


Товарищи, кто подскажет, почему Sound.lenth выдаёт 0 постоянно?
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
13.07.2013, 03:03 #8
Цитата Сообщение от NapalmRain Посмотреть сообщение
почему Sound.lenth выдаёт 0 постоянно?
Разве постоянно? Вроде после события должно выдавать более корректную информацию. Да и вообще, смотрим примеры.
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
13.07.2013, 03:24  [ТС] #9
TanaTiX, я поступил чрезвычайно просто, скопипастил код с хелпа, а именно
ActionScript 3
1
2
3
4
5
var estimatedLength:int =  
        Math.ceil(soundFactory.length / (soundFactory.bytesLoaded / soundFactory.bytesTotal)); 
    var playbackPercent:uint =  
        Math.round(100 * (channel.position / estimatedLength));
    d_time.text = String(playbackPercent);
и так же
ActionScript 3
1
d_time.text = String(estimatedLength);
и у меня в обоих случаях на экране дёргается ноль...

Добавлено через 17 минут
Ах, да. Это тело функции вызываемой при каждом новом кадре
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
13.07.2013, 03:32 #10
NapalmRain, а попробовать скопировать не часть, а весь код?
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
13.07.2013, 11:58  [ТС] #11
TanaTiX, так и сделано, разве что добавлены модификации считывание нескольких переменных из вне.

Добавлено через 27 минут
Попробовал определять длину по событию complete, нооно срабатывает вовсе не когда весь файл загружен, а когда он доиграл. так же как и sound_COMPLETE
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
13.07.2013, 12:43 #12
ActionScript 3
1
2
3
4
5
6
7
_snd = new Sound(new URLRequest("music.mp3"));
            _snd.addEventListener(Event.ACTIVATE, onActive);
            _snd.addEventListener(Event.OPEN, onOpen);
            _snd.addEventListener(SampleDataEvent.SAMPLE_DATA, onData);
            _snd.addEventListener(ProgressEvent.PROGRESS, onProgress);
            _snd.addEventListener(Event.COMPLETE, onComplete);
            _ch = _snd.play(0, int.MAX_VALUE);
и далее
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private function onActive(e:Event):void 
        {
            trace("on active");
        }
        
        private function onOpen(e:Event):void 
        {
            trace("on open");
        }
        
        private function onData(e:SampleDataEvent):void 
        {
            trace("on data");
        }
        
        private function onProgress(e:ProgressEvent):void 
        {
            trace("progress");
        }
        
        private function onComplete(e:Event):void 
        {
            trace("complete");
        }
        
        private function update(e:Event):void 
        {
            trace(_snd.length);
            if (_snd.length > 0) {
                removeEventListener(Event.ENTER_FRAME, update);
            }
        }
В трэйсе получаем
on active
on active
0
on open
progress
progress
progress
****
progress
complete
250305.306122449
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
19.07.2013, 01:44  [ТС] #13
TanaTiX, Полностью скопировал Ваш код в новый проект и получил следующее:
on active
on open
progress
progress
***
progress
progress
progress
progress
complete
Собственно, и всё...
Нет данных.
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
19.07.2013, 04:39 #14
NapalmRain, если при этом нет никаких ошибок и звук корректно воспроизводится, скорее всего не так скопировал.
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
19.07.2013, 08:46  [ТС] #15
TanaTiX, может быть это покажется слишком наглым с моей стороны, но не могли бы вы мне скинуть вар работающий проект?
Ну или, может, я скину свой и вы посмотрите, что же всё таки не так...
У меня просто кончились идеи...
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
19.07.2013, 16:57 #16
Вот пример. Только mp3-файл вставить нужно.
0
Вложения
Тип файла: rar test.rar (4.0 Кб, 14 просмотров)
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
20.07.2013, 14:30  [ТС] #17
TanaTiX, я ничего не понимаю. А может быть проблема в том, что я описываю свой код не в отдельном классе, а просто в кадре?
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
20.07.2013, 15:14 #18
NapalmRain, код нужно писать в классах. Про событие ENTER_FRAME не забыл (оставлено для наглядности, и, собственно там и выводится продолжительность звука; ее, продолжительность, как я уже писал выше, можно определить по событию COMPLETE)?
0
NapalmRain
41 / 41 / 6
Регистрация: 18.05.2010
Сообщений: 653
20.07.2013, 19:07  [ТС] #19
TanaTiX, Хорошо, спасибо, попробую вынести весь код в класс, только мне нужен совет.
Я подгружаю переменные в проект с помощью
ActionScript 3
1
 this.loaderInfo.parameters
А что мне писать вместо this внутри класса?
0
TanaTiX
Модератор
2794 / 1648 / 168
Регистрация: 19.02.2011
Сообщений: 5,989
Завершенные тесты: 1
20.07.2013, 19:46 #20
loaderInfo - свойство DisplayObject. Соответственно использовать можно, например, в документ-классе (обычно Main)
0
20.07.2013, 19:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 19:46

Подключение флеш-модуля для проигрывания видео/аудио.
Здравствуйте! Проблема: вставить на сайт видео-модуль, с помощью которого...

Полоса прокрутки для TextField-ов
Есть 5 текстовых объектов (TextField), каждая из них имеет размеры 400х200px....

Проигрыватель музыки во флэш
Привет всем! Ищу проигриватель музыки во флеш на мою страницу ! есть у когото...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru