背景:
我目前正在尝试使用 Flash 和 AS3(出于多种原因)为音乐创建频率可视化器。我对 AS3 完全陌生,对 Flash 有点陌生,但对 javascript 有一些背景知识,这对我现在所处的位置有很大帮助。无论如何,我有这段代码是我从教程中修改的,用于为每个频率范围的幅度创建条形图。
但是,因为我希望它首先工作,所以我使用了可能是计算每个条的效率最低的方法。
编码:
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.display.FrameLabel;
var s:Sound = new Sound(new URLRequest("Mix 1 v4.mp3"));
s.play(0, 1);
var ba:ByteArray = new ByteArray();
addEventListener(Event.ENTER_FRAME, loop);
function loop(e:Event):void {
graphics.clear();
graphics.beginFill(0xFFFF00);
graphics.drawRect(0, 502, 1280, 4);
SoundMixer.computeSpectrum(ba, true);
for (var i:uint=0; i<256; i+=8) {
if (i<=8) {
var num:Number = -ba.readFloat()*250;
graphics.beginFill(0xFFFF00);
graphics.drawRect(110, 500, 32, num);
}
if (i>8 && i<=16) {...
并且代码继续将每个 if 语句增加 8 和每个 drawRect(110(34*x), 500...)
我正在寻找一种使 computeSpectrum 和 ByteArray “全局”并为频率值的每个部分自动绘制图形的方法,而不是拥有 32 个 if (i>32 && i<=40) {.. .
总而言之,这段代码有效。但这绝对是不正确的,至少从我有限的经验来看(我想这可能会让你们中的一些人畏缩。)
我意识到可能有一种方法可以简化它,但是很难弄清楚从哪里开始,并且当您不知道自己在做什么时调试会令人沮丧(我相信我们都曾经去过那里)
我将努力提出自己的解决方案,但我会非常高兴能在这个问题上提供一些指导。
谢谢