Audio & MetaSounds
The Unreal audio pipeline: a sound asset (USoundBase subclass) is activated either
as a fire-and-forget one-shot or via a UAudioComponent for ongoing control. 3D
sounds are positioned and faded using a USoundAttenuation asset. Mixing is handled
through sound classes, submixes, and concurrency objects. MetaSounds are the
modern, node-based, parameter-driven replacement for SoundCues.
When to use this skill
- Playing SFX (gunshots, footsteps, impacts), music, or UI sounds from C++.
- Attaching a looping or positional sound to an actor (engine hum, ambience).
- 3D spatialization and distance falloff configuration.
- Mixing: volume groups, ducking music under dialogue, limiting voice counts.
- Procedural/parameterized audio (footsteps that vary, adaptive music) via MetaSounds.
- Beat-synchronized audio events with the Quartz clock system.
- Building or modifying MetaSound graphs at runtime via the Builder API.
Sound asset types
| Asset |
Class |
Best for |
| Imported PCM clip |
USoundWave |
Raw audio; compose variation in a cue or MetaSound |
| Legacy node graph |
USoundCue |
Simple randomization / modulation over waves |
| Modern graph with typed I/O |
UMetaSoundSource |
Procedural, parameter-driven, DSP-composable audio |
| Abstract base |
USoundBase |
The type accepted by all play functions |
Prefer MetaSounds for new dynamic audio. SoundCues remain fully supported and are
simpler for lightweight randomization. USoundWave is never played directly in gameplay
code — it is the leaf asset referenced inside cues or MetaSound graphs.
Playing sounds from C++
#include "Kismet/GameplayStatics.h"
#include "Components/AudioComponent.h"
// 2D (UI, music) — fire-and-forget, no spatialization:
UGameplayStatics::PlaySound2D(this, UISound);
// 3D at a world position — fire-and-forget:
UGameplayStatics::PlaySoundAtLocation(this, ExplosionSound, HitLocation,
FRotator::ZeroRotator, 1.f, 1.f, 0.f, AttenuationAsset);
// 3D attached to a component — returns controllable UAudioComponent:
UAudioComponent* AC = UGameplayStatics::SpawnSoundAttached(
EngineLoop, VehicleMesh, NAME_None);
AC->FadeIn(0.5f);
// Stop or adjust later:
AC->SetFloatParameter(TEXT("RPM"), 4200.f); // MetaSound input
AC->FadeOut(0.3f, 0.f);
PlaySound* functions are fire-and-forget. Use SpawnSound* or a
UAudioComponent placed on the actor when you need to stop, fade, change
parameters, or react to OnAudioFinished. Store the component in a
UPROPERTY() member so GC cannot collect it while it is playing (see
ue-memory-and-gc).
Audio component placed on an actor
// Header — owned audio component, UPROPERTY keeps it alive:
UPROPERTY(VisibleAnywhere)
TObjectPtr<UAudioComponent> EngineAudio;
// Constructor:
EngineAudio = CreateDefaultSubobject<UAudioComponent>(TEXT("EngineAudio"));
EngineAudio->SetupAttachment(RootComponent);
EngineAudio->bAutoActivate = false; // start silent; Play() from BeginPlay
// BeginPlay:
EngineAudio->SetSound(EngineLoopAsset);
EngineAudio->Play();
See references/audiocomponent-and-playback.md
for the full UAudioComponent API, delegates, and playback state machine.
3D spatialization & attenuation
A USoundAttenuation asset bundles: distance model and falloff radius,
spatialization algorithm (panning or HRTF plugin), occlusion, reverb send,
air absorption, and priority attenuation. Assign it on the sound asset itself
(AttenuationSettings on USoundBase) or override it per-call by passing it
to PlaySoundAtLocation / SpawnSoundAttached.
A sound without an attenuation asset plays as flat 2D regardless of where the
audio component is in the world. The inner radius defines a constant-volume
zone; falloff begins at the inner radius and reaches zero at the falloff
distance.
See references/attenuation-and-spatialization.md
for the full FSoundAttenuationSettings fields, distance models, HRTF, and
Audio Gameplay Volumes.
Mixing: classes, submixes, concurrency
| Tool |
Purpose |
Sound Class (USoundClass) |
Group sounds (SFX / Music / Voice) for shared volume, pitch, and property settings |
Sound Mix (USoundMix) |
Push temporary class adjustments — duck Music when a Voice plays |
Submix (USoundSubmix) |
DSP bus: apply effects (reverb, EQ, compression), meter, record audio |
Concurrency (USoundConcurrency) |
Cap simultaneous voices in a group; choose a steal rule when limit is hit |
A sound routes to its sound class's submix by default. Submix sends let a
sound copy signal to additional buses (e.g. a reverb or analysis bus) without
leaving the main chain. Audio Buses (UAudioBus) are an alternative bus type
that route before or after source effects, useful for sidechaining.
See references/mixing-classes-submixes-concurrency.md
for concurrency steal rules, submix effect chains, audio bus sends, and
dynamic mixing from C++.
MetaSound parameters at runtime
MetaSound Sources expose typed inputs (float, int32, bool, trigger, wave)
declared in the graph. Drive them from the owning audio component:
// Set before or during playback:
AC->SetFloatParameter(TEXT("Intensity"), 0.8f);
AC->SetBoolParameter(TEXT("IsUnderwater"), true);
AC->SetIntParameter(TEXT("FootSurface"), 2);
// Trigger a one-shot event inside the graph (stateless pulse):
AC->SetTriggerParameter(TEXT("OnImpact"));
// Swap the wave asset a graph node is playing:
AC->SetWaveParameter(TEXT("ImpactWave"), GroundHitWave);
Input names are case-sensitive FName values that must exactly match the
graph's Input node names. A mismatch produces no error and no effect. The
parameter interface is declared in
Runtime/Engine/Public/Audio/SoundParameterControllerInterface.h.
MetaSounds also expose outputs (e.g., a float metering value). Read them
through UMetasoundGeneratorHandle obtained from UMetaSoundSource:: GetGeneratorForAudioComponent — available only while the sound is playing.
See references/metasound-parameters-and-builder.md
for the Builder API, output watching, and runtime graph authoring.
Quartz: beat-quantized playback
Quartz provides a game-thread musical clock (UQuartzClockHandle) that
fires events on beat/bar boundaries. Use it to start sounds precisely on the
beat without drifting audio timers:
// Obtain the clock subsystem and create or find a named clock:
UQuartzSubsystem* Quartz = UQuartzSubsystem::Get(GetWorld());
UQuartzClockHandle* Clock = Quartz->CreateNewClock(this, TEXT("MusicClock"),
FQuartzClockSettings{});
// Schedule a sound to start on the next bar boundary:
FQuartzQuantizationBoundary Boundary;
Boundary.Quantization = EQuartzCommandQuantization::Bar;
Boundary.BoundaryType = EQuarztQuantizationBoundaryType::FromNow;
AC->PlayQuantized(GetWorld(), Clock, Boundary, {});
The Quartz subsystem (UQuartzSubsystem) lives in the Audio Mixer module.
UAudioComponent::PlayQuantized is declared in AudioComponent.h:521.
Triggering from gameplay & animation
Footstep, impact, and weapon sounds should be triggered from Anim Notifies
(see ue-animation-system) or gameplay events, not manual timers. This keeps
audio in sync at any play rate or time dilation. For high-frequency impacts use
concurrency to avoid voice spam — limit simultaneous instances and choose an
appropriate steal rule.
Gotchas
- Fire-and-forget when you needed control —
PlaySound* returns nothing;
use SpawnSound* or a component to stop, fade, or change parameters later.
- No attenuation asset → 3D sound plays as 2D, no falloff.
- Parameter name mismatch on MetaSounds → silent no-op, no log warning.
- No concurrency limits → voice spam and clipping under heavy action.
- Audio component not in a
UPROPERTY → GC'd while playing, sound stops.
SetWaveParameter called on a SoundCue → no effect; wave params target
MetaSound wave inputs (or legacy SoundCue wave params — different systems).
bDisableParameterUpdatesWhilePlaying set on the component → parameter
calls are queued but not forwarded to the active sound.
- Importing non-WAV → import PCM WAV only; build variation inside
MetaSound or SoundCue graphs rather than baking it into the file.
- Virtualization —
EVirtualizationMode on USoundBase controls whether
looping sounds silently continue (PlayWhenSilent), restart, or drop when
evicted. Default is Disabled; forgotten virtualization config is a common
cause of music "disappearing" under heavy load.
Version notes
- MetaSounds were introduced in UE5.0; the Builder API (Beta) expanded
significantly in 5.4–5.5; output watching via
UMetasoundGeneratorHandle
was stabilised in 5.4.
EVirtualizationMode::SeekRestart is experimental as of UE 5.6–5.8
(SoundBase.h:76).
FAudioComponentParam (old named-parameter struct) was deprecated in UE 5.0;
use FAudioParameter / SetFloatParameter etc. instead.
OnGeneratorInstanceCreated / OnGeneratorInstanceDestroyed on
UMetaSoundSource deprecated in 5.6; use OnGeneratorInstanceInfoCreated
/ OnGeneratorInstanceInfoDestroyed (MetasoundSource.h:338–344).
References & source material
Engine source (UE 5.8):
Runtime/Engine/Classes/Components/AudioComponent.h — UAudioComponent:167;
Play:517, Stop:583, FadeIn:500, FadeOut:511, SetFloatParameter:548,
SetBoolParameter:534, SetIntParameter:541, SetWaveParameter:622,
OnAudioFinished:456, GetPlayState:605, SetSubmixSend:644.
Runtime/Engine/Public/Audio/SoundParameterControllerInterface.h —
ISoundParameterControllerInterface:24, SetTriggerParameter:32.
Runtime/Engine/Classes/Sound/SoundBase.h — USoundBase:108,
SoundClassObject:117, AttenuationSettings:222, ConcurrencySet:188,
VirtualizationMode:170, EVirtualizationMode:57.
Runtime/Engine/Classes/Sound/SoundWave.h — USoundWave:421 (extends
USoundBase; leaf asset for raw PCM audio).
Runtime/Engine/Classes/Sound/SoundCue.h — USoundCue:90 (legacy node
graph over USoundWave assets).
Runtime/Engine/Classes/Sound/SoundAttenuation.h — USoundAttenuation:453,
FSoundAttenuationSettings:148.
Runtime/Engine/Classes/Sound/SoundClass.h — USoundClass, FSoundClassProperties:54.
Runtime/Engine/Classes/Sound/SoundSubmix.h — USoundSubmix, submix effects.
Runtime/Engine/Classes/Sound/SoundConcurrency.h — FSoundConcurrencySettings:74,
EMaxConcurrentResolutionRule:31.
Runtime/Engine/Classes/Sound/AudioBus.h — UAudioBus, EAudioBusChannels:13.
Runtime/Engine/Classes/Kismet/GameplayStatics.h — PlaySound2D:680,
SpawnSound2D:699, PlaySoundAtLocation:732, SpawnSoundAtLocation:754,
SpawnSoundAttached:778.
Plugins/Runtime/Metasound/Source/MetasoundEngine/Public/MetasoundSource.h —
UMetaSoundSource:89, GetGeneratorForAudioComponent:326,
OnGeneratorInstanceInfoCreated:343.
Plugins/Runtime/Metasound/Source/MetasoundEngine/Public/MetasoundBuilderSubsystem.h
— UMetaSoundBuilderSubsystem, UMetaSoundSourceBuilder:71.
Official docs (UE 5.8):
Deep-dive references in this skill:
- references/audiocomponent-and-playback.md —
full
UAudioComponent API, playback state machine, delegates, and Quartz.
- references/attenuation-and-spatialization.md —
FSoundAttenuationSettings fields, distance models, HRTF, Audio Gameplay Volumes.
- references/mixing-classes-submixes-concurrency.md —
concurrency steal rules, submix effect chains, audio bus sends, dynamic mixing.
- references/metasound-parameters-and-builder.md —
runtime parameter API, output watching, MetaSound Builder API.
1---2name: ue-audio-and-metasounds3description: Play and control audio in Unreal — the sound asset types (SoundWave, SoundCue, MetaSound Source), playing 2D/3D sounds from C++ (UGameplayStatics, UAudioComponent), spatial attenuation, sound classes/submixes/concurrency for mixing, runtime MetaSound parameters, Quartz beat-quantized playback, and the MetaSound Builder API. Use when playing SFX/music, attaching looping sounds to actors, setting up 3D spatialization, mixing/ducking audio, driving procedural audio with MetaSounds, or debugging silent sounds, voice spam, or parameter mismatches.4---56# Audio & MetaSounds78The Unreal audio pipeline: a **sound asset** (`USoundBase` subclass) is activated either9as a fire-and-forget one-shot or via a **`UAudioComponent`** for ongoing control. 3D10sounds are positioned and faded using a **`USoundAttenuation`** asset. Mixing is handled11through **sound classes**, **submixes**, and **concurrency** objects. MetaSounds are the12modern, node-based, parameter-driven replacement for SoundCues.1314## When to use this skill1516- Playing SFX (gunshots, footsteps, impacts), music, or UI sounds from C++.17- Attaching a looping or positional sound to an actor (engine hum, ambience).18- 3D spatialization and distance falloff configuration.19- Mixing: volume groups, ducking music under dialogue, limiting voice counts.20- Procedural/parameterized audio (footsteps that vary, adaptive music) via MetaSounds.21- Beat-synchronized audio events with the Quartz clock system.22- Building or modifying MetaSound graphs at runtime via the Builder API.2324## Sound asset types2526| Asset | Class | Best for |27|---|---|---|28| Imported PCM clip | `USoundWave` | Raw audio; compose variation in a cue or MetaSound |29| Legacy node graph | `USoundCue` | Simple randomization / modulation over waves |30| Modern graph with typed I/O | `UMetaSoundSource` | Procedural, parameter-driven, DSP-composable audio |31| Abstract base | `USoundBase` | The type accepted by all play functions |3233Prefer **MetaSounds** for new dynamic audio. SoundCues remain fully supported and are34simpler for lightweight randomization. `USoundWave` is never played directly in gameplay35code — it is the leaf asset referenced inside cues or MetaSound graphs.3637## Playing sounds from C++3839```cpp40#include "Kismet/GameplayStatics.h"41#include "Components/AudioComponent.h"4243// 2D (UI, music) — fire-and-forget, no spatialization:44UGameplayStatics::PlaySound2D(this, UISound);4546// 3D at a world position — fire-and-forget:47UGameplayStatics::PlaySoundAtLocation(this, ExplosionSound, HitLocation,48 FRotator::ZeroRotator, 1.f, 1.f, 0.f, AttenuationAsset);4950// 3D attached to a component — returns controllable UAudioComponent:51UAudioComponent* AC = UGameplayStatics::SpawnSoundAttached(52 EngineLoop, VehicleMesh, NAME_None);53AC->FadeIn(0.5f);5455// Stop or adjust later:56AC->SetFloatParameter(TEXT("RPM"), 4200.f); // MetaSound input57AC->FadeOut(0.3f, 0.f);58```5960`PlaySound*` functions are fire-and-forget. Use `SpawnSound*` or a61`UAudioComponent` placed on the actor when you need to stop, fade, change62parameters, or react to `OnAudioFinished`. Store the component in a63`UPROPERTY()` member so GC cannot collect it while it is playing (see64`ue-memory-and-gc`).6566### Audio component placed on an actor6768```cpp69// Header — owned audio component, UPROPERTY keeps it alive:70UPROPERTY(VisibleAnywhere)71TObjectPtr<UAudioComponent> EngineAudio;7273// Constructor:74EngineAudio = CreateDefaultSubobject<UAudioComponent>(TEXT("EngineAudio"));75EngineAudio->SetupAttachment(RootComponent);76EngineAudio->bAutoActivate = false; // start silent; Play() from BeginPlay7778// BeginPlay:79EngineAudio->SetSound(EngineLoopAsset);80EngineAudio->Play();81```8283See [references/audiocomponent-and-playback.md](references/audiocomponent-and-playback.md)84for the full `UAudioComponent` API, delegates, and playback state machine.8586## 3D spatialization & attenuation8788A `USoundAttenuation` asset bundles: distance model and falloff radius,89spatialization algorithm (panning or HRTF plugin), occlusion, reverb send,90air absorption, and priority attenuation. Assign it on the sound asset itself91(`AttenuationSettings` on `USoundBase`) or override it per-call by passing it92to `PlaySoundAtLocation` / `SpawnSoundAttached`.9394A sound without an attenuation asset plays as flat 2D regardless of where the95audio component is in the world. The inner radius defines a constant-volume96zone; falloff begins at the inner radius and reaches zero at the falloff97distance.9899See [references/attenuation-and-spatialization.md](references/attenuation-and-spatialization.md)100for the full `FSoundAttenuationSettings` fields, distance models, HRTF, and101Audio Gameplay Volumes.102103## Mixing: classes, submixes, concurrency104105| Tool | Purpose |106|---|---|107| **Sound Class** (`USoundClass`) | Group sounds (SFX / Music / Voice) for shared volume, pitch, and property settings |108| **Sound Mix** (`USoundMix`) | Push temporary class adjustments — duck Music when a Voice plays |109| **Submix** (`USoundSubmix`) | DSP bus: apply effects (reverb, EQ, compression), meter, record audio |110| **Concurrency** (`USoundConcurrency`) | Cap simultaneous voices in a group; choose a steal rule when limit is hit |111112A sound routes to its sound class's submix by default. Submix sends let a113sound copy signal to additional buses (e.g. a reverb or analysis bus) without114leaving the main chain. Audio Buses (`UAudioBus`) are an alternative bus type115that route before or after source effects, useful for sidechaining.116117See [references/mixing-classes-submixes-concurrency.md](references/mixing-classes-submixes-concurrency.md)118for concurrency steal rules, submix effect chains, audio bus sends, and119dynamic mixing from C++.120121## MetaSound parameters at runtime122123MetaSound Sources expose **typed inputs** (float, int32, bool, trigger, wave)124declared in the graph. Drive them from the owning audio component:125126```cpp127// Set before or during playback:128AC->SetFloatParameter(TEXT("Intensity"), 0.8f);129AC->SetBoolParameter(TEXT("IsUnderwater"), true);130AC->SetIntParameter(TEXT("FootSurface"), 2);131132// Trigger a one-shot event inside the graph (stateless pulse):133AC->SetTriggerParameter(TEXT("OnImpact"));134135// Swap the wave asset a graph node is playing:136AC->SetWaveParameter(TEXT("ImpactWave"), GroundHitWave);137```138139Input names are **case-sensitive `FName`** values that must exactly match the140graph's Input node names. A mismatch produces no error and no effect. The141parameter interface is declared in142`Runtime/Engine/Public/Audio/SoundParameterControllerInterface.h`.143144MetaSounds also expose **outputs** (e.g., a float metering value). Read them145through `UMetasoundGeneratorHandle` obtained from `UMetaSoundSource::146GetGeneratorForAudioComponent` — available only while the sound is playing.147148See [references/metasound-parameters-and-builder.md](references/metasound-parameters-and-builder.md)149for the Builder API, output watching, and runtime graph authoring.150151## Quartz: beat-quantized playback152153Quartz provides a **game-thread musical clock** (`UQuartzClockHandle`) that154fires events on beat/bar boundaries. Use it to start sounds precisely on the155beat without drifting audio timers:156157```cpp158// Obtain the clock subsystem and create or find a named clock:159UQuartzSubsystem* Quartz = UQuartzSubsystem::Get(GetWorld());160UQuartzClockHandle* Clock = Quartz->CreateNewClock(this, TEXT("MusicClock"),161 FQuartzClockSettings{});162163// Schedule a sound to start on the next bar boundary:164FQuartzQuantizationBoundary Boundary;165Boundary.Quantization = EQuartzCommandQuantization::Bar;166Boundary.BoundaryType = EQuarztQuantizationBoundaryType::FromNow;167AC->PlayQuantized(GetWorld(), Clock, Boundary, {});168```169170The Quartz subsystem (`UQuartzSubsystem`) lives in the Audio Mixer module.171`UAudioComponent::PlayQuantized` is declared in `AudioComponent.h`:521.172173## Triggering from gameplay & animation174175Footstep, impact, and weapon sounds should be triggered from **Anim Notifies**176(see `ue-animation-system`) or gameplay events, not manual timers. This keeps177audio in sync at any play rate or time dilation. For high-frequency impacts use178concurrency to avoid voice spam — limit simultaneous instances and choose an179appropriate steal rule.180181## Gotchas182183- **Fire-and-forget when you needed control** — `PlaySound*` returns nothing;184 use `SpawnSound*` or a component to stop, fade, or change parameters later.185- **No attenuation asset** → 3D sound plays as 2D, no falloff.186- **Parameter name mismatch** on MetaSounds → silent no-op, no log warning.187- **No concurrency limits** → voice spam and clipping under heavy action.188- **Audio component not in a `UPROPERTY`** → GC'd while playing, sound stops.189- **`SetWaveParameter` called on a SoundCue** → no effect; wave params target190 MetaSound wave inputs (or legacy SoundCue wave params — different systems).191- **`bDisableParameterUpdatesWhilePlaying`** set on the component → parameter192 calls are queued but not forwarded to the active sound.193- **Importing non-WAV** → import PCM WAV only; build variation inside194 MetaSound or SoundCue graphs rather than baking it into the file.195- **Virtualization** — `EVirtualizationMode` on `USoundBase` controls whether196 looping sounds silently continue (`PlayWhenSilent`), restart, or drop when197 evicted. Default is `Disabled`; forgotten virtualization config is a common198 cause of music "disappearing" under heavy load.199200## Version notes201202- MetaSounds were introduced in UE5.0; the Builder API (Beta) expanded203 significantly in 5.4–5.5; output watching via `UMetasoundGeneratorHandle`204 was stabilised in 5.4.205- `EVirtualizationMode::SeekRestart` is experimental as of UE 5.6–5.8206 (`SoundBase.h`:76).207- `FAudioComponentParam` (old named-parameter struct) was deprecated in UE 5.0;208 use `FAudioParameter` / `SetFloatParameter` etc. instead.209- `OnGeneratorInstanceCreated` / `OnGeneratorInstanceDestroyed` on210 `UMetaSoundSource` deprecated in 5.6; use `OnGeneratorInstanceInfoCreated`211 / `OnGeneratorInstanceInfoDestroyed` (`MetasoundSource.h`:338–344).212213## References & source material214215Engine source (UE 5.8):216- `Runtime/Engine/Classes/Components/AudioComponent.h` — `UAudioComponent`:167;217 `Play`:517, `Stop`:583, `FadeIn`:500, `FadeOut`:511, `SetFloatParameter`:548,218 `SetBoolParameter`:534, `SetIntParameter`:541, `SetWaveParameter`:622,219 `OnAudioFinished`:456, `GetPlayState`:605, `SetSubmixSend`:644.220- `Runtime/Engine/Public/Audio/SoundParameterControllerInterface.h` —221 `ISoundParameterControllerInterface`:24, `SetTriggerParameter`:32.222- `Runtime/Engine/Classes/Sound/SoundBase.h` — `USoundBase`:108,223 `SoundClassObject`:117, `AttenuationSettings`:222, `ConcurrencySet`:188,224 `VirtualizationMode`:170, `EVirtualizationMode`:57.225- `Runtime/Engine/Classes/Sound/SoundWave.h` — `USoundWave`:421 (extends226 `USoundBase`; leaf asset for raw PCM audio).227- `Runtime/Engine/Classes/Sound/SoundCue.h` — `USoundCue`:90 (legacy node228 graph over `USoundWave` assets).229- `Runtime/Engine/Classes/Sound/SoundAttenuation.h` — `USoundAttenuation`:453,230 `FSoundAttenuationSettings`:148.231- `Runtime/Engine/Classes/Sound/SoundClass.h` — `USoundClass`, `FSoundClassProperties`:54.232- `Runtime/Engine/Classes/Sound/SoundSubmix.h` — `USoundSubmix`, submix effects.233- `Runtime/Engine/Classes/Sound/SoundConcurrency.h` — `FSoundConcurrencySettings`:74,234 `EMaxConcurrentResolutionRule`:31.235- `Runtime/Engine/Classes/Sound/AudioBus.h` — `UAudioBus`, `EAudioBusChannels`:13.236- `Runtime/Engine/Classes/Kismet/GameplayStatics.h` — `PlaySound2D`:680,237 `SpawnSound2D`:699, `PlaySoundAtLocation`:732, `SpawnSoundAtLocation`:754,238 `SpawnSoundAttached`:778.239- `Plugins/Runtime/Metasound/Source/MetasoundEngine/Public/MetasoundSource.h` —240 `UMetaSoundSource`:89, `GetGeneratorForAudioComponent`:326,241 `OnGeneratorInstanceInfoCreated`:343.242- `Plugins/Runtime/Metasound/Source/MetasoundEngine/Public/MetasoundBuilderSubsystem.h`243 — `UMetaSoundBuilderSubsystem`, `UMetaSoundSourceBuilder`:71.244245Official docs (UE 5.8):246- Working with Audio — <https://dev.epicgames.com/documentation/unreal-engine/working-with-audio-in-unreal-engine>247- MetaSounds — <https://dev.epicgames.com/documentation/unreal-engine/metasounds-in-unreal-engine>248- MetaSound Builder API — <https://dev.epicgames.com/documentation/unreal-engine/metasound-builder-api-in-unreal-engine>249- Spatialization and Sound Attenuation — <https://dev.epicgames.com/documentation/unreal-engine/spatialization-and-sound-attenuation-in-unreal-engine>250- Audio Mixing — <https://dev.epicgames.com/documentation/unreal-engine/audio-mixing-in-unreal-engine>251- Submixes — <https://dev.epicgames.com/documentation/unreal-engine/submixes-in-unreal-engine>252253Deep-dive references in this skill:254- [references/audiocomponent-and-playback.md](references/audiocomponent-and-playback.md) —255 full `UAudioComponent` API, playback state machine, delegates, and Quartz.256- [references/attenuation-and-spatialization.md](references/attenuation-and-spatialization.md) —257 `FSoundAttenuationSettings` fields, distance models, HRTF, Audio Gameplay Volumes.258- [references/mixing-classes-submixes-concurrency.md](references/mixing-classes-submixes-concurrency.md) —259 concurrency steal rules, submix effect chains, audio bus sends, dynamic mixing.260- [references/metasound-parameters-and-builder.md](references/metasound-parameters-and-builder.md) —261 runtime parameter API, output watching, MetaSound Builder API.