728x90
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(AudioSource))]
public class AudioSourceGetSpectrumDataExample : MonoBehaviour
{
[SerializeField] private Image bar; // 원본 막대 prefab
[SerializeField] private Transform trBarParent; // 막대 부모
// 스펙트럼 표현 막대들
// Canvas 하위 객체
private RectTransform[] bars = new RectTransform[128];
private float[] spectrum = new float[128]; // 스펙트럼 샘플 수
private AudioSource audioSource = null; // audiosource
// Start is called before the first frame update
void Start()
{
// 바 초기화
for(int i=0; i < bars.Length; i++)
{
bars[i] = (Instantiate(bar) as Image).GetComponent<RectTransform>();
bars[i].parent = trBarParent;
bars[i].localPosition = new Vector2(i * 5, 0);
//color 랜덤 초기화
bars[i].GetComponent<Image>().color = new Vector4(Random.Range(0.0f, 0.1f), Random.Range(0.0f, 0.1f), Random.Range(0.0f, 0.1f), 1f);
bars[i].sizeDelta = new Vector2(2.5f, 1);
}
// audiosource 초기화
audioSource = GetComponent<AudioSource>();
audioSource.clip = Microphone.Start(null, true, 1, 44100);
audioSource.Play();
Invoke("LoopMicAudio", 1);
}
// Update is called once per frame
void Update()
{
//스펙트럼 값에 따른 막대 사이즈 변화
AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular);
for(int i = 0; i < bars.Length; i++)
{
bars[i].sizeDelta = new Vector2(2.5f, spectrum[i] * 700);
}
}
// loop mic audio
void LoopMicAudio()
{
audioSource.Play();
Invoke("LoopMicAudio", 1);
}
}
728x90
반응형
'Unity3D > Unity & C#' 카테고리의 다른 글
Unity & C# ~ 두 오브젝트의 색상과 이미지가 중복되지 않는 랜덤 출력 (0) | 2022.10.07 |
---|---|
Unity & C# ~ Crop Image (0) | 2022.10.07 |
Unity & C# ~ string.Format 글자 색상 적용 (0) | 2022.09.26 |
Unity & C# ~ Text 형식 표기법(NO, F0, P0, D0 등) (0) | 2022.08.22 |
Unity & C# ~ VisualStudio 단축키 중 (내가) 자주 사용하는 단축키 (0) | 2022.07.05 |