AS3 - XML-плейлист с зацикливанием по одной дорожке - PullRequest
0 голосов
/ 26 марта 2012

Так что этот меня озадачилМой план для моего веб-сайта состоит в том, чтобы музыкальные треки извлекались из XML-файла, который действует как фоновая музыка для различных .swfs, загружаемых кнопками меню.Т.е. нажмите «Домой», и он вернет вас домой .swf и воспроизведет соответствующую музыку.Я хочу сделать это с помощью XML, а не подключать музыку непосредственно к .swf, чтобы сократить время загрузки (синхронизация не является проблемой), так как я не могу сохранить качество звука без значительного увеличения .swf.

Я сталкиваюсь с двумя проблемами: одна из них заключается в том, что с текущим кодом музыка воспроизводится только один раз и не зацикливается.Другой заключается в том, что я хочу, чтобы функциональность воспроизводила одну песню в качестве вступления, а затем продолжала зацикливать другую.То есть, нажмите кнопку «Домой», вступление воспроизводится, за которым следует цикл, и вы никогда не вернетесь к вступлению, пока не нажмете «Домой» снова.Я не могу понять, как управлять любой из этих вещей, за исключением создания уникальной функции для каждой кнопки.

Вот код, который я использую:

var my_songs:XMLList;
var my_total:Number;

var my_sound:Sound;
var my_channel:SoundChannel;

var current_song:Number;

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("playlist.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
    var myXML:XML = new XML(e.target.data);

    my_songs = myXML.SONG;
    my_total = my_songs.length();

    //playSong(0);

    myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
    myXMLLoader = null;

}

function playSong(mySong:Number):void {
    var myURL = my_songs[mySong].@URL;

    if (my_channel) {
        my_channel.stop();
        my_channel.removeEventListener(Event.SOUND_COMPLETE, playSong);
    }

    my_sound = new Sound();
    my_sound.load(new URLRequest(myURL));
    my_channel = my_sound.play();
    my_channel.addEventListener(Event.SOUND_COMPLETE, playSong);
}

test_btn.addEventListener(MouseEvent.CLICK, onPlay);
function onPlay(e:MouseEvent):void {
        playSong(0);
}

Спасибозаранее за любую помощь, которую вы можете оказать!

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Вы были близки

var my_songs:XMLList;
var my_total:Number;

var my_sound:Sound;
var my_channel:SoundChannel;

var current_song:Number;

var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("playlist.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
    var myXML:XML = new XML(e.target.data);

    my_songs = myXML.SONG;
    my_total = my_songs.length();

    playSong(0);

    myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
    myXMLLoader = null;

}

function playSong(e:Event):void {
    if( current_song > my_total )
       current_song = 0;

    var myURL = my_songs[current_song++].@URL;

    if (my_channel) {
        my_channel.stop();
        my_channel.removeEventListener(Event.SOUND_COMPLETE, playSong);
    }

    my_sound = new Sound();
    my_sound.load(new URLRequest(myURL));
    my_channel = my_sound.play();
    my_channel.addEventListener(Event.SOUND_COMPLETE, playSong);
}

test_btn.addEventListener(MouseEvent.CLICK, onPlay);
function onPlay(e:MouseEvent):void {
        playSong(e);
}
0 голосов
/ 26 марта 2012
   YourSongstarting(0,999); // how ever you call to play the song

Это выше будет повторять песню навсегда.Я предлагаю вам потоковую передачу аудио файла, так как это загрузит песню быстрее, затем вы можете сохранить песни в памяти. Вы по-прежнему можете использовать xml или любой другой внешний текстовый файл для расположения звуковых дорожек или непосредственно в файлах flash / class, если этот сайтконкретные.

любые события, которыми вы хотели бы управлять, просто сравните значение "Buffer" из 100%. Скачайте потоковое аудио as3, если есть необходимость, есть множество учебных пособий с исходным кодом, дайте мне знать, что я могу дать вампример.

...