[RESOLVED] Random loading song? AS2/XML
I originally built this in Flash 8, then moved the files over to CS4
Hi, I have a list component where I've loaded song files through xml and everything is working great.
I have now been trying to figure out how to make it play one of the 8 files randomly when it starts playing, instead of it always starting with a specified track (currently track one obviously). So each time a visitor comes to the site it is a different song.
I found a few things on math for AS3 but nothing has worked for this AS2 code that I have tried so far. What am I missing?
PHP Code:
this._lockroot = true;
//make textfields autosize
album_txt.autoSize = "left";
artist_txt.autoSize = "left";
title_txt.autoSize = "left";
//create sound object
var songInterval:Number;
var amountLoaded:Number;
var mySound:Sound;
var nextTrack:Number;
//this will contain all the track details from the xml file
var tracks_array:Array = new Array();
var totalTracks:Number;
//create the XML object and populate with track details
var jukebox_xml:XML = new XML();
jukebox_xml.ignoreWhite = true;
var RootNode:XMLNode;
jukebox_xml.onLoad = function(success:Boolean) {
if (success) {
RootNode = this.firstChild;
totalTracks = RootNode.childNodes.length;
populateTracksArray();
} else {
trace("error loading xml file");
}
};
jukebox_xml.load("tracks.xml");
function populateTracksArray():Void{
for(var i:Number=0; i < totalTracks;i++){
tracks_array[i] = RootNode.childNodes[i];
tracks_array[i].source = RootNode.childNodes[i].attributes.source;
tracks_array[i].artist = RootNode.childNodes[i].attributes.artist;
tracks_array[i].album = RootNode.childNodes[i].attributes.album;
tracks_array[i].title = RootNode.childNodes[i].attributes.title;
}
//play first track
playTrack(tracks_array[0].source,tracks_array[0].artist,tracks_array[0].album,tracks_array[0].title,true);
//populate list component with song titles
populateList();
}
function playTrack(source, artist, album, title, stream):Void{
artist_txt.text = artist;
album_txt.text = album;
title_txt.text = title;
mySound = new Sound();
mySound.onSoundComplete = function():Void{
//----LETS NEXT SONG PLAY---------
if(continous_comp.selected){
if(list_comp.selectedIndex < (totalTracks -1)){
list_comp.selectedIndex +=1;
}else{
list_comp.selectedIndex = 0;
}
playTrack(tracks_array[list_comp.selectedIndex].source,tracks_array[list_comp.selectedIndex].artist,tracks_array[list_comp.selectedIndex].album,tracks_array[list_comp.selectedIndex].title, true);
}
}
mySound.loadSound(source,stream);
clearInterval(songInterval);
songInterval = setInterval(songProgress,100);
}
function populateList():Void{
for(var i:Number=0; i<totalTracks;i++){
list_comp.addItem(tracks_array[i].title,tracks_array[i].source);
}
_root.list_comp.selectedIndex = 0;
}
//--------create a listener for the list component------------
var compListener:Object = new Object();
list_comp.addEventListener("change", compListener);
compListener.change = function(info:Object):Void{
playTrack(info.target.value,tracks_array[list_comp.selectedIndex].artist,tracks_array[list_comp.selectedIndex].album,tracks_array[list_comp.selectedIndex].title, true);
}
Some success! gparis you my friend are a wizard!
Thanks so much, I really appreciate you taking your time to help me with this and walk me through it. Really really cool.
So I couldn't get the files to start playing without hard coding the song number - set up like this:
PHP Code:
var n:Number = randRange(0, 8);
function randRange(min:Number, max:Number) :Number{
var randomNum:Number = Math.floor(Math.random() * (max - min + 0)) + min;
return randomNum;
}
And then like you said, changing the 0 starting song out with n
So that entire piece is like this now:
PHP Code:
var n:Number = randRange(0, 8);
function randRange(min:Number, max:Number) :Number{
var randomNum:Number = Math.floor(Math.random() * (max - min + 0)) + min;
return randomNum;
}
function populateTracksArray():Void{
for(var i:Number=0; i < totalTracks;i++){
tracks_array[i] = RootNode.childNodes[i];
tracks_array[i].source = RootNode.childNodes[i].attributes.source;
tracks_array[i].artist = RootNode.childNodes[i].attributes.artist;
tracks_array[i].album = RootNode.childNodes[i].attributes.album;
tracks_array[i].title = RootNode.childNodes[i].attributes.title;
}
//play first random track
playTrack(tracks_array[n].source,tracks_array[i].artist,tracks_array[i].album,tracks_array[i].title,true);
So as I refresh the file the actual song does change and is different but the list component doesn't go to (highlight) the correct song that is playing. It just goes to the first box.
I tried many combinations to see if I could get it to work and ended up with a lot of undefined areas in most cases.
Any insight?
is there a way to mark this closed?
Is there a way to mark this thread closed or anything?