13.08.2012 Views

ACTIONSCRIPT 3 Developer’s Guide en

ACTIONSCRIPT 3 Developer’s Guide en

ACTIONSCRIPT 3 Developer’s Guide en

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>ACTIONSCRIPT</strong> 3.0 DEVELOPER’S GUIDE<br />

Working with sound<br />

import flash.ev<strong>en</strong>ts.Ev<strong>en</strong>t;<br />

import flash.media.Sound;<br />

import flash.net.URLRequest;<br />

var snd:Sound = new Sound();<br />

var req:URLRequest = new<br />

URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");<br />

snd.load(req);<br />

var channel:SoundChannel;<br />

channel = snd.play();<br />

addEv<strong>en</strong>tList<strong>en</strong>er(Ev<strong>en</strong>t.ENTER_FRAME, onEnterFrame);<br />

channel.addEv<strong>en</strong>tList<strong>en</strong>er(Ev<strong>en</strong>t.SOUND_COMPLETE, onPlaybackComplete);<br />

function onEnterFrame(ev<strong>en</strong>t:Ev<strong>en</strong>t):void<br />

{<br />

var estimatedL<strong>en</strong>gth:int =<br />

Math.ceil(snd.l<strong>en</strong>gth / (snd.bytesLoaded / snd.bytesTotal));<br />

var playbackPerc<strong>en</strong>t:uint =<br />

Math.round(100 * (channel.position / estimatedL<strong>en</strong>gth));<br />

trace("Sound playback is " + playbackPerc<strong>en</strong>t + "% complete.");<br />

}<br />

function onPlaybackComplete(ev<strong>en</strong>t:Ev<strong>en</strong>t)<br />

{<br />

trace("The sound has finished playing.");<br />

removeEv<strong>en</strong>tList<strong>en</strong>er(Ev<strong>en</strong>t.ENTER_FRAME, onEnterFrame);<br />

}<br />

After the sound data starts loading, this code calls the snd.play() method and stores the resulting SoundChannel<br />

object in the channel variable. Th<strong>en</strong> it adds an ev<strong>en</strong>t list<strong>en</strong>er to the main application for the Ev<strong>en</strong>t.ENTER_FRAME<br />

ev<strong>en</strong>t and another ev<strong>en</strong>t list<strong>en</strong>er to the SoundChannel object for the Ev<strong>en</strong>t.SOUND_COMPLETE ev<strong>en</strong>t that occurs wh<strong>en</strong><br />

playback is complete.<br />

Each time the application reaches a new frame in its animation, the onEnterFrame() method is called. The<br />

onEnterFrame() method estimates the total l<strong>en</strong>gth of the sound file based on the amount of data that has already be<strong>en</strong><br />

loaded, and th<strong>en</strong> it calculates and displays the curr<strong>en</strong>t playback perc<strong>en</strong>tage.<br />

Wh<strong>en</strong> the <strong>en</strong>tire sound has be<strong>en</strong> played, the onPlaybackComplete() method executes, removing the ev<strong>en</strong>t list<strong>en</strong>er<br />

for the Ev<strong>en</strong>t.ENTER_FRAME ev<strong>en</strong>t so that it doesn’t try to display progress updates after playback is done.<br />

The Ev<strong>en</strong>t.ENTER_FRAME ev<strong>en</strong>t can be dispatched many times per second. In some cases, you won’t want to display<br />

playback progress that frequ<strong>en</strong>tly. In those cases, your application can set up its own timing mechanism using the<br />

flash.util.Timer class; see “Working with dates and times” on page 1.<br />

Stopping streaming sounds<br />

Flash Player 9 and later, Adobe AIR 1.0 and later<br />

There is a quirk in the playback process for sounds that are streaming—that is, for sounds that are still loading while<br />

they are being played. Wh<strong>en</strong> your application calls the SoundChannel.stop() method on a SoundChannel instance<br />

that is playing back a streaming sound, the sound playback stops for one frame, and th<strong>en</strong> on the next frame, it restarts<br />

from the beginning of the sound. This occurs because the sound loading process is still underway. To stop both the<br />

loading and the playback of a streaming sound, call the Sound.close() method.<br />

Last updated 6/6/2012<br />

453

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!