티스토리 뷰

728x90
반응형

유니티  사운드 관련 알게된 것 붙여넣기

유니티 마이크 실시간 인풋 : 레이턴시 200-300ms-> 에셋 FFT 사용해서 레이턴시 줄이기

readme 문서를 보면

에셋 코드 활용하기

To use our scripts and obtain the spectrum of a set of data you must follow these steps.
1. Create the inout and output complex arrays
                Complex[] inputSignal_Time = new Complex[windowSize];
                Complex[] outputSignal_Freq = new Complex[windowSize];
2. Transform from double to complex
                inputSignal_Time =
FastFourierTransform.doubleToComplex(Y_inputValues);
3. Obtain the FFT
                //result is the iutput values once DFT has been applied
                outputSignal_Freq =
FastFourierTransform.FFT(inputSignal_Time,false);
4. Obtain the module of the complex number
                Y_output = new double[windowSize];
                //get module of complex number
                for (int ii = 0; ii < windowSize; ii++)
                {
                    Y_output[ii] = (double)Complex.Abs(outputSignal_Freq[ii]);
                 }

 

 

***audioSource 컴포넌트 추가 

* 리스너도 추가하랬는데 카메라에 달려있으니 따로 추가하면 안 된다. 2개되면 오류남.

 

 

마이크 인풋

void Start()
{
    audioSource = GetComponent<AudioSource>();
    audioSource.clip = Microphone.Start(null, false, 999, 44100);
    while (!(Microphone.GetPosition(null) > 0)) ;
    audioSource.Play();
}

999초 동안 마이크 소리가 유니티에서 재생된다.

*마이크 소리에서 - 주파수 대역의 진폭 가져오기

 

 

 

 AudioSource.GetSpectrumData 함수

https://medium.com/giant-scam/algorithmic-beat-mapping-in-unity-real-time-audio-analysis-using-the-unity-api-6e9595823ce4

 

Algorithmic Beat Mapping in Unity: Real-time Audio Analysis Using the Unity API

Posts in this series:

medium.com

이 함수는 재생중인 Source의 파형을 FFT한 결과를 배열에 저장.

float[] samples : FFT한 결과를 저장할 배열, 배열의 길이는 2의 제곱 수여야 합니다.

int channel : 채널

window : 샘플링할 때 사용할 FFTWindow (주파수 대역에서 신호의 누출을 줄이기 위해 사용)

예시

void Update()
    {
        float[] spectrumData = audioSource.GetSpectrumData(visualizerSimples, 0, FFTWindow.Rectangular);
 
        for (int i = 0; i < visualizerObjects.Length; i++) {
            Vector2 newSize = visualizerObjects[i].GetComponent<RectTransform>().rect.size;
            newSize.y = Mathf.Lerp(newSize.y, minHeight + (spectrumData[i] * (maxHeight - minHeight) * 5.0f), sensitivity);
            newSize.y = Mathf.Clamp(newSize.y, minHeight, maxHeight);
            visualizerObjects[i].GetComponent<RectTransform>().sizeDelta = newSize;
 
            visualizerObjects[i].GetComponent<Image>().color = visualizerColor;
        }
    }

https://morm.tistory.com/274

 

유니티 오디오 비쥬얼라이져 심플 튜토리얼

매우 간단한 오디오 비쥬얼라이져입니다. void Update() { float[] spectrumData = audioSource.GetSpectrumData(visualizerSimples, 0, FFTWindow.Rectangular); for (int i = 0; i < visualizerObjects.Length; i++) { Vector2 newSize = visualizerObject

morm.tistory.com

 

이것저것 알게된거 그냥 적기

 

 

오디오 믹서

유니티에 오디오 믹서가 있다.

새로운 믹서 추가

unity audiomixer?

->  게임이나 어플리케이션에서 오디오를 제엏고 조작하는 도구.

다양한 오디오 소스를 관리하고 효과를 적용하는 허브 역할 ! 

다양한 기능

1. 라우팅 , 믹싱 : 오디오 볼륨 패닝을 독립적 혹은 전체적으로 제어가능

2. 오디오 효과 : EQ, 리버브, 컴프레셔

3. 스냅샷 및 전환 : 스냅샷을 생성하고 이들간에 부드럽게 전환할 수 있음. 게임 플레이 상태 또는 오디오 상황간의 전환을 만드는데 유용. 오디오 효과를 부드럽게 페이드 인 또는 아웃하고 볼륨 조정. 기타 매개변수 제어하여 오디오 전환 !

 

(AudioSource: 개별 게임 개체에 연결. 단일 오디오 소스. 오디오 클립 또는 스트림 재생. 볼룸 피치 루핑 및 공간 오디오 설정 가능

오디오 믹서에 연결되어 특정 오디오 그룹에 할당하고 믹서 설정 및 효과를 적용할 수 있다.)

오디오 소스를 오디오 그룹으로 라우팅

 

https://malbongcode.tistory.com/40

 

Unity - 사운드 조절하기 - Slider로 조절

사운드를 켜고 끄고 하는 것은 크게 두가지 있음 1) Sound Toggle (on/off) 2) Sound Manipulation (0~100) 1) Sound Toggle (on/off) 코드 살펴보기 스크립트 작성하고 Button 만들어서 OnClick에 넣어주면 됨 설명하자면 A

malbongcode.tistory.com

이사람이 진짜 잘 구현해 놓음.

전체 혹은 BGM SFX 를 나누어 볼륨 조절한느 UI 만들기. 스크립트 있음.

 

** 또 새로 알게된거

오디오 스페이셜라이저 SDK

HRTF 머리위치 측정 오른 쪽 왼쪽 소리 차이로 공간에 있는 듯한 소리 구현하는 sdk

728x90
반응형

'기타 ... > Sound' 카테고리의 다른 글

(사운드) IR : impulse response란?  (1) 2023.05.22
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함
반응형