1

aurio touch ソノグラムの例を見ていると、青から紫、赤、白の範囲の色で大きさに応じて、さまざまな FFT 周波数帯域が表示されていることがわかります。無音時はグラフが黒くなります。強度の低い音の場合、異なる帯域が青色で表示されます。音の大きさが大きくなると、色は「より熱く」なり、赤白熱になります。これにより、ユーザーは何が起こっているのかを簡単に確認できます。

信号の最大振幅がどうなるかを正確に知らなくても、同様のカラー コーディング アルゴリズムを実装する方法について提案が必要です。

Aurio touchソノグラムの例

私は似たようなものを作成しようとしましたが、これまでのところ成功は限られていました. これは私が使用しているコードです:

さまざまな大きさの 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 のホット/コールドの例により近いカラーマッピング アルゴリズムの実装を提案できる人はいますか?

私のコードが表示するものは次のとおりです。 ここに画像の説明を入力

4

2 に答える 2