UDN
Search public documentation:

AudioSystemKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 오디오 홈 > 오디오 시스템

오디오 시스템


문서 변경내역: John Scott 작성. 홍성진 번역.

개요


언리얼 엔진 3의 오디오 시스템은 기본 오디오 클래스인 UAudioDevice로 이루어져 있습니다. 기본 구현에서는 UAudioComponent 오브젝트의 추가 및 제거 등의 일부 기본 논리를 다룹니다. UAudioComponent 오브젝트는 UAudioDevice에서 재생할 수 있는 콘텐츠입니다. UAudioComponent 오브젝트는 실제 오디오 데이터를 포함하는 USoundNode 오브젝트를 참조하는 USoundCue 오브젝트를 포함합니다 (예: USoundNodeWave는 웨이브 오디오 데이터 포함).

언리얼 엔진 3 오디오 코드의 플랫폼 전용 부분은 오디오의 기초 클래스인 UAudioDevice로부터 파생된 오디오 장치 클래스에 있습니다. 현재는 UALAudioDevice(OpenAL PC), UXeAudioDevice (XBox360) 및 UPS3AudioDevice (PlayStation3) 등 3 가지의 플랫폼 전용 오디오 장치가 있습니다.

모든 장치는 선택적인 소스별 로우 패스 필터, 버스별 반향 효과, 버스별 EQ 필터 및 (4.0, 5.1, 6.1, 7.1 등) 다중채널 사운드를 (하드웨어에서 허용되는 경우) 지원합니다. 이것은 모든 플랫폼 사운드가 가능한 서로 근접하게 하기 위함입니다.

기본 오디오 클래스의 구현은 Engine\Src\UnAudio.cpp 에, 선언은 Engine\Inc\UnAudio.h 에 있습니다.
기본 오디오 컴포넌트의 구현은 Engine\Src\UnAudio.cpp 에, 선언은 Engine\Inc\UnActorComponent.h 에 있습니다.

일반 개념


오디오 장치

앞서 설명한 것처럼 오디오 시스템의 주 인터페이스입니다. 로드된 애셋 목록을 유지 관리하고 청취자를 처리하며 사운드 소스를 관리합니다.

  • Init - 하드웨어를 초기화하고 채널을 할당하며 오디오 청취에 필요한 기타 작업을 수행합니다.
  • TearDown - 하드웨어를 종료하고 모든 리소스를 시스템에 반환합니다.
  • Update - 청취자의 위치, 방향 및 속도를 업데이트합니다.
  • Exec - 콘솔에 입력된 디버그 명령을 처리합니다.

UAudioDevice::Update 는 사운드 시스템의 기본 "Tick" 함수입니다. 모든 활성 AudioComponents(엔진에서 재생하려는 사운드)를 반복하고 우선 순위에 따라 정렬한 다음 사운드 소스를 업데이트하거나 새 사운드를 시작합니다. 또한 모든 정리작업과 일시 정지를 처리합니다.

사운드 소스

Sound Sources(Voices 라고도 하)는 최종 출력에 믹스될 사운드의 단일 소스를 의미합니다. 하드웨어 제약이나 구성 파일에 따라 이 수가 제한됩니다. 각 소스에는 위치, 볼륨, 피치 및 속도가 있습니다. 모든 플랫폼에서 MaxChannels 의 기본 수치는 32 이며 내부적으로는 1-64 사이로 제한됩니다. MaxChannels 를 0 으로 설정하면 신속하게 모든 오디오 시스템 코드를 우회할 수 있습니다.

  • Init - 재생할 사운드 애셋을 찾고 하드웨어에 제출합니다.
  • Update - 엔진으로부터 하드웨어로 Volume, Pitch, Location 및 Velocity를 업데이트합니다.
  • Play - 사운드 소스의 재생을 시작합니다.
  • Stop - 사운드 재생을 중지합니다.
  • Pause - 이 소스에 대한 사운드 재생을 일시 중지합니다.
  • IsFinished - 사운드 종료, 필요한 통지 보내기 및 대기중인 버퍼의 이중 버퍼링을 처리합니다.

사운드 버퍼

사운드 버퍼는 웨이브 데이터의 컨테이너입니다. 콘솔 명령어 "ListSounds" 는 현재 로드된 모든 웨이브 및 그 형식을 표시합니다. 메모리가 허용되는 한 이 수에는 제한이 없습니다. 이는 보통 두 가지 기본 형식으로 나타납니다. 즉 사운드 시스템이 완전히 모든 데이터를 포함하고 엔진이 최소한의 제어를 가질 경우는 상주이며, 엔진이 사운드가 루프되는 시점이나 실시간으로 압축 해제되는 시점을 알아야 할 경우에는 대기로 처리됩니다 (예: PC 에서의 ogg vorbis 압축 해제).

  • Init - 사운드 리소스를 찾아 필요할 때 로드합니다.

UAudioComponent

AudioComponent는 엔진이 오디오 장치와 통신하는 방식입니다. 엔진이 사운드를 재생하려 할 때 UAudioDevice::CreateComponent 를 호출하고 반환 구조의 속성을 설정합니다. 그러면 이 구조는 향후 관리를 위해 액터의 구성 요소 목록에 첨부됩니다. 위치가 UAudioDevice::CreateComponent 함수에 전달될 경우 사운드가 짧으면 간단한 거리 컬링 확인이 있으며 구성 요소가 생성되지 않습니다. UAudioDevice::CreateComponent 로부터 NULL 반환을 확인하는 것이 항상 중요합니다. 이것이 -nosound 를 실행할 때 오디오를 무효화하기 때문입니다.

UAudioComponent 에서 중요한 필드는

class USoundCue* SoundCue; // 콘트롤로 재생할 사운드
BITFIELD bUseOwnerLocation:1; // 이 사운드를 부착된 액터의 위치에 공간화
BITFIELD bAllowSpatialization:1; // 이 사운드를 3d 공간에 공간화
FVector Location; // 첨부되지 않은 경우 공간화에 사용할 위치
FVector ComponentLocation; // 첨부된 경우 공간화에 사용할 위치

사운드 클래스

각 사운드 큐는 Content\Sounds\SoundClassesAndModes.upk 패키지에 정의된 사운드 클래스에 지정될 수 있습니다. 이러한 패키지는 FSoundClassProperties 클래스를 채우는 사운드 큐의 클래스들에 대한 속성 및 계층을 지정합니다. 사운드 클래스는 부모의 일부 속성이 모든 자식 노드에 전파된다는 점에서 본래 계층적이라고 할 수 있습니다. 루트 사운드 클래스는 "Master" 라고 하며 이는 필수적인 클래스입니다.

이러한 계층은 설정될 수 있으며 속성은 사운드 클래스 편집기에서 변경될 수 있습니다. 이것은 사운드 큐 편집기와 매우 유사한 방법으로 작동합니다.

이러한 그룹들은 볼륨 및/또는 피치의 더킹을 적용하는데 사용됩니다. UTGame 은 이것을 설명하는 "DM-SoundMode" 라는 테스트 맵을 가지고 있습니다. 이것이 어떻게 작동하는지 명령줄에서 'lowpass', 'bandpass', 'highpass', 'quick', 'slow' SetSoundMode 를 호출하여 살펴보십시오. 여기서 주의할 점은 사운드 그룹 속성은 계층적으로 작동하지 않는다는 것입니다.

반향 효과

반향(Reverb) 효과는 대상 플랫폼이 필요에 따라 사용할 수 있는 매개 변수를 사용하여 플랫폼 독립적 방식으로 구현됩니다. 이 매개 변수는 FAudioEffectsManager::ReverbPresets 테이블에 있는 코드에서 정의되어 있습니다. UnPlayer.cpp 에서 코드는 플레이어가 위치한 곳에 있는 반향 볼륨의 반향 설정 값을 구하여 보간과 플랫폼 전용 레이어로의 전달을 위해 FAudioEffectsManager::SetReverbSettings 으로 전달됩니다. 매개 변수가 보간되기 때문에 중간에 멈추지는 반향은 없습니다. 반향 볼륨은 빌더 브러쉬를 마우스 오른쪽 버튼으로 클릭한 후 "Add Volume" --> "Reverb Volume" 을 차례로 선택하여 생성될 수 있습니다. FAudioEffectsManager 는 기본 클래스로 플랫폼 전용 인터페이스가 이 클래스에서 파생됩니다.

AmbientZone 효과

반향 볼륨은 이제 'AmbientZone' 설정을 통합하게 되었는데, 이 설정은 환경음(ambient sound)의 가려짐(occlusion) 효과를 모방하는 데 사용됩니다. 볼륨 및/또는 로우 패스 필터 효과는 이들이 내부에 있을 때 외부에, 외부에 있을 때 내부에 적용될 수 있습니다. 예를 들면, 야외의 환경음으로써 레벨 전체를 커버하는 아주 커다란 바람소리 효과를 넣을 수 있습니다. 그러나 플레이어가 실내로 이동하면 그 소리는 점점 작아집니다. 그리고 플레이어가 점점 뚜렷하게 보임에 따라 같은 볼륨의 음향이 재생됩니다.

상세 정보는 Using Ambient Zones KR 페이지를 참고하시기 바랍니다.

DistanceModel 감쇠

감쇠는 플레이어가 멀어짐에 따라 소리가 차츰 희미해지는 기능입니다. 희미해지는 비율은 DistanceModel 속성에 의해 정의됩니다.

자세한 정보는 DistanceModel 감쇠 페이지를 참고하십시오.

로우 패스 필터

현재는 감쇠 사운드 노드를 통해 구현됩니다. 유효화를 위한 플래그와 사용할 최소 및 최대 거리가 있습니다. 이는 사실상 하이 셸프 필터로 구현되며 최소 거리에서 아무 것도 아닌 것으로부터 최대 거리에서의 고주파가 없는 구성 요소로 보간됩니다.

사운드 모드

사운드 모드는 사운드 클래스 집합에 수시로 변경을 적용합니다. 사운드 그룹은 Ambient, Weapons 등과 같은 사운드 클래스의 과거 이름입니다(패키지 그룹과의 충돌에 따른 변경).

원하는 사운드 수정을 통해 사운드 클래스 효과의 배열을 설정합니다. 예를 들어 영화의 대화에서는 대화 시에는 볼륨을 높이고 효과를 줄 때는 볼륨을 낮춥니다. (이는 계층적으로 적용되지 않음). 사운드 모드의 설정은 초기 지연 후 (페이드인 시간에) 모드를 페이드인하는 것 으로 시작해서, 한동안 지속한 다음 (페이드백 시간에) 기본값으로 페이드백 합니다. 지속 기간이 0 보다 작으면 다른 모드가 설정될 때까지 모드가 지속됩니다. 기본 사운드 모드 항목만 갖는 soundmodes 라는 패키지가 있을 것입니다. 이 패키지에 새 사운드 모드를 추가합니다. 새 사운드 모드는 이상적으로 게임플레이 스크립트를 통해 트리거됩니다.

백문이 불여일견에 해당하는 경우는 UDKGame\Content\Maps\TestMaps\SoundMode.udk 맵입니다. 이를 실행하여 명령줄에 'setsoundmode quick', 'setsoundmode slow' 또는 'setsoundmode loud' 를 입력해 봅니다. 또한 PIE 에서 실행하여 여러분 자신만의 것을 신속하게 편집 또는 생성할 수 있습니다.

아래에서 소개하는 볼륨 더킹은 이러한 경우의 사용 예입니다.

볼륨 더킹

볼륨 더킹은 보통 들려야 할 필요가 있는 한 개의 사운드 그룹을 제외한 모든 다른 사운드 그룹의 볼륨을 줄이는 데 사용됩니다. 가장 일반적인 것은 대화이지만 영화에 국한되지는 않습니다. 이는 대개 다음과 같이 제어됩니다:

  • 더킹을 야기한 사운드 그룹을 파악(대화)합니다.
  • 이 그룹으로부터의 사운드가 트리거되면 x 시간에 다른 그룹은 볼륨을 원하는 양으로(페이드) 줄입니다(FadeStartTime = 0.3 초).
  • 다른 그룹이 볼륨을 줄이는 크기(FadeAmount = -0.4).
  • 더킹 그룹으로부터의 사운드가 멈추면 다른 그룹은 x 시간에 볼륨을 다시 정상 볼륨으로(페이드) 높입니다(FadeStopTime = 0.2 초).
  • 영향을 받지 않는 Exceptions 라는 사운드 그룹이나 더킹 프로세스(예: 음악)에 대한 사운드 그룹 예외가 필요할 수도 있습니다.

피치, EQ 및 기타 필터를 추가하여 위의 시스템을 Volume 으로 제한하면 더욱 더 제어가 가능합니다 (Mode 시스템).

예를 들어 영화의 시끄러운 부분 (예: 전투 중)에서 한 사람이 정상 볼륨으로 다른 사람에게 이야기하는 장면에서는 모든 다른 사운드가 더킹되었기 때문에 그 사람의 말을 들을 수 있습니다. 모든 전투/주변/효과 사운드는 더 조용하게 재생되고 대화는 더 크게 재생됩니다.

게임의 경우 주변 사운드 그룹(및 기타)의 볼륨을 더킹 할 수 있습니다.

사운드 임포트


현재 엔진은 압축되지 않은 리틀 엔디안 16 비트 웨이브 파일의 임포트를 모든 표본 속도로 지원합니다(권장 표본 속도는 44100Hz 또는 22050Hz 임).

사양  
형식 .Wav
비트 속도 16
스피커 채널 모노, 스테레오, 2.1, 4.1, 5.1 6.1, 7.1

일반 사운드 팩토리로 임포트하면 사운드 큐에서 재생을 위해 참조할 수 있는 단순 사운드 노드 웨이브가 생성됩니다. 이러한 사운드는 모노이거나 스테레오일 수 있습니다. 특별한 명명 규칙을 통해 임포트하면 다중채널(예: 5.1) 사운드가 가능합니다. 모든 플랫폼이 효율적으로 재생할 수 있는 것은 아니지만, 최대 8 개 채널 사운드를 모든 플랫폼에서 압축할 수 있습니다. 패키지 저장 과정은 플랫폼의 원시 형식으로 변환하기 위해 필요한 모든 작업을 수행합니다. 엄격한 스피커 매핑은 없으므로 채널 수에 의해 어떤 스피커에서 어떤 채널이 재생될 것인지가 추정됩니다 (아래 표 참조).

  확장자 4.0 5.1 6.1 7.1  
FrontLeft _fl * * * *  
FrontRight _fr * * * *  
FrontCenter _fc   * * *  
LowFrequency _lf   * * *  
SideLeft _sl * * * *  
SideRight _sr * * * *  
BackLeft _bl     * * BackRight 채널이 없는 경우 이것이 BackCenter 채널임
BackRight _br       *  

압축 설정을 조정하여 여러 플랫폼에서 비슷한 품질을 유지할 수 있습니다. 많은 사운드를 테스트한 결과, XMA 품질 40 이 ogg vorbis 품질 0.15 에 해당한다고 결론지었습니다.

시각적 편집 도구


사운드큐 에디터

오디오 파일들을 sound waves 로서 임포트하여 시각적인 사운드큐 에디터 에서 audio nodes 라는 변경자를 적용할 수 있습니다.

사운드 품질 미리보기

Generic Browser 에서 SoundNodeWave 애셋을 오른 클릭하여 "Sound Quality Previewer (사운드 품질 미리보기)" 를 선택하면, 엔진이 사운드를 압축 설정 5, 10, 15, 20, 15, 30, 35, 40, 50 및 60 으로 압축합니다. 그 다음 특정 품질 설정을 클릭하여 그것이 16 비트 PCM 으로 다시 재확장된 후의 사운드를 들어볼 수 있습니다. 이를 통해 최고의 충실도와 메모리 설정 중의 하나를 선택할 수 있습니다. OK 를 클릭하면 현재 선택한 설정이 웨이브에 적용됩니다.

멀티채널 임포트/익스포트

Generic Browser 에서...

임포트 하려면:

  • 메뉴에서 "Import" 를 선택합니다.
  • "Surround_fl.wav", "Surround_fr.wav", "Surround_sl.wav", "Surround_sr.wav" 파일을 선택합니다.
  • 이 파일들을 저장할 패키지를 선택하고 "OK to all" 을 클릭합니다.

그러면 "Surround" 라고 하는 4 채널 애셋이 생성됩니다.

익스포트 하려면:

  • 메뉴에서 "Export" 를 선택합니다.
  • 파일을 저장할 위치를 선택합니다.

그러면 스피커 확장자가 첨부된 원본 모노 파일이 저장됩니다.

전략


가장 시끄러운 잠재 볼륨에 대해서는 약간 더 많은 전체 대역폭을 적용할 수 있습니다. 예를 들어 볼륨이 1.0 인 스테레오 파일은 모노 파일보다 2배 시끄러우며, 마찬가지로 4 모노 파일은 4 배 시끄럽습니다. 그렇지만 결국은 전체적인 임계값에 도달할 것이고 출력이 잘리고 왜곡되기 시작합니다.

모든 주어진 사운드 큐에서 2.0 까지의 볼륨 설정은 오디오 파일의 인지되는 소리의 세기를 높이지만, 2.0 이상의 것은 높이지 않습니다. 단일 큐는 절대 왜곡되지 않지만, 여러 큐가 동시에 게임에서 재생될 때 과부하가 생길 가능성이 있으므로 최대 볼륨으로 모든 파일을 재생하는 것은 바람직하지 않습니다.

일관성있는 볼륨 체계나, 볼륨에 대한 최소한의 일반적인 지침을 정해두면 좋을 것입니다:

대화 ~1.4
음악 ~0.75
무기 ~1.1
주변음 ~0.5

또한 모든 오디오에 대해 플랫폼간의 일관성을 유지하기 위해 음악을 제외한 모든 부분에서 모노 애셋의 사용을 고려할 수도 있습니다.

사운드 메모리 사용의 최적화


콘텐츠를 제작할 때는 오디오의 충실도를 유지하기 위해 최저 샘플 속도를 사용하는 것이 좋습니다. 모든 플랫폼에서 모든 샘플 속도가 지원됩니다. 예를 들어 대화는 보통 22.1kHz 에서도 괜찮게 들리지만 일반적으로 높은 주파수에서 재생되는 효과(예: 총소리 등)는 더 높아야 합니다(예: 40.0kHz). 비슷한 내용이 품질 설정에도 적용될 수 있습니다.

이전에는 거리 크로스페이드 노드를 사용하여 원거리의 사운드에 로우 패스 필터를 적용했습니다(드라이 사운드가 같은 사운드의 로우 패스 필터 버전과 혼합됨). 그러나 이제 모든 플랫폼이 로우 패스 필터를 통한 감쇠를 지원하므로 사운드의 필터된 버전이 더 이상 필요하지 않습니다.

테스트 맵


UTGame 에는 오디오 시스템 기능을 확인하기 위한 여러 테스트 맵이 있습니다. -

  • DM-SoundLoop - 무한 루프 및 알림 사운드를 가진 루프를 테스트함.
  • DM-SoundReverb - 리버브 및 저주파 통과 필터를 가진 감쇄를 테스트함.
  • DM-SoundMultichannel - 5.1 재생을 테스트함.
  • DM-SoundMode - 사운드 모드를 테스트함. 사용할 수 있는 테스트 모드로는 loud, quiet, quick, slow, lowpass, bandpass, highpass 가 있음.
  • DM-SoundInterior - 주변 존 기능을 테스트함.

스트리밍


Unreal Engine 오디오 시스템은 임의의 오디오 콘텐츠의 동시 스트리밍을 지원하기 않고 오디오를 포함한 패키지의 스트리밍만을 지원합니다. 첫째 가능한 많은 대역폭을 텍스처 스트리밍에 할애하고자 했고, 둘째 Unreal Tournament 와 Gears of War 와 같은 빠른 속도의 액션 게임에서 지연이라는 것은 용납되지 않는 사항이고, 셋째 FaceFX 애니메이션을 동기화하는 것은 현 시점에서는 번거로운 일이기 때문에 이 접근 방법이 선호되었습니다. 이 접근 방법에 대한 대안으로 Gears 에서는 특별한 대화 시스템 이 만들어졌습니다.

디버그 명령어


  • ResetSoundState: 모든 디버그 명령어를 해제합니다.
  • TestLowPassFilter: 로우 패스 필터를 모든 소스에 적용합니다.
  • IsolateDryAudio: 반향되지 않는 사운드만 남기고 반향 사운드를 걸러 냅니다.
  • IsolateReverb: 반향 사운드만 남기고 드라이 사운드를 걸러 냅니다.
  • SetSoundMode x: 사운드 그룹 속성의 볼륨 및 피치 변경을 적용하고 UnAudioEffects.cpp 에 정의된 테이블의 EQ 필터를 적용합니다.
  • ListSounds, ListSoundDurations, ListAudioComponents: 현재 로드된 사운드의 상세 정보를 나열합니다.
  • ListWaves: 현재 재생 중인 사운드의 상세 정보를 나열합니다.

알려진 문제점


  • TTP 60174: 게임플레이 창이 이동하면 오디오가 다시 재생됨.
  • TTP 64605: -nosound 는 PIE 로 전파되지 않음.
  • TTP 80463: Editor 에서 AmbientSoundSimple 액터가 실시간 미리 보기를 다시 시작하지 않는 경우가 있습니다.
  • TTP 92710: Delay Node 를 사용하는 사운드 큐가 Generic Browser 나 Sound Cue Editor 에서 정확하게 미리보기 되지 않습니다.
  • TTP 120345: AmbientSoundSimpleToggleable 볼륨 페이드가 고장남.
  • TTP 122495: Looping Node 는 루프 노드가 아닌 것이 연결될 때 믹서 후에 배치되면 작동하지 않음.
  • TTP 122683: Distance Crossfade 노드는 SoundNodeWave 재생을 올바르지 않게 다시 트리거함.

플랫폼 전용