我正在查看 aurio touch 声波图示例,并看到它显示不同的 FFT 频带,具体取决于它们的大小,颜色范围从蓝色到紫色到红色到白色。没有声音时,图表为黑色。对于低强度的声音,不同的频段显示蓝色。当声音幅度增加时,颜色会变得“更热”——变成红白热。这有助于用户轻松查看正在发生的事情。
我需要有关如何实现类似颜色编码算法的建议,而无需确切知道信号的最大幅度。
我试图创造类似的东西,但到目前为止取得的成功有限。这是我正在使用的代码:
预先计算不同大小的 FFT 的颜色
colorMapGreen = [[NSMutableDictionary alloc] initWithCapacity:256];
for(int i = 0; i<256; i ++)
{
[colorMapGreen setObject:[UIColor colorWithHue:0.2 saturation:1 brightness:(i/256.0) alpha:1] forKey:[NSNumber numberWithInt:i]];
}
我遇到的问题是我不知道我将要查看的信号的最大幅度是多少。它变化很大——从 12000 到 50000。如果我尝试调整我的颜色映射,结果要么太暗,要么太亮,而且没有真正的描述性。
这就是我试图区分不同幅度带的方法。我真的希望低端(低于 4000)出现并在其他乐队中可见。
magnitude=sqrt(magnitudes[i]);
if(magnitude<4000)
{
//0 to 128
index = magnitude*0.0213;
}else if(magnitude < 15000)
{
//to 168
index = magnitude*0.0112;
}else if(magnitude < 30000)
{
//to 196
index = magnitude*0.00653;
}else if(magnitude < 100000)
{
//to 228
index = magnitude*0.00228;
}else if(magnitude < 10000000)
{
index = magnitude*0.0000256;
}else
{
((UIView*)[self.markerViews objectAtIndex:i]).backgroundColor = [UIColor whiteColor];
}
((UIView*)[self.markerViews objectAtIndex:i]).backgroundColor = [colorMapGreen objectForKey:[NSNumber numberWithInt:index]];
谁能建议一种颜色映射算法的实现,它看起来更接近 AurioTouch 的冷热示例?
这是我的代码显示的内容: