actionscript 3-两个AS3问题-音频可视化工具



好吧,我正在尝试构建一个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代码吗?还是把所有东西都放在第一帧上更好?

此外,我将如何简化酒吧的更新?现在我相信它清除了所有的图形,并重新绘制了所有的东西,留下了一个非常跳跃/闪烁的可视化工具。我应该先画矩形,然后缩放高度吗?或者有没有一种方法可以使频率值的缓冲区在当前值和下一个值之间转换?(现在我认为这是不可能的,因为如果它更新每一帧,你就无法在帧之间转换…)

提前谢谢。

好吧,我认为要实现您想要的,您必须重新设计并重新思考您的代码。

一开始我会删除你的ENTER_FRAME循环,改为使用Timer——这样你就不依赖帧速率了。

第二,我会做这样的循环:

function loop(e: TimerEvent): void
{
  processData();
  draw();
}

在processData()中,您可以执行所需的任何计算,并将它们保存在中,以供以后在绘图过程中使用。如果你愿意,你可以在谷歌上搜索Game Loop来了解更多信息。

如果你想保持简单,我可以建议你将条形图的高度保存在数组或向量中,然后使用这些数据来绘制条形图。你甚至可以有两个数组——一个用于旧数据,一个用于当前迭代——这样你就可以产生一些不错的效果,比如先用旧数据绘制半透明条,然后在它们上面绘制新条。

这只是一堆想法,但希望这会有用:)

最新更新