Now for the preloader:

Inside of your main movie, create a new movieclip and place it on the frame that you want your sound to start loading,from your library.

Select the movieclip on the main timeline and right-click, choose actions, then copy and paste this script into the actions window:

onClipEvent(load){
        loadMovieNum("sound.swf",1)
}
onClipEvent(enterFrame){
        percentloaded=Math.floor(_level1.getBytesLoaded()/_level1.getBytesTotal()*100)
        percentdisplay=percentloaded + "%"
        if(percentloaded == 100 && !initialized){
                _level1.mysound()
                initialized=true
                _visible=false
        }
}

The above movieclip when loaded will now attempt to load the swf file named "sound.swf" into level one(_level1). The movieclip then loops everyframe(onclipEvent(enterFrame)) and checks to see if the sound movie has fully loaded, we do this by using two commands, the first is getBytesLoaded() which returns the number of bytes which have loaded for the specified movieclip and the second is getBytesTotal() which returns the total size of the specified movieclip. We then turn these values into a percentage and check to see if the percentage is equal to one hundered(100). If it is one hundred(100) then we call our function on the main timeline of level one (_level1 the level into which we loaded our movie) ashte movie is fully loaded. This function only wants to be called once when the movie is first found to be fully loaded so we use a simple boolean to determine whether we have already called the function, this is the code that says "!initialized" which basically means in english "if not initialized" then call the function, when the function is called we then set the value of initialized to be true therefore the function will not be called again from this movieclip:

initialized=true;

Now inside of this movieclip if you want to display the precentage of the movie loaded simply create a new textfield, right-click choose panels>text options and check the dynamic text box, now in the variablename field enter "percentdisplay".

If you dont want to display a petcentage then remove the line which says:

percentdisplay=percentloaded + "%";

You can obviously display the number of bytes loaded etc.. by adding the correct code inside of the onClipEvent(enterFrame) parantheses.

Also inside of this movieclip you should create your loading sound animation which will play only while the sound.swf file is loading, this is easily accomplished by setting the visiblity of the movieclip to zero when the sound.swf file has loaded:

_visible=false;

So there it is the sound will now preload as and when you want it to and then play!

Some people have told me that sound doesnt play on any other level than the main movie(_level0), actually it does, the sound object (new Sound()) has an optional paramter in which you can specify a timeline, the timeline can be a movieclip, a level or _root:

mysoundobj=new Sound(_root);

if you choose to omit this parameter then the sound object is automatically created at the root of your movie(_root) but also the root of your movie on level zero(_level0) therefore i have used the "this" operator in my script above which tells the sound object to create itself on the timeline from which the script is run.

I hope this was of some use to somebody, if not then nevermind. Happy flashing peoples!