0

所以这个让我难住了。我的网站计划是从 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);
}

提前感谢您提供的任何帮助!

4

2 回答 2

0

你很亲近

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);
}
于 2012-03-26T23:05:51.907 回答
0
   YourSongstarting(0,999); // how ever you call to play the song

以上将永远重复歌曲。我建议您流式传输音频文件,因为这会更快地加载歌曲,然后您可以将歌曲保存在内存中。您仍然可以使用 xml 或任何其他外部文本文件作为音轨位置,或者如果此站点是直接在 flash/class 文件中具体的。

您想控制的任何事件只需将“缓冲区”值与 100% 进行比较。查找流式音频 as3 如果需要,有很多带有源代码的教程,请告诉我,我可以举个例子。

于 2012-03-26T17:18:52.413 回答