서론
사운드(뮤직, 효과음 등)와 관련된 Audio Source에 대해 낱낱이 알아보자.
Audio Source
오디오 소스(Audio Source)는 씬에서 오디오 클립(Audio Clip)을 재생한다. 이 클립은 오디오 리스너(Audio Listener) 또는 오디오 믹서(Audio Mixer)를 통해 재생 가능하다.
오디오 소스 생성(Creating Audio Sources)
오디오 소스는 할당된 Audio Clip 이 없으면 아무것도 하지 않는다. 클립은 재생될 실제 사운드 파일이다. 오디오 소스는 해당 클립을 재생/정지하거나, 기타오디오 프로퍼티를 수정하는 컨트롤러 역할을 한다.
새로운 오디오 소스를 생성하는 방법:
- Unity 프로젝트에 오디오 파일을 임포트한다. 이 파일이 오디오 클립이 된다.
- 메뉴바에 있는 'GameObject'->'Create Empty' 로 이동해야 힌다.
- 새로운 게임 오브젝트를 선택하고 'Component'->'Audio'->'Audio Source' 를 선택한다.
- 인스펙터에서 'Audio Source' 컴포넌트의 'Audio Clip' 프로퍼티를 찾고 클립을 할당한다.
오디오 소스(Audio Source)에 대해서
계층창에 우클릭 후 'Audio' > 'Audio Source'에서 아래와 같이 Audio Source를 만들 수 있다.
Audio Source의 프로포티는 다음과 같다. 중요하거나, 주의해야 할 부분만 Bold체로 설정했다.
- Audio Clip: 재생될 사운드 클립에 대한 레퍼런스이다.
- Output: 기본적으로 클립은 씬의 오디오 리스너에 직접 출력된다. 이 프로퍼티를 사용하면 클립을 오디오 믹서에 출력한다.
- Mute: 옵션을 활성화하면 사운드가 음소거된 상태로 재생이 된다.
- Bypass Effects: 오디오 소스에 적용된 필터 효과를 즉시 “바이패스”한다. 모든 효과를 쉽게 켜고 끌 수 있는 옵션이다.
- Bypass Listener Effects: 모든 리스너 효과를 즉시 켜거나 끄는 옵션이다.
- Bypass Reverb Zones: 모든 리버브 존을 즉시 켜거나 끄는 옵션이다.
- Play On Awake: 옵션을 활성화하면 씬이 실행되는 시점에 사운드 재생이 시작된다. 이 옵션을 비활성화하면 스크립팅에서 Play() 명령을 사용하여 사운드 재생을 시작해야 한다.
- Loop: 옵션을 활성화하면 재생이 끝날 때 Audio Clip 루프가 생성됩니다.
- Priority: 씬 안에 공존하는 모든 오디오 소스 중 현재 오디오 소스의 우선 순위를 결정한다(우선 순위: 0 = 최우선 순위, 256 = 최하 순위, 디폴트값 = 128). 순위가 잘못 바뀌는 경우를 막기 위해 음악 트랙은 0으로 설정해야 한다.
- Volume: Audio Listener로부터 1월드 유닛(1미터) 거리에서 소리가 얼마나 크게 들리는지를 정의한다.
- Pitch: 음악의 빠르기 (-는 뒤로 재생 1보다 클경우는 앞으로재생, 1이 기본값)
- Stereo Pan: 2D 사운드의 스테레오 필드 포지션을 설정한다.
- Spatial Blend: 3D 엔진이 오디오 소스에 미치는 효과의 정도를 설정한다.
- Reverb Zone Mix: 리버브 존으로 보내지는 출력 신호의 양을 설정한다. 이 양은 0–1 범위에서는 선형적이며, 1–1.1 범위에서는 10dB 증폭이 가능하여 근거리 필드나 원거리 사운드 효과를 내는 데 유용하다.
- 3D Sound Settings: 설정은 공간 블렌드 파라미터에 비례해 적용된다.
- Doppler Level: 현재 오디오 소스에 적용될 도플러 이펙트의 정도를 결정한다(0으로 설정하면 아무 효과도 적용되지 않음).
- Spread: 스피커 공백에서 3D 스테레오 사운드 또는 멀티채널 사운드로의 스프레드 각도를 설정한다.
- Min Distance: 사운드는 최소거리 내에서 가능한 한 최대 음량을 유지하고, 최소거리를 벗어나면 감쇠됩니다. 3d 세계에서 사운드를 ‘크게’ 만들기 위해서는 해당 사운드의 최소거리를 증가시키고, 사운드를 ‘작게’ 하려면 최소거리를 감소시키면 된다.
- Max Distance: 사운드 감쇠가 더 이상 일어나지 않는 거리를 의미합니다. 이 포인트를 넘어서면 사운드는 리스너로부터 최대거리 유닛 위치의 영역으로 유지되며 더 이상 감쇠되지 않는다.
- Rolloff Mode: 사운드가 페이드되는 속도를 나타낸다. 값이 클수록 리스너 위치가 더 가까워져야 사운드가 들린다(그래프에 의해 결정된다).
- Logarithmic Rolloff: 오디오 소스에 가까우면 사운드가 크지만 오브젝트로부터 멀어지면 상당히 빠른 속도로 사운드가 작아진다.
- Linear Rolloff: 오디오 소스로부터 멀어질수록 사운드가 점점 작아지게 된다.
- Custom Rolloff: 오디오 소스로부터의 사운드는 롤오프 그래프에 설정한 대로 작동한다.
Rolloff Mode들의 거리 함수(Distance Functions)에 대한 설명이다.
- Volume: 거리에 대한 진폭(0.0 - 1.0)을 나타낸다.
- Spatial Blend 2D(오리지널 채널 매핑)에서 3D(거리와 방향에 따라 감쇠되거나 모노로 다운믹스된 모든 채널).
- Spreed: 거리에 대한 각도(0.0–360.0°)를 의미한다.
- Reverb Zone Mix: 리버브 존으로 보내지는 시그널의 양을 나타낸다. 볼륨 프로퍼티 및 거리/방향 감쇠가 시그널에 우선 적용되며, 따라서 직접 시그널과 리버브 된 시그널 모두에 영향을 미친다. 시그널과 리버브 된 시그널 모두에 영향을 미친다.
안쪽 경계는 Min Distance, 바깥쪽 경계는 Max Distancec이다.
Audio Clip
Unity에서 임포트할 수 있는 오디오 파일 포맷은 '.aif', '.wav', '.mp3', 및 '.ogg' 이다. Unity는 '.xm', '.mod', '.it', 및 '.s3m' 형식의 트래커 모듈도 임포트할 수 있다. (오디오는 어느 파일이 들어와도 '.wav'로 다시 압축하기에 데이터 손실을 줄이기 위해 '.wav'를 사용하는 것을 추천한다.)
포맷 | 확장명 |
MPEG layer 3 | .mp3 |
Ogg Vorbis | .ogg |
Microsoft Wave | .wav |
Audio Interchange File Format | .aiff / .aif |
Ultimate Soundtracker module | .mod |
Impulse Tracker module | .it |
Scream Tracker module | .s3m |
FastTracker 2 module | .xm |
옵션
- Force To Mono: 활성화하면 패킹 전에 멀티 채널 오디오가 모노 트랙으로 믹스다운된다.
- Normalize: 활성화하면 “Force To Mono” 믹스다운 과정에서 오디오가 정규화된다.
- Load In Background: 활성화하면 오디오 클립이 메인 스레드에서 정지됨 없이 백그라운드(BGM)에서 로딩된다. 로딩 상태는 AudioClip.loadState 프로퍼티를 통해 쿼리가 가능한다.
- Ambisonic: 앰비소닉 오디오 소스는 리스너의 방향에 따라 회전할 수 있는 사운드필드를 나타내는 포맷으로 오디오를 저장한다.
Force To Mono 메모리를 많이 사용하기에 모바일에서는 None으로 설정하자.
프로포티
- Load Type: Unity가 런타임 시 오디오 에셋을 로딩할 때 사용하는 방법.
- Decompress On Load: 오디오 파일은 로딩 후 바로 압축 해제된다.(짧은 사운드)
- Compressed In Memory: 메모리에 사운드의 압축 상태를 유지하고 재생 시 압축 해제한다.(중간 사운드)
- Streaming: 사운드를 즉시 디코딩한다.(긴 사운드, BGM)
- Preload Audio Data: 활성화하면 씬이 로딩될 때 오디오 클립이 미리 로딩된다.
- Compression Format: 런타임 시 사운드에 사용되는 특정 포맷.(최근 유니티는 FMOD기술로 웬만해선 Voribsd을 디폴트로 사용해도 무방하다. 짧은 사운드는 ADPCM을 추천)
- PCM: 품질은 높아지는 대신에 파일 크기가 커지며 매우 짧은 음향 효과에 가장 적합하다.
- ADPCM: 발소리나, 충격음, 무기 소리와 같이 상당히 많은 노이즈를 포함하고 대용량으로 재생되어야 하는 사운드에 적합하다. 압축비는 PCM보다 3.5배 작지만 CPU사용은 MP3/Vorbis 형식보다 작으며 앞서 언급한 사운드 카테고리에는 최적의 선택이다.
- Vorbis/MP3: 압축하면 파일 크기는 작아지지만 PCM 오디오에 비해 품질이 낮아진다. 압축량은 퀄리티 슬라이더를 통해 조절 가능하다. 이 형식은 중간 길이 음향 효과 및 음악에 최적이다.
- Quality: Compressed 클립에 적용되는 압축량을 정해준다. PCM/ADPCM/HEVAG 형식에는 적용되지 않는다. 파일 크기에 대한 통계는 인스펙터에서 확인할 수 있다.
- Sample Rate Setting: PCM 및 ADPCM 압축 형식은 수동 샘플 레이트 리덕션 또는 자동 최적화 리덕션을 허용한다.
- Preserve Sample Rate: 샘플 레이트를 수정되지 않은 상태로 유지한다(디폴트값).
- Optimize Sample Rate: 샘플 레이트를 분석된 하이 프리퀀시 콘텐츠에 따라 최적화한다.
- Override Sample Rate: 샘플 레이트의 수동 오버라이드를 허용하여 실질적으로 주파수 성분을 제거할 때 사용될 수 있다.
아래 접은 글은 위에 대한 추가적인 설명이다.
Load Type
- Decompress On Load : 즉시 압축 해제되면서 발생하는 퍼포먼스 오버헤드를 피하려면 작은 압축 사운드에는 이 옵션을 사용해야 한다. 로딩 시 Vorbis로 인코딩된 사운드의 압축 해제는 압축 상태를 유지하는 것보다 열 배 이상의 메모리를 사용하므로(ADPCM 인코딩의 경우, 3.5배), 큰 파일에는 사용하지 말자.
- Compressed In Memory: 이 옵션은 약간의 퍼포먼스 오버헤드가 발생하므로(특히 Ogg/Vorbis 압축 파일), 로딩 시 압축 해제가 메모리를 대량으로 사용하는 큰 파일에만 사용해야 한다. 압축 해제는 믹서 스레드에서 실행되며 프로파일러 창의 오디오 창 내 “DSP CPU” 섹션에서 모니터링할 수 있다.
- Streaming: 사운드를 즉시 디코딩한다. 이 메서드는 디스크에서 증가식으로 읽어와 즉시 디코딩한 압축 데이터를 버퍼에 넣어 메모리 사용을 최소화한다. 압축해제가 개별 스트리밍 스레드에서 실행되며 이 스레드의 CPU 사용은 프로파일러 창의 오디오 창 내 “스트리밍 CPU(Streaming CPU)” 섹션에서 모니터링할 수 있다. 참고: 오디오 데이터가 로드되지 않은 경우에도 스트리밍 클립에는 약 200KB의 오버로드가 있다.
Preload Audio Data: 씬이 재생을 시작할 때 모든 오디오클립이 로딩을 마치는 표준 Unity 동작을 나타내기 위해 디폴트값은 켜져 있다. 이 플래그가 설정되어 있지 않다면 오디오 데이터는 첫번째 AudioSource.Play()/AudioSource.PlayOneShot()에 로딩되거나 또는 AudioSource.LoadAudioData()를 통해 로딩될 수 있고 AudioSource.UnloadAudioData()를 통해 언로딩된다.
Compression Format: 최근 선택했던 빌드 타겟에 따라 사용 가능한 옵션이 달라진다는 점을 유념해야 한다.
Quality: 값을 튜닝하는 좋은 방법은 슬라이더를 드래그하여 재생을 “충분히 좋음” 상태로 설정하되 배포 요구 사항에 적합할 만큼 작은 크기로 유지해야 한다. 오리지널 크기는 오리지널 파일과 관련되어 있다는 점에 주의해야 한다. MP3 파일이거나 압축형식이 PCM(즉, 비압축)으로 설정되어 있다면 파일이 현재 비압축으로 저장되었고 소스 MP3 파일보다 더 많은 공간을 차지하기 때문에 결과 비율은 100%보다 크다.
플랫폼 별로 오버라이드 가능 이는 플랫폼 별로 최적화를 위한 일이기에 직접 플랫폼 오버라이드하는 것을 추천한다.
오디오 리스너(Audio Listener)
오디오 리스너(Audio Listener) 는 씬에서 주어진 오디오 소스로부터의 입력을 수신하여 컴퓨터 스피커를 통해 사운드를 재생한다. 대부분의 응용 프로그램에서 메인 카메라(Main Camera)에 리스너를 추가하는 것이 가장 일반적이다. 오디오 리스너가 리버브 존의 경계 내에 있는 경우 씬에 있는 모든 가청 사운드에 잔향이 적용된다. 또한 오디오 효과도 리스너에 적용 가능하며 씬의 모든 가청 사운드에 적용된다. 오디오 리스너에는 프로퍼티가 없다. 기본값으로 항상 메인 카메라에 추가되어 있다.
세부 정보
오디오 리스너가 씬에서 GameObject 에 추가되면 리스너에 충분히 가까운 음원은 컴퓨터 스피커로 출력된다. 각 씬에서 제대로 작동할 수 있는 오디오 리스너는 한 개뿐이다. 소스가 3D인 경우, 리스너는 3D 월드에서 사운드의 위치와 속도, 방향을 에뮬레이트한다(오디오 소스에서 감쇠 및 3D/2D 동작을 미세 조정할 수 있다). 2D는 3D 프로세싱을 인식하지 않는다.
리버브 존(Reverb Zones)
리버브 존은 Audio Clip을 취하여 오디오 리스너가 리버브 존 내 어디에 위지해 있는지에 따라 오디오 클립을 왜곡한다. 동굴에 들어가는 것과 같이 앰비언트 효과가 없는 지점에서 있는 지점으로 서서히 이동하려는 경우에 사용한다.
프로퍼티
- Min Distance: 기즈모의 내부 원의 반지름을 나타내며 점진적인 리버브 효과가 위치한 존과 풀 리버브 존을 결정한다.
- Max Distance: 기즈모의 외부 원의 반지름을 나타내며 효과가 없는 존과 리버브가 서서히 적용되는 존을 결정한다.
- Reverb Preset: 리버브 존이 사용할 리버브 효과를 결정한다.
리시브 효과는 다음과 같으며 하위 값들을 자동으로 조정해준다.
Project Settings
오디오 설정(메인 메뉴: Edit > Project Settings에서 Audio 카테고리 선택)을 통해 씬에서 재생되는 모든 사운드의 최대 볼륨을 미세 조정할 수 있다.
프로퍼티
- Global Volume: 재생 시 모든 사운드의 볼륨을 설정한다.
- Volume Rolloff Scale: 로그의 롤오프 기반 소스에 대한 글로벌 감쇠 롤오프 인자를 설정한다. 값이 높을수록 볼륨이 더 빨리 감쇠한다. 반대로 값이 낮을수록 감쇠 속도가 느려진다.(값 1은 “실제 세계”를 시뮬레이션한다.)
- Doppler Factor: 도플러 효과의 소리 크기를 설정한다. 0으로 설정하면 비활성화되고, 1로 설정하면 빠르게 움직이는 오브젝트의 소리를 들을 수 있다.(팁: Doppler Factor 를 1로 설정한 후 Speed of Sound 와 Doppler Factor 를 둘 다 원하는 대로 미세 조정할 수 있다.)
- Default Speaker Mode: 프로젝트에 대한 기본 스피커 모드를 설정한다. 기본값은 2이며 스테레오 스피커를 나타낸다. 전체 모드 리스트는 AudioSpeakerMode API 레퍼런스를 참조하십시오.(또한 스크립팅을 통해 런타임 시점에 스피커 모드를 변경할 수도 있다.)
- System Sample Rate: 출력 샘플 속도를 설정한다. 0으로 설정하면 Unity가 시스템의 샘플 속도를 사용한다.(iOS 또는 Android 등과 같은 특정 플랫폼은 샘플 속도 변경을 허용하므로 이 값은 참조용으로만 사용.)
- DSP Buffer Size: 지연 시간 또는 성능에 대해 최적화하기 위한 DSP 버퍼의 크기를 설정한다.
- Default: 기본 버퍼 크기이다.
- Best Latency: 성능을 높이는 것보다 지연 시간을 줄이는 것을 우선시한다.
- Good Latency: 지연 시간과 성능 간에 균형을 맞춘다.
- Best Performance: 지연 시간을 줄이는 것보다 성능을 높이는 것을 우선시한다.
- Max Virtual Voices: 오디오 시스템에서 관리하는 가상 음성의 수를 설정한다. 이 값은 게임에서 재생되는 음성의 수보다 항상 커야 한다. 그렇지 않으면 Unity가 콘솔에 경고를 표시한다.
- Max Real Voices: 동시에 재생되는 실제 음성 수를 설정한다. 각 프레임마다 가장 큰 음성이 선택된다.
- Spatializer Plugin: 3D 소스의 공간 필터링을 수행할 때 사용할 네이티브 오디오 플러그인을 선택한다.
- Ambisonic Decoder Plugin: 소스의 앰비소닉-바이노럴(ambisonic-to-binaural) 필터링을 수행할 때 사용할 네이티브 오디오 플러그인을 선택한다.
- Disable Unity Audio: 활성화하면 스탠드얼론 빌드에서 오디오 시스템이 비활성화된다. 에디터에서 오디오 시스템은 여전히 켜져 있고 오디오 클립 미리보기를 지원하지만, Unity는 스탠드얼론 빌드의 동작을 시뮬레이션하기 위해 AudioSource.Play 및 AudioSource.playOnAwake에 대한 호출을 처리하지 않는다.
- Virtualize Effect: 활성화하면 CPU 사용을 줄이기 위해 선택한 AudioSource의 효과와 스페이셜라이저를 동적으로 해제한다.
스크립트
오디오 관련 변수 및 함수들은 UnityEngine으로 불러와 접근할 수 있으며, 보통 GameManager 혹은 SoundManager를 통해 관리된다. 또한, 여러 개를 관리하기 위해 Pooling(풀링) 개념을 알고 있어야 한다.
주섬주섬
이 블로그 페이지는 오디오 공부하기 이전 세팅에 대해 자세히 알아보는 페이지이다. 주요한 부분은 Bold체로 표시했다.
참고
유니티 공식 강좌이다.(오디오관련하여 42분 10초 부터 들으면 도움이 될 것이다.)
'Unity > 사운드' 카테고리의 다른 글
PlayerPrefs으로 옵션 값 저장하기 (1) | 2023.08.21 |
---|---|
슬라이드 바로 사운드 조절하기 (0) | 2023.06.01 |
댓글