Ну может вам это поможет. У меня прекрасно работает, без щелчков.
Код AS1/AS2:
package
{
import com.greensock.TweenMax;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
import flash.net.URLRequest;
/**
* ...
* @author Mikhail Klabukov
*/
public class BackgroundSound
{
static public const SOUND_OFF:String = "soundOff";
static public const SOUND_ON:String = "soundOn";
private var sound:Sound;
private var channel:SoundChannel
private var played:Boolean = false;
private var _pos:Number;
private var st:SoundTransform;
public function BackgroundSound()
{
sound = new Sound(new URLRequest('**********soundUrl**********'));
sound.addEventListener(IOErrorEvent.IO_ERROR, errorSoundLoad)
channel = sound.play(0, 10000);
played = true;
MainControls.self.addEventListener(MainControls.SOUND_SWITCH, switchSound);
}
private function errorSoundLoad(e:IOErrorEvent):void
{
trace(e)
}
private function switchSound(e:Event):void
{
if (TweenMax.isTweening(st))
return;
st = channel.soundTransform;
if (played)
{
_pos = channel.position;
TweenMax.to(st, 2, {volume: 0, onUpdate: function():void
{
channel.soundTransform = st;
}, onComplete: function():void
{
channel.stop();
}});
played = false
MainControls.self.dispatchEvent(new Event(SOUND_OFF));
}
else
{
channel = sound.play(_pos, 10000);
TweenMax.to(st, 3, {volume: 1, onUpdate: function():void
{
channel.soundTransform = st;
}});
played = true;
MainControls.self.dispatchEvent(new Event(SOUND_ON));
}
}
}
}