LoginSignup
12
12

More than 5 years have passed since last update.

球の法線方向を音に合わせて伸ばしたりすることの素敵さ

Last updated at Posted at 2017-03-21

133818a748426c2f2155bd9bfc9b07cb.gif

こんな感じになります。

実際にやってみると綺麗ですよー

参考

コード

qiita.csharp

using UnityEngine;
using System.Collections.Generic;


public class Sinus : MonoBehaviour
{
    float[] _spectrum = new float[128];
    float _lastLow = 0;
    public GameObject cube;
    [Range(0, 1)]
    public float t = 1;

    List< GameObject> cubes = new List< GameObject>();
    List< Vector3> cubess = new List< Vector3>();

    void Start()
    {
        for (int i = 0; i < 128; i++) {

                cubes.Add ((GameObject)Instantiate (cube, new Vector3 (5*Mathf.Sin(i * 15), 5*Mathf.Cos(i*20), 0), Quaternion.identity));
                cubess.Add (new Vector3 (i * 1.2f, i * 1.2f, 0));


        }

    }

    void Update()
    {
        AudioListener.GetSpectrumData(_spectrum, 0, FFTWindow.Rectangular);
        float low = 0;
        for (int i = 1; i < 3; i++)
            low += _spectrum[i];

        low = _lastLow * (1 - t) + low * t;
        transform.localScale = Vector3.one * 0.05f * low + Vector3.one;
        _lastLow = low;

        print (cubes.Count);

        for (int i = 0; i < cubes.Count; i++) {
            //cubes[i].transform.rotation = Quaternion.Euler (new Vector3 (1, _spectrum[i]*i, 1) * 30);
            cubes[i].GetComponent<Renderer>().material.color = new Color(0.5f+Mathf.Sin(Time.time)+_spectrum[i]*1,0.5f,0.5f+Mathf.Cos(Time.time)+_spectrum[i]*1);
            cubes [i].transform.position = new Vector3 (10*Mathf.Sin(i*100+Time.deltaTime*_spectrum[i])*Mathf.Cos(i),10*Mathf.Sin(i*100)*Mathf.Sin(i),10*Mathf.Cos(i*100));
            cubes [i].transform.localScale = new Vector3 (0.1f,0.1f,1000*_spectrum[i]);
            cubes [i].transform.LookAt(new Vector3 (100*Mathf.Sin(i*100)*Mathf.Cos(i),100*Mathf.Sin(i*100)*Mathf.Sin(i),100*Mathf.Cos((i*100))));


        }
    }

}

こんな感じ!!

音のデータって、128とか64らしい!

んで、配列の中に一気に音声データが入り込むらしいですね!スゴイ!知りませんでした!

ちゃんと音楽勉強したらもっと人生豊かになれるんでしょうね!

最高!

音の周波数スペクトラムについて

参考

まず音って、たくさんの周波数の集まりなので、それを

AudioListener.GetSpectrumData(_spectrum, 0, FFTWindow.Rectangular);

をつかって、高速フーリエ変換する。んででてくるたくさんの波のデータの中の重み成分が、たぶんスペクトラムの配列の中に入っていると思う。。。

a*sin(T*sita) のa の部分がスペクトラム

どういう順番で入っているのかっていうと、おそらく音の高さ(Tの大きさによる違い)がそれぞ順番として割り当てられていると思う。

フーリエ変換とかについて

参考

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12