Mp3 Player
2009-05-30 12:07:53 来源:WEB开发网 volume_bar.addEventListener(Event.CHANGE, adjustVolume);
然后创建adjustVolume 方法:
private function adjustVolume(evt:Event):void {
soundChannel.soundTransform = new SoundTransform(evt.target.value);
}
同时还需要导入import flash.media.SoundTransform。好了,音量控制也完成了,下面来看如何输出声音波形。
五、输出声音波形
读取声音波形使用 SoundMixer 类的静态方法computeSpectrum()。下面看一下帮助中对于该方法的描述:
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
[static] 获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。
此方法的第一个参数是一个 ByteArray 字节数组,它会将波形写入到 ByteArray 中。
字节数组中的值为标准浮点值(范围为 -1.0 到 1.0)格式。刚好,用得到的 -1.0 ~ 1.0 直接就可以赋值给声波条 SoundBar(我们在界面设计时绘制的一个影片剪辑)对象的 scaleY 属性了。第三个参数的值可以改变采样率,默认为 0,按 44.1 KHz 对数据进行采样。
computeSpectrum() 方法填充的 ByteArray 大小固定为512 个浮点值。其中前 256 个值表示左声道,后 256 个值表示右声道。
既然有 512 个浮点值,为了简单起见,我们就用 512 个 SoundBar 来显示它们。首先加入一些成员变量:
// 保存 512 个声音波形的快照
private var bytes:ByteArray = new ByteArray();
// SoundBar 的个数
private var barNum:uint = 512;
// 保存所有 SoundBar 对象的引用
private var soundBars:Array = new Array();
下面在 init() 函数中将声音条初始化,并添加 onEnterFrame 侦听:
// 每个 SoundBar 的宽度:舞台宽度 / SoundBar 的个数
var barWidth:Number = stage.stageWidth / barNum;
// 初始化 SoundBar,放入舞台并加入数组
for (var i:uint = 0; i < barNum; i++) {
var soundBar:SoundBar = new SoundBar();
soundBar.width = barWidth;
soundBar.x = i * barWidth;
soundBar.y = stage.stageHeight;
addChild(soundBar);
soundBars.push(soundBar);
}
// 注册用来处理波形的函数
addEventListener(Event.ENTER_FRAME, onEnterFrame);
最后是 onEnterFrame 函数:
private function onEnterFrame(evt:Event):void {
SoundMixer.computeSpectrum(bytes, false, 0);
for (var i:uint = 0; i < barNum; i++) {
soundBars[i].scaleY = bytes.readFloat();
}
}
更多精彩
赞助商链接