GetSpectrumData
플레이어가 재생할 레벨 레이아웃을 만들기 위해 노래를 재생하는 AudioSource에서 사용하는 코드가 있습니다. 플레이어가 자신의 노래를 업로드하고이 노래의 데이터로 생성 된 레벨을 재생할 수있는 기능을 추가하고 싶습니다. 불행히도 다른 오디오 파일을 비교할 때 다음과 같은 문제가 발생했습니다.
보시다시피, 진폭은 클립마다 크게 다르기 때문에 완성하기가 거의 불가능하거나 거의 불가능한 레벨을 만듭니다. 노래에서 데이터를 가져온 후이 “소리 강도”를 결정하는 방법을 찾고 싶습니다 . 또한 노래를 재생하지 않고이 데이터를 추출하는 방법이 있습니까?
답변
이를 수행하는 수동 방법은 AudioClip.GetData 를 사용 하여 샘플 데이터를 배열로 가져 오는 것입니다. 그런 다음 데이터를 반복하고 근 평균 제곱 을 찾아 오디오 클립의 “소리 크기”를 찾으십시오.
그런 다음 최대 값이 1.0f가되도록 전체 배열의 크기를 조정하고 AudioClip.SetData로 오디오 클립에 다시 쓸 수 있습니다. 이를 오디오 표준화 (normalizing audio )라고 하며 샘플의 최대 볼륨을 가장 크게 나타냅니다. 오디오 클립의 볼륨이 매우 낮지 만 피크가 매우 높은 경우에는이를 고려하지 않습니다. 이에 대한 고급 기술이 있습니다 (아래 참고).
Unity는 기본적으로 자동으로 정규화를 수행합니다. 따라서 가져 오기 설정을 터치하지 않은 경우이 작업은 자동으로 수행되므로 걱정할 필요가 없습니다. 오디오가 정규화되었다고 확신하지만 여전히 문제가있는 경우 동적 범위 압축 을 사용하여 오디오 를 압축 해야합니다 (참고 : 데이터 압축과는 매우 다른 것, 파일 크기 또는 메모리 사용과는 무관). 외부 소프트웨어로 귀하의 요구를 충족 시키십시오.