LemonteaのUnity部屋

UnityとかC#のおはなしです~

Unity GetSpectrumData でレベルメータをつくる

こんにちは。レモンティーです。

今回は、以前チラッとつかったっきりだった
GetSpectrumDataをもうちょっと弄ってみようと思います。

この前は一番大きい音の音程をとりましたが、
その逆を見つけました。

こちら↓の記事では
y9uni.hatenablog.com
複数の周波数帯の音の強さをとって
閾値以上の大きさなら光らせるということをやっています。

そこで今回は、
私も強さの方でキューブを変形させて
レベルメータのようなものをつくってみました。

こんなです↓
youtu.be


やり方は、このまえ↓の方法から
Unity GetSpectrumDataで音程で上下動するキューブ - LemonteaのUnity部屋
音程をとる行程を削除して
大きさの最大値を使う感じです。

そのままだと0.02とかなので200倍して
こんな感じにしています

    public AudioSource AS;
    public int Min, Maximam;
    float[] spectrum = new float[1024];
    void Start()
    {
        StartCoroutine(MoovTest());
    }
    IEnumerator MoovTest()
    {
        yield return new WaitForSeconds(0.5f);
        AS.GetSpectrumData(spectrum, 0, FFTWindow.Blackman);
        float Max = 0;
        for (int i = Min; i < Maximam; i++)
        {
            if (spectrum[i] >= Max)
            {
                Max = spectrum[i];
            }
        }
        float y = Max * 200;
        transform.localScale = new Vector3(1, y, 1);
        StartCoroutine(MoovTest());
    }

前回0.5秒に一回にした名残でコルーチンにぶち込まれたままですが
気にしないでUpdataに書いて大丈夫だと思います。


今回は気が狂っていたので
これをオブジェクトに付け、MinとMaximamにそれぞれ
手動で周波数の範囲を入力するという馬鹿行為に及びました。

眠かったんだと思います。

ちなみに、ここで言うオブジェクトとは
y方向の大きさ2の空オブジェクトです。

なんせそのままだとキューブが両方向に伸びるので、
キューブがy方向の大きさ2の空オブジェクトの
上半分を占めるように配置して

空オブジェクトを伸び縮みさせてください。

そうすれば動画のように上にだけ伸びます。


今回はこれでおしまいです。


関連
Audio系
sawalemounity.hatenablog.com
sawalemounity.hatenablog.com