控制音量和声相
以下代码示例使用 volume 值 0.6 和 pan 值 -1 创建一个 SoundTransform 对象(左声道为最高音量,右声道没有音量)。此代码将 SoundTransform 对象作为参数传递给 play()
方法,此方法将该 SoundTransform 对象应用于为控制回放而创建的新 SoundChannel 对象。
var snd:Sound = new Sound(new URLRequest("bigSound.mp3")); var trans:SoundTransform = new SoundTransform(0.6, -1); var channel:SoundChannel = snd.play(0, 1, trans);
可以在播放声音的同时更改音量和声相,方法是:设置 SoundTransform 对象的 pan
或 volume
属性,然后将该对象作为 SoundChannel 对象的 soundTransform
属性进行应用。
也可以通过使用 SoundMixer 类的 soundTransform
属性,同时为所有声音设置全局音量和声相值,如以下示例所示:
SoundMixer.soundTransform = new SoundTransform(1, -1);
以下示例在播放声音的同时将声音从左声道移到右声道,然后再移回来,并交替进行这一过程。
import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("bigSound.mp3"); snd.load(req); var panCounter:Number = 0; var trans:SoundTransform; trans = new SoundTransform(1, 0); var channel:SoundChannel = snd.play(0, 1, trans); channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event):void { trans.pan = Math.sin(panCounter); channel.soundTransform = trans; // or SoundMixer.soundTransform = trans; panCounter += 0.05; } function onPlaybackComplete(event:Event):void { removeEventListener(Event.ENTER_FRAME, onEnterFrame); }
此代码先加载一个声音文件,然后将 volume 设置为 1(最大音量)并将 pan 设置为 0(声音在左和右声道之间均衡地平均分布)以创建一个新的 SoundTransform 对象。接下来,此代码调用 snd.play()
方法,以将 SoundTransform 对象作为参数进行传递。
在播放声音时,将反复执行 onEnterFrame()
方法。onEnterFrame()
方法使用 Math.sin()
函数来生成介于 -1 和 1 之间的值,此范围对应于可接受的 SoundTransform.pan
属性值。此代码将 SoundTransform 对象的 pan
属性设置为新值,然后设置声道的 soundTransform
属性以使用更改后的 SoundTransform 对象。
要运行此示例,请用本地 mp3 文件的名称替换文件名 bigSound.mp3。然后,运行该示例。当右声道音量变小时,您应会听到左声道音量变大,反之亦然。
在此示例中,可通过设置 SoundMixer 类的 soundTransform
属性来获得同样的效果。但是,这会影响当前播放的所有声音的声相,而不是只影响此 SoundChannel 对象播放的一种声音。
posted on 2017-12-19 15:25 zqiang0803 阅读(202) 评论(0) 编辑 收藏 举报