Sound Wave와 Sound Cue
UE5의 기본 오디오 에셋인 Sound Wave와 레거시 Sound Cue의 구조와 활용법
Sound Wave 에셋
UE5에서 오디오 데이터를 담는 가장 기본적인 에셋
Sound Wave(USoundWave)는 원본 오디오 파일을 임포트하면 생성되는 에셋입니다. PCM 데이터를 플랫폼별 압축 포맷으로 저장하며, 메타데이터(샘플레이트, 채널 수, 길이 등)를 포함합니다.
지원 임포트 포맷
| 포맷 | 확장자 | 권장 여부 | 비고 |
|---|---|---|---|
| WAV (PCM) | .wav | 권장 | 무손실, 최고 품질 소스. 16bit/48kHz 권장 |
| OGG Vorbis | .ogg | 가능 | 손실 압축이므로 WAV 임포트 후 엔진에서 압축 권장 |
| FLAC | .flac | 가능 | UE 5.1+ 지원, 무손실 압축 |
항상 WAV 16bit / 48kHz로 임포트하세요. 엔진이 플랫폼별로 최적의 압축을 자동 적용합니다. OGG로 임포트하면 "손실 → 재압축"이 되어 품질이 추가로 저하됩니다.
주요 프로퍼티
| 프로퍼티 | 타입 | 설명 |
|---|---|---|
| Sound Class | USoundClass* | 이 사운드가 속하는 Sound Class (믹싱 그룹) |
| Volume | float | 기본 볼륨 배수 (0.0 ~ 1.0, 기본값 1.0) |
| Pitch | float | 기본 피치 배수 (0.5 = 반음 아래, 2.0 = 한 옥타브 위) |
| Looping | bool | 루프 재생 여부 |
| Loading Behavior | ESoundWaveLoadingBehavior | ForceInline, RetainOnLoad, PrimeOnLoad, LoadOnDemand 중 선택 |
| Compression Quality | int32 | 압축 품질 (1~100, 기본 40). 플랫폼별 오버라이드 가능 |
// Blueprint에서 Sound Wave 직접 재생
// 1. Play Sound 2D (UI 사운드 등 비공간적 재생)
UGameplayStatics::PlaySound2D(
WorldContext,
SoundWave, // USoundWave* 에셋 참조
VolumeMultiplier,
PitchMultiplier
);
// 2. Play Sound at Location (3D 공간 재생)
UGameplayStatics::PlaySoundAtLocation(
WorldContext,
SoundWave,
Location, // FVector 위치
Rotation, // FRotator 방향
VolumeMultiplier,
PitchMultiplier,
StartTime,
AttenuationSettings, // 감쇠 설정
ConcurrencySettings // 동시 재생 설정
);
Sound Cue 에디터
노드 기반 오디오 파라미터 그래프 시스템
Sound Cue(USoundCue)는 Sound Wave를 입력으로 받아 볼륨 조절, 랜덤 재생, 피치 변조 등의 처리를 적용하는 노드 기반 그래프입니다. Sound Cue 에디터에서 시각적으로 오디오 로직을 구성할 수 있습니다.
Sound Cue는 UE5에서 여전히 사용 가능하지만, Epic Games는 새 프로젝트에서 MetaSounds 사용을 권장합니다. Sound Cue는 새로운 기능이 추가되지 않는 유지보수 모드입니다. Part 02에서 MetaSounds를 자세히 다룹니다.
주요 Sound Cue 노드
| 노드 | 기능 | 주요 파라미터 |
|---|---|---|
| Wave Player | Sound Wave 재생 | Sound Wave 에셋, Looping |
| Random | 여러 입력 중 랜덤 선택 | Weights, Random Without Replacement |
| Modulator | 볼륨/피치 범위 내 랜덤 변조 | Volume Min/Max, Pitch Min/Max |
| Attenuation | 거리 기반 볼륨 감쇠 오버라이드 | Attenuation Settings |
| Mixer | 여러 사운드를 동시 재생/믹싱 | Input Volumes |
| Concatenator | 사운드를 순차적으로 연결 재생 | Input Volumes |
| Branch | Bool 파라미터 기반 분기 | Bool Parameter Name |
| Crossfade by Param | 파라미터 값에 따른 크로스페이드 | Parameter Name, Fade Curve |
Sound Cue 노드 그래프 예시: 발자국 사운드
오디오 로딩과 스트리밍
Sound Wave의 메모리 관리와 스트리밍 전략
오디오 에셋은 크기에 따라 인라인 로딩과 스트리밍으로 나뉩니다. 짧은 효과음은 메모리에 상주시키고, 긴 배경음악이나 대사는 스트리밍으로 처리하는 것이 일반적입니다.
Loading Behavior 옵션
| 옵션 | 동작 | 적합한 용도 |
|---|---|---|
| ForceInline | 전체 PCM 데이터를 메모리에 로드 | 짧은 효과음 (1초 미만), 즉각 반응 필요 |
| RetainOnLoad | 레벨 로드 시 메모리에 유지 | 자주 재생되는 중간 길이 사운드 |
| PrimeOnLoad | 첫 청크만 프라이밍, 나머지 스트리밍 | 긴 사운드 중 빠른 시작 필요 |
| LoadOnDemand | 재생 요청 시 스트리밍 시작 | 배경음악, 긴 대사 |
프로젝트 설정의 Audio > Streaming Threshold를 초과하는 Sound Wave는 자동으로 스트리밍 모드로 전환됩니다. 기본값은 보통 200KB이며, 프로젝트 요구에 따라 조정할 수 있습니다.
// C++에서 Sound Wave의 로딩 동작 설정
USoundWave* SoundWave = LoadObject<USoundWave>(
nullptr, TEXT("/Game/Audio/SFX/Explosion_01")
);
if (SoundWave)
{
// 인라인 로딩으로 강제 설정 (짧은 효과음)
SoundWave->LoadingBehavior = ESoundWaveLoadingBehavior::ForceInline;
// 압축 품질 조정 (1~100)
SoundWave->CompressionQuality = 60;
// Sound Class 할당
SoundWave->SoundClassObject = SFXSoundClass;
}
실전 에셋 관리 가이드
프로젝트에서 오디오 에셋을 효과적으로 조직하는 방법
권장 폴더 구조
Content/
Audio/
SFX/
Footsteps/
FS_Concrete_01.uasset
FS_Concrete_02.uasset
SC_Footstep_Concrete.uasset // Sound Cue
MS_Footstep_Concrete.uasset // MetaSound Source
Weapons/
Impacts/
UI/
Music/
BGM_Exploration.uasset
BGM_Combat.uasset
Voice/
Dialogue/
Narration/
Ambient/
Forest/
City/
Mix/
SC_Master.uasset // Sound Class
SM_DefaultMix.uasset // Sound Mix
SA_DefaultAttenuation.uasset // Attenuation Settings
네이밍 컨벤션
| 접두사 | 에셋 타입 | 예시 |
|---|---|---|
| 없음 | Sound Wave | Explosion_Large_01 |
| SC_ | Sound Cue | SC_Explosion_Large |
| MS_ | MetaSound Source | MS_Explosion_Large |
| MP_ | MetaSound Patch | MP_RandomPitchShift |
| SA_ | Sound Attenuation | SA_DefaultFalloff |
| SCL_ | Sound Class | SCL_SFX |
| SM_ | Sound Mix | SM_CombatMix |
| SCR_ | Sound Concurrency | SCR_Footsteps |
1) 동일 카테고리의 Sound Wave는 3~5개 이상의 변형을 준비하여 반복 피로를 줄이세요. 2) Sound Wave 이름 끝에 숫자 접미사(_01, _02)를 붙여 변형을 구분하세요. 3) 긴 파일(5초 이상)은 반드시 스트리밍 설정을 확인하세요.
핵심 요약
- Sound Wave는 오디오 데이터를 담는 기본 에셋이며, WAV 16bit/48kHz 임포트를 권장한다
- Sound Cue는 노드 기반 오디오 그래프로, Random/Modulator 등을 통해 다양한 변형을 생성할 수 있다
- Sound Cue는 레거시 시스템으로, 새 프로젝트에서는 MetaSounds 사용을 권장한다
- 오디오 로딩은 ForceInline(짧은 효과음)과 LoadOnDemand(긴 음악)를 용도에 따라 선택한다
- 체계적인 폴더 구조와 네이밍 컨벤션은 프로젝트 규모가 커질수록 중요해진다
도전 과제
배운 내용을 직접 실습해보세요
WAV 파일을 임포트하고 Sound Wave 에셋의 프로퍼티를 설정하세요. Compression Quality, Streaming, Loading Behavior(Retain on Load, Prime on Load, Load on Demand) 설정에 따른 메모리 사용량 차이를 비교하세요.
Sound Cue 에디터에서 다음 노드들을 활용한 사운드를 제작하세요: Random (3개 이상 Wave), Modulator (Pitch/Volume 랜덤), Attenuation, Concatenator. 발자국 소리처럼 매번 다른 사운드가 재생되는 Cue를 완성하세요.
Sound Cue의 Sound Parameter를 C++에서 실시간으로 제어하는 시스템을 구현하세요. UAudioComponent::SetFloatParameter()로 게임플레이 상태(체력, 속도 등)에 따라 사운드를 동적으로 변화시키세요.