kirupa.com - Creating a Volume Control Slider

  Creating a Volume Control Slider          by kirupa chinnathambi While a simple sound 'on' or sound 'off' button is acceptable, a volume slider is even better! A volume slider is a small bar that you can drag to increase or decrease the volume of any sound. In this tutorial, you will learn how to create just that. The following animation is a good example of what you will be creating. Drag the horizontal slider to the right and press the Play arrow to hear the sound. Notice how the volume increases when you slide the slider to the right and decreases when you slide the slider to the left. [ once the music loads, increase the volume and press the play arrow ] Creating the Animation: A large portion of this animation lies in simply creating the slider. Ilyas Usal (ilyaslamasse/pom) wrote an excellent tutorial that tells how to create a slider: http://www.kirupa.com/developer/mx/slider.htmNeedless to say, I don't want you to create a slider from scratch for this tutorial. Therefore, I have provided a sample FLA file that includes the above interface with a functioning slider so you can focus more on volume control and not worry about actually having to create a slider.Download and extract the partial, zipped FLA and MP3 from the following link:     Once you have opened the volume_user.fla file you downloaded from the above link, you will see a similar interface as that shown in the example animation above.   First, we need a variable that controls the volume according to the slider's position on the horizontal line. Right click on the slider and select 'Edit in Place'.   You should now find yourself in the slider movie clip. Right click on the solitary keyframe in the Code layer and select Actions.   You will see a chunk of code that enables the slider to work. We need to place a variable that communicates the value of the slider to the rest of the animation. Add the following line of code AFTER the line starting with the word ratio: _root.volume = ratio; The entire section of code will now look like this with the code you added colored in blue: this.ratio = 0; dragger.onPress = function() { this.startDrag(true, 0, 0, line._width, 0);     this.onEnterFrame = function() {         ratio = Math.round(this._x*100/line._width);        _root.volume = ratio;     };  }; dragger.onRelease = dragger.onreleaseOutside=stopDrag;   After you have added that line of code, press the blue left arrow under your timeline to go back to the main stage: [ press the blue arrow to go to the main timeline ] Now that you are back in the main timeline, you will add the code that makes the sound's volume correspond to the slider.   Right click on the slider and select Actions. You will already see a large portion of code responsible for playing the sound. Before the very last bracket ' }' in the code, add the following line: mySound.setVolume(_root.volume); The last few lines of code in your Actions window should look similar to the following image: [ copy and paste the line of code directly above the last bracket ] You are done with the animation, but if you are not familiar with what was done in this tutorial, I strongly urge you to read the explanation. ActionScript Explained First, let us discuss how the sound gets played and the volume adjusted. The following section of code can be found on the slider movie clip: onClipEvent (load) {   mySound = new Sound();   mySound.loadSound("sound2.mp3", false); } onClipEvent (enterFrame) {   downloaded = mySound.getBytesLoaded();   total = mySound.getBytesTotal();     if (downloaded != total) {       _root.dl = "downloading song...";     } else {       complete = 1;       _root.dl = "";     }     mySound.setVolume(_root.volume); }The orange colored code creates our sound object. In this tutorial, I am calling the sound object mySound. For information on dynamically loading a sound file, scroll to the bottom of the page from the following URL: http://www.kirupa.com/developer/mx/loading.htmIn the green section of code, the actual song is preloaded before being displayed. The total size of the sound file is determined using getBytesTotal(). The portion of the sound that has currently loaded is determined using  getBytesLoaded(). By using an if statement, we can tell Flash to check if the portion of the sound file loaded does not equals the total file size of the sound file. If the song is still downloading, the if statement will tell a textbox 'dl' to display the text "downloading song...". If the song has loaded, a variable called complete is initialized to 1. You will see where this variable is used again.In the blue portion of the code, setVolume() is used for the mySound sound object. The variable _root.volume carries a number between 0 and 100 as determined by the slider position (remember we set _root.volume = ratio inside the slider). When you combine all of the above you get the ability to control the volume of the sound.  Now, right click on the Play button on the stage and select Actions. The code you will see is: on (release) {       if (_root.mySlider.complete == 1) {             _root.mySlider.mySound.start(0, 99);       } } The above code actually allows you to play the sound that was loaded in the slider movie clip. If the variable complete, located on the mySlider (slider) movie clip, equals 1, the song starts to play and loops 99 times before stopping. If you recall, in the preloader I discussed in the previous section, the variable complete was initialized to 1 after the song was loaded. I did not want the user to play the sound without having completely downloaded the song. The only way to ensure that would be to use an if statement that prevents the song from being played unless the value of complete = 1; which it will once the sound is loaded.  Thanks a lot to Shane Waldeck (lostinbeta) for helping me resolve a childishly easy sound problem I had initially. Got a question or just want to chat? Comment below or drop by our forums (they are actually the same thing!) where a bunch of the friendliest people you'll ever run into will be happy to help you out! When Kirupa isn’t busy writing about himself in 3rd person, he is practicing social distancing…even on his Twitter, Facebook, and LinkedIn profiles. Hit Subscribe to get cool tips, tricks, selfies, and more personally hand-delivered to your inbox.  

This is a companion discussion topic for the original entry at https://www.kirupa.com/developer/mx/volume_slider.htm