用ActionScript 3.0控制声音音量大小

上一次在最后讲了要将控制声音音量大小的,这次就来说介绍一下。由于最近比较忙,事情比较多,更新的比较慢。ActionScript 3.0中控制音量要比控制播放和停止复杂一些。首先还是要先做交互用的按钮,就像这样吧:

把这两个按钮拖放到舞台中,在属性面板中把实例名称分别设置为volumePlus和volumeMinus。接着倒入声音文件到Flash库中,然后连接至ActionScript,具体方法看这里。Class名继续使用BGSound。

在以前版本的ActionScript中可以直接在sound对象上设置音量,现在都被更改到了SoundTransform类。按F9打开动作面板,把下面的代码输入进去。

var sound:BGSound=new BGSound();
var soundChanel:SoundChannel=sound.play(0,999);
var transformSound:SoundTransform=new SoundTransform();
transformSound.volume=1;
soundChanel.soundTransform=transformSound;
volumePlus.addEventListener(MouseEvent.CLICK,addVolume);
volumeMinus.addEventListener(MouseEvent.CLICK,reduceVolume);
volumePlus.buttonMode=true;
volumeMinus.buttonMode=true; 

stage.addEventListener(Event.ENTER_FRAME,setVolume);
var soundVolume:Number=10; 

function setVolume(e:Event):void{
    transformSound.volume=soundVolume/10;
    soundChanel.soundTransform=transformSound;
    if(soundVolume==10){
        volumePlus.enabled=false;
    }else if(soundVolume==0){
        volumeMinus.enabled=false;
    }else{
        volumePlus.enabled=true;
        volumeMinus.enabled=true;
    }
} 

function addVolume(e:MouseEvent):void{
	if(soundVolume<10){
                soundVolume+=2;
        }
} 

function reduceVolume(e:MouseEvent):void{
        if(soundVolume>0){
                soundVolume-=2;
        }
}

按行解释代码:

第1行:创建BGSound类型对象sound。
第2行:创建SoundChanel类型对象soundChanel,同时开始播放sound,把播放的值赋给soundChanel对象。
第3行:创建SoundTransform对象transformSound。
第4行:设置transformSound对象的属性volume值为1。volume值的范围在0-1之间,0就表示没有声音,也就是静音,1就是最大音量。
第5行:将transform对象赋值给soundChanel的soundTransform属性。
第6-7行:分别给volumePlus和volumeMinus按钮添加事件监听,分别调用addVolume和reduceVolume方法。
第8-9行:设置按钮的指针形状为手形。
第11行:给舞台注册Event.ENTER_FRAME事件监听,这个用来实时监控声音音量,当发现通过按钮更变声音音量之后马上调整音量。
第12行:创建Number类型的变量soundVolume,用于存储实时音量。默认值为10的原因是因为Number类型在进行加减的过程中二进制计算会有误差,所以取整数就可以避免。其实在这里使用uint类型更合适,就可以避免这个问题。
第14行:定义函数setVolume用于改变音量。
第15行:将当前的音量值赋给transformSound.volume属性。每次改变音量值后需要重新赋值一次。
第16行:将transformSound赋值给soundChanel.soundTransform属性,道理同上。
第17-23行:当音量为最大的时候禁用增大音量按钮,此时按钮无法点击。当音量最小的时候禁用减小音量按钮,此时按钮同样无法点击。当既不是最大音量也不是最小音量的时候恢复按钮为活动状态,可点击。
第27-31行:定义addVolume方法,当音量小于最大音量的时候音量加0.2。(这里虽然是加2,但是在setVolume方法中会再除以10,所以实际增加量为0.2)。
第33-37行:定义reduceVolume方法,当音量大雨最小音量的时候减0.2。道理同上。

这样就算完成了。代码要比控制播放和停止长一点,但是还算比较好懂。如果有问题的话可以留言和我交流。

5 Comments

  1. 输出:
    TypeError: Error #1009: 无法访问空对象引用的属性或方法。
    at _fla::MainTimeline/setVolume()
    什么问题

    Reply

Leave a Comment.