Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проигрывание мелодий по списку (http://www.flasher.ru/forum/showthread.php?t=121318)

Jex 12.02.2009 19:43

Проигрывание мелодий по списку
 
Привет!
В добавок к визуализатору захотелось, чтобы мелодии из списка автоматически проигрывались по очереди. Самостоятельно я смог сделать лишь, чтобы мелодия менялась по нажатию кнопки, но вот автоматизировать не получилось. Помогите, а то два дня уже бьюсь.



Код AS3:

var song:Array = new Array;
song[0] = "song0.mp3";
song[1] = "song1.mp3";
song[2] = "song2.mp3";
 
var newChannel:Array = new Array (song.length);
var num:int = 0;
var snd:Sound = new Sound(new URLRequest(song[num]));
var channel:SoundChannel = new SoundChannel();
 
channel = snd.play();
next_button.addEventListener(MouseEvent.CLICK, next);
function next(e:MouseEvent):void
{       
        num = num += 1;
        if (num == song.length) {num = 0;}
        var snd:Sound = new Sound(new URLRequest(song[num]));
        channel.stop();
        newChannel[num] = snd.play();
        channel = newChannel[num];       
        trace (num);       
}

Я понимаю, что тут нужен обработчик SOUND_COMPLETE,
но приложить его я додумался только до копии функции next.
При этом срабатывает, но только один раз. Чтобы срабатывало постоянно, обработчик нужно засовывать в каждую такую копию. А тут получается матрёшка какая то -)

DarkLight 12.02.2009 19:56

собственно, в функции next подписать функцию next на SOUND_COMPLETE для нового звука.

P. S. Точность SOUND_COMPLETE, кстати, по не зависящим от разработчиков плеера причинам, сильно хромает, доходя до 300-500 мс ошибки

Jex 13.02.2009 02:03

Дык, я ж именно так и делал. Пестня меняется только один раз. Чтобы включилась следующая, во вложенную функцию next с SOUND_COMPLETE нужно вкладывать еще одну функцию next с SOUND_COMPLETE. И так проделать столько раз, сколько мелодий в списке...
Или я неправильно вас понял?



Добавлено через 25 часов 47 минут
Ура. Разобрался таки.

Код AS3:

import flash.display.Graphics;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
 
 
var song:Array = new Array();
song[0] = "song0.mp3";
song[1] = "song1.mp3";
song[2] = "song2.mp3";
song[3] = "song3.mp3";
 
var newChannel:Array = new Array (song.length);
var num:int = 0;
var snd:Sound = new Sound(new URLRequest(song[num]));
var channel:SoundChannel = new SoundChannel();
 
channel = snd.play();
newChannel[num] = channel;
 
channel.addEventListener(Event.SOUND_COMPLETE, nextSong);
function nextSong(event:Event):void
{       
        num = num += 1;
        if (num == song.length) {num = 0;}
        var snd:Sound = new Sound(new URLRequest(song[num]));
        newChannel[num] = snd.play();
        newChannel[num].addEventListener(Event.SOUND_COMPLETE, nextSong2);
        function nextSong2(event:Event):void
        {               
 
                return nextSong(event);
        }
 
}



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

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