# Preloading Multiple Sounds

**URL:** <https://forum.kirupa.com/t/preloading-multiple-sounds/290230>\
**Category:** flash\
**Created:** [June 11, 2009, 2:12pm UTC](https://forum.kirupa.com/t/preloading-multiple-sounds/290230 "2009-06-11T14:12:46Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mindspacer](https://avatars.discourse-cdn.com/v4/letter/m/a88e4f/32.png) [@mindspacer](https://forum.kirupa.com/u/mindspacer)\
**Post date:** [June 11, 2009, 2:12pm UTC](https://forum.kirupa.com/t/preloading-multiple-sounds/290230/1 "2009-06-11T14:12:46Z")

</div>

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!

```auto

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;
        }
    }
}

```
