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 のホット/コールドの例により近いカラーマッピング アルゴリズムの実装を提案できる人はいますか?
私のコードが表示するものは次のとおりです。