툴/유니티

유니티 오디오 스펙트럼

스튜디오 오버그래픽스 2021. 10. 26. 17:03

https://docs.unity3d.com/kr/530/ScriptReference/AudioSource.GetSpectrumData.html

 

Unity - 스크립팅 API: AudioSource.GetSpectrumData

The array given in the samples parameter will be filled with the requested data. (numSamples)값들은 2의 거듭제곱이어야 합니다. (128/256/512 등). Min = 64. Max = 8192. 주파수의 bins/bands 누락을 줄이기 위해 window를 사용하십

docs.unity3d.com

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spectrum : MonoBehaviour
{
    public AudioSource Audio;   //스펙트럼 데이터로 만들 오디오 소스
    GameObject[] SpectrumCube = new GameObject[64]; //스펙트럼을 시각적으로 보여줄 큐브 배열 64개 지정
    float[] SpectrumData = new float[64]; //스펙트럼 데이터를 받을 배열 float 64개 지정

    // Start is called before the first frame update
    void Start()
    {
        // 반복문을 통해서 x축으로 1간격씩 나열된 큐브 64개 생성
        for (int i = 0; i < 64; i++)
        {
            SpectrumCube[i] = GameObject.CreatePrimitive(PrimitiveType.Cube);
            SpectrumCube[i].transform.position = new Vector3(i,0,0);
        }
    }

    // Update is called once per frame
    void Update()
    {
        //지정된 오디오 소스에서 실시간으로 스펙트럼 데이터 받아오기
        SpectrumData = Audio.GetSpectrumData(64, 0, FFTWindow.Rectangular);

        //받아온 스펙트럼 데이터를 큐브의 Scale y축 값에 대입하기
        for (int i = 0; i < 64; i++)
        {
            SpectrumCube[i].transform.localScale = new Vector3(1, Mathf.Lerp(SpectrumCube[i].transform.localScale.y, SpectrumData[i]*100, 0.1f), 1);
        }
    }
}

Spectrum.cs
0.00MB