好吧,我正在尝试构建一个 FFT 音频可视化器,并且有两个问题可以让它变得更好。现在我有一些工作代码可以完成我想要的基本功能,但与往常一样,我想要更多。
这是我目前拥有的代码:
var s:Sound = new Sound(new URLRequest("mix 3 v1.mp3"));
s.play(0, 1);
var ba:ByteArray = new ByteArray();
addEventListener(Event.ENTER_FRAME, loop);
function loop(e:Event):void {
graphics.clear();
//Create ByteArray of song
SoundMixer.computeSpectrum(ba, true);
//For every 8 bytes to a max of 256
for (var i:uint=0; i<256; i+=32) {
var index = (i / 4);//or bitshift using i >> 3
var num:Number = -ba.readFloat()*250;
//Generate Bars
graphics.beginFill(0xFFFF00);
graphics.drawRect(191 + (index * 14), 500, 12, num-2);
}
}
我现在想要的是能够在一定时间后改变颜色。我该怎么做呢?我可以直接转到时间轴中的那一帧并执行一组不同的 AS3 代码吗?还是将所有内容都放在第一帧上是更好的做法?
另外,我将如何简化酒吧的更新?现在我相信它会清除所有图形,并重新绘制所有内容,留下一个非常跳跃/闪烁的可视化器。我应该只绘制矩形然后缩放高度吗?或者有没有办法让频率值在当前值和下一个值之间转换?(现在我认为这是不可能的,因为如果它正在更新每一帧,你就不能在帧之间转换......)
提前致谢。