[英]ActionScript 3 Flash CS6 - Fade out audio
I have this background music which plays on the menu. 我在菜单上播放此背景音乐。 I want to make it fade out smoothly whenever the player selects the "start" button (
startBtn
). 每当播放器选择“开始”按钮(
startBtn
)时,我都希望使其平滑淡出。 How do you do that? 你是怎样做的? Here is my code:
这是我的代码:
import flash.events.Event;
import flash.events.MouseEvent;
import flash.system.fscommand;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.events.Event;
import flash.media.SoundTransform;
import flash.events.MouseEvent;
//Declare MUSIC Variables
var musicSelection:Sound;
var musicChannel:SoundChannel;
var musicTrack:String = "music/dearly_beloved.mp3";
var musicVolume:Number=0.2;
/*var isMuted = false;*/
loadMusic();
function loadMusic():void
{
//first stop old sound playing
SoundMixer.stopAll();
musicSelection = new Sound();
musicChannel = new SoundChannel();
//create and load the required soun
musicSelection.load(new URLRequest(musicTrack));
//when loaded - play it
musicSelection.addEventListener(Event.COMPLETE, musicLoaded);
}
function musicLoaded(evt:Event):void
{
//finished with this listener
musicSelection.removeEventListener(Event.COMPLETE, musicLoaded);
//play music
playMusic();
}
function playMusic():void
{
//play the random or selected music
musicChannel = musicSelection.play();
//setting the volume control property to the music channel
musicChannel.soundTransform = new SoundTransform(musicVolume, 0);
//but add this one to make repeats
musicChannel.addEventListener(Event.SOUND_COMPLETE, playAgain);
}
function playAgain(evt:Event):void
{
// remove this listener and repeat
musicChannel.removeEventListener(Event.SOUND_COMPLETE, playAgain);
playMusic();
}
and this is the code for the second frame: 这是第二帧的代码:
import flash.events.Event;
import flash.media.SoundTransform;
stop();
optionBtn.addEventListener(MouseEvent.CLICK, goToOption)
function goToOption(event:MouseEvent):void
{
nextFrame();
}
startBtn.addEventListener(MouseEvent.MOUSE_DOWN, stopMusic);
function stopMusic(event:MouseEvent):void
{
musicChannel.soundTransform = new SoundTransform(musicVolume, 0);
while (musicVolume > 0)
{
musicVolume--;
}
}
quitBtn.addEventListener(MouseEvent.MOUSE_DOWN, closeGame);
function closeGame(event:MouseEvent):void
{
fscommand("quit");
}
Using while... will only decrease the music instantly - in one frame. 使用while ...只会在一帧中立即降低音乐。 What you need to do is to add ENTER_FRAME event, and inside it, you decrease the music.
您需要做的是添加ENTER_FRAME事件,然后在其中减少音乐。 Something like this :
像这样的东西:
addEventListener(Event.ENTER_FRAME, onLoop);
var _oldTime:Number = 0;
private function onLoop(e:Event):void
{
var resultTime:Number = getTimer() - oldTime;
if(resultTime > 200 )
{
musicVolume -= 0.1;
oldTime += resultTime;
if(musicVolume <= 0)
{
removeEventListener(Event.ENTER_FRAME,onLoop);
}
}
}
Depending on the speed you want, try different values for decreasing the volume, or when to decrease (result time > 200 -> 200ms) 根据所需的速度,尝试减小音量或减小音量的其他值(结果时间> 200-> 200ms)
You could use TweenMax to tween out the volume: 您可以使用TweenMax来补间音量:
http://www.greensock.com http://www.greensock.com
http://forums.greensock.com/topic/4753-volume-fade-outs/page_ hl _volume http://forums.greensock.com/topic/4753-volume-fade-outs/page_ hl _volume
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.