Preloading Multiple Sounds

Hoping someone can help me figure this out… In my app, scenes on the stage play based on user interaction, and are accompanied by sound clips that are loaded through a soundLoader class (see below). I can play the correct track from the model, but I can’t figure out how to correctly write a loadTracks function that will proload all of the track options for a given scene, and then play the correct one based on what the user clicks without a pause. How would I preload and store those sounds in a way that I can use them when needed?

Thanks in advance!


package mvc
{
    import flash.display.*;
    import flash.media.*;
    import flash.events.*;
    import flash.net.*;
    import mvc.SceneView;

    public class SoundLoader extends View
    {
        private var trackList:Array;
        private var soundReq:URLRequest;
        private var loader:Sound;
        private var audioTrack:SoundChannel;
        private var trackIndex:int = 0;
        private var initialized:Boolean = false;
        public var resumeTime:Number;
        public var isPlaying:Boolean = false;
        private var trackVolume:SoundTransform;
        private var trackLength:Number;
        private var autoContinue:Boolean;
        private var nextScene:int;
        public var local:Boolean;
        private var soundContainer:Sprite;
        private var stage:MovieClip;
        private var counter:int = 0;

        public function SoundLoader(_stage:MovieClip, tracks:Array, isLocal:Boolean = false)
        {
            stage = _stage;
            local = isLocal;
            trackList = tracks;
        }
        
        public function pauseTrack():void
        {
            resumeTime = audioTrack.position;
            audioTrack.stop();
            isPlaying = false;
        }
        
        public function playBtn():void
        {
            audioTrack = loader.play(resumeTime);
            audioTrack.soundTransform = trackVolume;
            isPlaying = true;
            audioTrack.addEventListener(Event.SOUND_COMPLETE, trackFinished);
        }
        
        override public function findTrack(event:Event = null):void
        {
            if(model.currentQuestion.answer.attribute("auto")=  ="true")
            {
                model.nextScene = model.currentQuestion.answer.attribute("goto");
                changeTrack(model.currentIndex, true);
            } else
            {
                changeTrack(model.currentIndex, false);
            }
        }
        
        public function changeTrack(dir:int, auto:Boolean = false):void
        {
            autoContinue = auto;
            trackIndex = dir;
            if(trackIndex!=1)
            {
                if(audioTrack)
                {
                    audioTrack.stop();
                }
            }
            playCurrent();
        }
        
        private function playCurrent():void
        {
            soundReq = new URLRequest("assets/audio/"+trackList[trackIndex-1]+".mp3");
            loader = new Sound();
            loader.load(soundReq);
            loader.addEventListener(Event.COMPLETE, trackLoaded);
        }
        
        private function loadTracks():void
        {
            if (local)
            {
                soundReq = new URLRequest("assets/audio/"+model.currentTrackOptions[counter]+".mp3");
            } else
            {
                soundReq = new URLRequest("http://url"+model.currentTrackOptions[counter]+".mp3");
            }
            
            loader = new Sound();
            loader.load(soundReq);
            loader.addEventListener(Event.COMPLETE, trackPrepped);
        }
        
        private function trackPrepped(event:Event):void
        {
            counter++;
            if (counter < model.currentTrackOptions.length)
            {
                loadTracks();
            }
        }
        
        private function trackLoaded(event:Event):void
        {
            trackLength = loader.length;
            resumeTime = 0;
            audioTrack = loader.play();
            audioTrack.stop();
        

            if(isPlaying)
            {
                audioTrack = loader.play();
            }

            if(!initialized)
            {
                trackVolume = audioTrack.soundTransform;
                initialized = true;
            }
            else
            {
                audioTrack.soundTransform = trackVolume;
            }
            
            //TELL MODEL THAT SOUND IS READY
            model.soundReady();
            
            audioTrack = loader.play();
            audioTrack.addEventListener(Event.SOUND_COMPLETE, trackFinished);
        }
        
        private function trackFinished(event:Event):void
        {
            if (autoContinue)
            {
                model.setCurrentIndex(model.nextScene);
            } else
            {
                model.sceneComplete();
            }
        }
        
        public function setVol(vol:Number):void
        {
            trackVolume.volume = vol;
            audioTrack.soundTransform = trackVolume;
        }
        
        public function getVol():Number
        {
            return trackVolume.volume;
        }
        
        public function getProg():Number
        {
            return audioTrack.position;
        }
        
        public function gettrackLength():Number
        {
            return trackLength;
        }
        
        public function setResumeTime(time:Number):void
        {
            resumeTime = time;
        }
    }
}