AS3 - XML-плейлист с зацикливанием по одной дорожке

Так что это меня поставило в тупик. Мой план для моего сайта состоит в том, чтобы музыкальные треки извлекались из файла 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 ответа

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

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);
}
   YourSongstarting(0,999); // how ever you call to play the song

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

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

Другие вопросы по тегам