Table of Contents

Sound.getBytesLoaded( ) Method Flash 6

the number of downloaded bytes of an external sound file
soundObject.getBytesLoaded()

Returns

An integer representing the number of bytes that have finished downloading to the Player. Divide by 1024 to convert bytes to kilobytes (KB).

Description

The getBytesLoaded( ) method tells us the number of bytes of an external sound file that have downloaded into the Flash Player due to a loadSound( ) call. For a new Sound object, getBytesLoaded( ) returns undefined. Immediately after each call to loadSound( ), getBytesLoaded( ) also returns undefined. As data arrives, getBytesLoaded( ) returns the number of bytes transferred so far (from 0 to getBytesTotal( )), until the entire sound has loaded. From then on, it returns the total number of bytes last transferred, until the next call to loadSound( ).

For Sound objects, getBytesLoaded( ) is used with getBytesTotal( ) to determine (and display, normally) the load progress of a downloading sound file. However, merely detecting the completion of a load operation does not require getBytesLoaded( ); the onLoad( ) event handler is executed automatically when a sound finishes loading.

Example

The following code adds a new method, preloadSound( ), to all Sound objects. It operates in the same way as loadSound( ), except that it uses getBytesLoaded( ) to report load progress while the sound is loading. The onLoad( ) handler responds to completion of the sound load operation, as usual. Note that as is, the code cannot load multiple sounds simultaneously because it does not queue preload requests. A queuing preloader is left as an exercise for the reader.

/*
 * Method: Sound.checkLoadProgress()
 *   Desc: Checks progress of a load(). Called only by preload().
 *         Reports progress by invoking a custom Sound.onBytesLoaded() handler.
 */
Sound.prototype.checkLoadProgress = function () {
  // Check how many KB have loaded.
  var kbLoaded = Math.floor(this.getBytesLoaded()/1024);
  // Check the size of the file loading, in KB.
  var kbTotal = Math.floor(this.getBytesTotal()/1024);
  // Calculate the percent complete.
  var percentDone = isNaN(Math.floor(kbLoaded/kbTotal * 100)) ?
                    0 : Math.floor(kbLoaded/kbTotal * 100);
  // Execute onBytesLoaded(), which typically would display load progress.
  this.onBytesLoaded(this.getBytesLoaded(), this.getBytesTotal(),
                     kbLoaded, kbTotal, percentDone);
  // If the amount loaded is equal to the total file size,
  // the file is finished loading. However, we must ensure
  // that getBytesLoaded() returns a value greater than 0
  // because both getBytesLoaded() and getBytesTotal()
  // return 0 until the first bit of data arrives.
  if (this.getBytesLoaded() > 5
      && this.getBytesLoaded() =  = this.getBytesTotal()) {
    // ...stop calling checkLoadProgress().
    this.clearLoadCheck();
  }
}
   
/*
 *  Method: Sound.clearLoadCheck()
 *   Desc: Cancels an interval calling checkLoadProgress().
 */
Sound.prototype.clearLoadCheck = function () {
  // If there is a load interval for this Sound object...
  if (this.loaderID) {
    // ...stop calling it.
    clearInterval(this.loaderID);
  }
}
   
/*
 * Method: Sound.preloadSound()
 *   Desc: Begins the download of a sound file and executes
 *         checkLoadProgress() every 200 ms until the file has loaded.
 */
Sound.prototype.preloadSound = function (url, isStreaming) {
  // Always stop any previous preload before proceeding.
  this.clearLoadCheck();
   
  // Load the Sound file.
  this.loadSound(url, isStreaming);
  // Call checkLoadProgress() every 200 milliseconds.
  this.loaderID = setInterval(this, "checkLoadProgress", 200);
}
   
// Usage:
// Create a Sound object.
music = new Sound();
// Assign an onLoad() callback.
music.onLoad = function (success) {
  // If the load was successful...
  if (success) {
    // ...use the new sound.
    trace("done loading!");
    this.start();
  } else {
    // ...otherwise, perform failure operations and
    // cancel the preload interval (REQUIRED!).
    trace("load failed");
    this.clearLoadCheck();
  }
}
// Assign an onBytesLoaded() callback. This is where each individual 
// Sound object can decide what to do with the preload information.
music.onBytesLoaded = function (bytesLoaded, bytesTotal,
                                kbLoaded, kbTotal, percentLoaded) {
  trace("Loading: " + kbLoaded +  " of " + kbTotal);
  trace(percentLoaded + " percent complete.");
}
   
// Load a streaming sound.
music.preloadSound("http://www.yoursite.com/sounds/song.mp3", true);

See Also

setInterval( ), Sound.getBytesTotal( ), Sound.onLoad( )


Table of Contents