如何调整音频循环中的音量?
How to Adjust Volume in an Audio loop?
如何改变循环播放音乐的音量?例如,我正在制作一款游戏,在某一帧我希望将音乐音量 (music.wav
) 降低到其音量的一半。
有人怎么能在 AS3 中做到这一点?
您对 "loop" 这个词的使用令人困惑。在编程中,循环通常指的是 "for" 循环之一,如下所示:
for (var i:int = 0; i < 10; i++)
{
//do stuff 10 times
}
我推测这不是您所说的循环的意思,而是您希望 MovieClip
或主时间线减少 Sound
对象在 n
帧。或者你只是说音乐本身在循环播放?希望您看到提出写得好的问题的价值。话虽如此..
请注意,我还没有尝试过,但是根据我的参考书(Lott、Schall 和 Peters 的 ActionScript 3.0 Cookbook),您需要使用一个 SoundTransform
对象来指定音量想要设置声音。试试这个:
var _sound:Sound = new Sound(music.wav); // creates a Sound object which has no internal volume control
var channel:SoundChannel = _sound.play(); // creates a SoundChannel which has a soundTransform property
var transform:SoundTransform = new SoundTransform(); // SoundTransform objects have a property called "volume". This is what you need to change volume.
现在在您的循环中(或在您正在使用的框架事件中)执行此操作:
transform.volume *= 0.9; // or whatever factor you want to have it decrease
//transform.volume /= 1.1; // or this if you prefer.
channel.soundTransform = transform; //
因此,只要您希望音量按此增量减少,运行 这段代码。当然,您需要确保您设置的任何变量都可以在引用它们的代码中访问。想到的一种方法是使用函数。
private function soundDiminish(st:SoundTransform, c:SoundChannel, factor:Number = 0.9):void
{
st.volume *= factor;
c.soundTransform = st;
}
现在,只要您想减小音量,只需调用 soundDiminish
函数即可。
也许你的框架事件是这样的:
function onLoadFrame(fe:Event):void
{
soundDiminish(transform, channel); // 3rd parameter optional
}
如果您只想每 20 帧调用此函数,则:
function onLoadFrame(fe:Event):void
{
// this is a counter that will count up each time this frame event happens
frameCount ++;
if (frameCount >= 20)
{
soundDiminish(transform, channel); // 3rd parameter optional
frameCount = 0; // reset the frame counter
}
}
如何改变循环播放音乐的音量?例如,我正在制作一款游戏,在某一帧我希望将音乐音量 (music.wav
) 降低到其音量的一半。
有人怎么能在 AS3 中做到这一点?
您对 "loop" 这个词的使用令人困惑。在编程中,循环通常指的是 "for" 循环之一,如下所示:
for (var i:int = 0; i < 10; i++)
{
//do stuff 10 times
}
我推测这不是您所说的循环的意思,而是您希望 MovieClip
或主时间线减少 Sound
对象在 n
帧。或者你只是说音乐本身在循环播放?希望您看到提出写得好的问题的价值。话虽如此..
请注意,我还没有尝试过,但是根据我的参考书(Lott、Schall 和 Peters 的 ActionScript 3.0 Cookbook),您需要使用一个 SoundTransform
对象来指定音量想要设置声音。试试这个:
var _sound:Sound = new Sound(music.wav); // creates a Sound object which has no internal volume control
var channel:SoundChannel = _sound.play(); // creates a SoundChannel which has a soundTransform property
var transform:SoundTransform = new SoundTransform(); // SoundTransform objects have a property called "volume". This is what you need to change volume.
现在在您的循环中(或在您正在使用的框架事件中)执行此操作:
transform.volume *= 0.9; // or whatever factor you want to have it decrease
//transform.volume /= 1.1; // or this if you prefer.
channel.soundTransform = transform; //
因此,只要您希望音量按此增量减少,运行 这段代码。当然,您需要确保您设置的任何变量都可以在引用它们的代码中访问。想到的一种方法是使用函数。
private function soundDiminish(st:SoundTransform, c:SoundChannel, factor:Number = 0.9):void
{
st.volume *= factor;
c.soundTransform = st;
}
现在,只要您想减小音量,只需调用 soundDiminish
函数即可。
也许你的框架事件是这样的:
function onLoadFrame(fe:Event):void
{
soundDiminish(transform, channel); // 3rd parameter optional
}
如果您只想每 20 帧调用此函数,则:
function onLoadFrame(fe:Event):void
{
// this is a counter that will count up each time this frame event happens
frameCount ++;
if (frameCount >= 20)
{
soundDiminish(transform, channel); // 3rd parameter optional
frameCount = 0; // reset the frame counter
}
}