所以这个让我难过。我的网站计划是从XML文件中提取音乐曲目,该文件充当菜单按钮加载的各种.swfs的背景音乐。即点击'Home',它会带你回到家里.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);
}
预先感谢您提供任何帮助!
答案 0 :(得分:0)
YourSongstarting(0,999); // how ever you call to play the song
以上将永远重复歌曲。我建议您流式传输音频文件,因为这样可以更快地加载歌曲,然后您可以将歌曲保存在内存中。您仍然可以使用xml或任何其他外部文本文件作为音轨位置或直接在flash / class文件中(如果此站点是混凝土。
您想要控制的任何事件只需比较100%的“缓冲”值。查看流媒体音频as3如果需要让我知道我可以给你一个例子,有大量的源代码教程。
答案 1 :(得分: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);
}