Recipe 13.12 Controlling the Panning of a Sound

13.12.1 Problem

You want to control the panning of a sound.

13.12.2 Solution

Use the setPan( ) method of the Sound object that controls the sound.

13.12.3 Discussion

You can use Sound.setPan( ) to programmatically control the panning of a sound between the left and right channels. A value of -100 plays the sound entirely in the left channel, and a value of 100 plays the sound entirely in the right channel. A value of 0 plays the sound equally between the two channels.

// Set the panning of a sound to 100, meaning that the sound is played completely in
// the right channel and not in the left.

You can use getPan( ) in conjunction with setPan( ) to set the panning relative to its current value:

// Set the panning of a sound 15% to the left of the previous setting.
mySound_sound.setPan(mySound_sound.getPan(  ) - 15);

You can use setPan( ) over time to create the effect of a sound moving from one side to the other:

#include ""

mySound_sound = Sound.createNewSound(  );

// Attach a sound from the Library.

// Start the playback of the sound.
mySound_sound.start(  );

// Define a function to call on an interval.
function moveLeftToRight (  ) {

  // Get the current position and the total duration of the sound.
  var pos = mySound_sound.position;
  var dur = mySound_sound.duration;

  // Determine the panning for the current position. At the beginning of the sound,
  // the panning should be to the left, and at the end of the sound the panning
  // should be to the right.
  var pan = (pos - dur/2)/(dur/2) * 100;

  // Set the panning.

// Create an interval on which to call the sound panning function.
panInterval = setInterval(moveLeftToRight, 100);

Here's another example in which the sound's panning follows the mouse. When the mouse moves to the left, the panning moves to the left. When the mouse moves to the right, the panning moves to the right.

#include ""

mySound_sound = Sound.createNewSound(  );
mySound_sound.start(  );

// Create a mouse listener object. Add a property to 
// the object that references the sound.
mouseListener = new Object(  );
mouseListener.snd = mySound_sound;

// Define an onMouseMove(  ) method for the listener so that it is called every time
// the mouse moves.
mouseListener.onMouseMove = function (  ) {
  // Set the panning of the sound so that it follows the mouse.
  var x = _root._xmouse;
  var w = Stage.width;
  this.snd.setPan((x - w/2)/(w/2) * 100);

// Add the listener to the Mouse object.

13.12.4 See Also

Recipe 13.13

    Part I: Local Recipes
    Part II: Remote Recipes