Skip to content

Sound Class / Sound Mix: category volume, Push/Pop, and overrides

At a glance

Sound Class: an asset that assigns sounds to a category and can inherit through a parent/child tree · Sound Mix: an asset whose active adjusters multiply Sound Class volume and pitch over time · Runtime nodes: Push Sound Mix Modifier, Pop Sound Mix Modifier, Set Sound Mix Class Override, and Clear Sound Mix Class Override · Returns: execution only—no success Boolean and no mix-instance handle · Scope: the audio device resolved from the node's hidden World Context; these calls do not replicate · Official pages: Set Sound Mix Class Override · Sound Classes · Sound Mix

The one-minute version

  • Put each playable sound in a Sound Class such as Master, Music, SFX, Dialogue, or UI. The class is the category identity; a Slider is not.
  • A Sound Mix is a runtime layer. While active, its Sound Class adjusters multiply the classes' authored volume and pitch. It does not rewrite the Sound Class or sound assets.
  • Push Sound Mix Modifier activates one mix for this audio device. Pop releases one manual activation. The engine tracks reference counts, so every owner that pushes must release exactly once.
  • Set Sound Mix Class Override changes—or creates—a runtime adjuster for one Sound Class inside that mix. It takes Volume, Pitch, Fade In Time, and Apply to Children, and returns no success result.
  • Clear Sound Mix Class Override fades that runtime override back to the mix's authored adjuster. It does not promise audible volume 1.0 because the Sound Class, its parents, other mixes, and each sound instance still contribute multipliers.
  • For an options screen, activate one long-lived user-volume mix once, update its class overrides for preview/applied state, and persist the plain volume numbers through your settings owner. Do not Push again on every Slider event.
  • Several mixes can be active together. EQ Priority chooses between legacy equalizer settings; it is not a general “highest-priority mix wins” rule for Sound Class volume.
  • Category volume is local output policy. Replicate the gameplay event or state that should make a sound happen, then let each listening machine mix that sound at its own saved volume.

What it actually does

There are three different layers beginners often call “the volume”:

flowchart LR
    Sound[Sound Wave / Cue / MetaSound] --> Class[Assigned Sound Class]
    Class --> Tree[Sound Class parent/child tree]
    Tree --> Mixes[Active Sound Mix adjusters]
    Mixes --> Instance[Audio Component / play-node multiplier]
    Instance --> Output[Local audio-device output]

Each layer is multiplicative. A music sound might have an authored asset volume, inherit from Master, receive a Music = 0.40 user override, and play through an Audio Component with its own multiplier. Changing any one layer does not erase the others.

Sound Class is the category

A Sound Class is an asset referenced by playable sound assets. A useful small tree is:

SC_Master
├─ SC_Music
├─ SC_SFX
│  ├─ SC_Weapons
│  └─ SC_Footsteps
├─ SC_Dialogue
└─ SC_UI

The parent/child relationship can pass properties such as volume and pitch to children. That lets a Master control affect every inherited category while a Music control affects only music.

The tree does not classify sounds by name or folder. A sound must actually resolve to the intended Sound Class. If a music asset still uses the default class, changing SC_Music correctly changes nothing about that asset.

Sound Mix is an active adjustment layer

A Sound Mix asset can contain FSoundClassAdjuster entries. Each entry names a Sound Class and supplies multiplier-style values including Volume, Pitch, and Apply to Children. The mix also has timing such as Initial Delay, Fade In, Fade Out, and Duration.

Conceptually:

pseudocode—mental model, not engine source

for each active Sound Mix:
    interpolate the mix's current weight
    for each Sound Class adjuster:
        multiply the target class properties by the weighted adjuster
        if Apply to Children:
            include descendant Sound Classes

Multiple active mixes contribute to the result. An options mix, a temporary “underwater” mix, and a passive dialogue-ducking mix can all affect the same class at once.

The four Blueprint operations

Node Inputs that matter Observable result Return / failure pin
Push Sound Mix Modifier Sound Mix asset Adds one manual activation for that mix on the resolved audio device; authored timing controls its entrance None
Pop Sound Mix Modifier Sound Mix asset Releases one manual activation; when no other active/base/passive ownership keeps it active, it follows its fade-out path None
Set Sound Mix Class Override Mix, Sound Class, Volume, Pitch, Fade In Time, Apply to Children Replaces or adds the runtime override for that class in that mix and interpolates from its current value None
Clear Sound Mix Class Override Mix, Sound Class, Fade Out Time Interpolates away the runtime override and restores the mix's non-override adjuster for that class None

The Mix and Sound Class inputs are asset references. The nodes do not return a new Sound Mix object, an activation token, an effective volume, or a success Boolean. The outgoing execution pin only means the call returned.

Set Sound Mix Class Override may add a runtime entry even when the mix asset does not author that Sound Class in its Sound Class Effects array. That entry belongs to the audio device's runtime override state; it does not dirty or save the .uasset.

Volume, Pitch, Fade, and Apply to Children

  • Volume is a scale, normally 1.0 for unchanged, 0.5 for half the linear multiplier, and 0.0 for silence at this layer. It is not a decibel value and “half the number” is not perceived as exactly half as loud.
  • Pitch is also a multiplier. Use 1.0 when an options control should change only category loudness.
  • Fade In Time is the interpolation time from the override's current values to the new ones. Repeated Set calls retarget the override; they do not create separately removable override instances.
  • Apply to Children makes this override affect descendants of the chosen class. Use it for a Master control only when the hierarchy really represents every category that control should own.
  • Fade Out Time on Clear is the transition back to the mix's authored adjuster—not necessarily back to the final audible default.

Validate the project-facing volume domain before calling the node. A beginner options screen normally stores a clamped 0.0–1.0 value and keeps Pitch at 1.0; it should not pass arbitrary Slider output and hope an undocumented clamp defines product behavior.

Push/Pop is ownership, not a toggle

The audio device stores separate active and passive reference counts for a Sound Mix. That makes this graph unsafe:

Every On Value Changed
-> Push SM_UserVolumes
-> Set Music override

Each Push adds ownership, while one later Pop releases only one manual reference. The mix can remain active long after the menu closes.

Use one explicit owner instead:

Audio/settings coordinator initialization
-> if UserVolumeMix not manually owned by coordinator:
       Push Sound Mix Modifier(SM_UserVolumes)
       bOwnsUserVolumeMix = true

Application shutdown / deliberate service teardown
-> if bOwnsUserVolumeMix:
       Pop Sound Mix Modifier(SM_UserVolumes)
       bOwnsUserVolumeMix = false

Several systems can legally refer to the same Sound Mix asset, but Push does not return an independently addressable instance. Centralize manual ownership or give each feature a distinct mix. A blind Pop from one widget can shorten another owner's activation; a missing Pop leaves the count elevated.

For a permanent project baseline, a configured base Sound Mix may be a better activation owner than a BeginPlay Push. For temporary state such as “pause menu ducking,” a balanced Push/Pop pair is appropriate.

Active mixes, stacking, and passive mixes

Several class adjusters can all matter

Suppose the current layers are:

Layer SC_Music volume contribution
Sound Class authored volume 0.80
User options mix 0.50
Dialogue ducking mix 0.40
Audio Component multiplier 1.00

The important mental model is “all applicable multipliers contribute,” not “the last mix wins.” Clearing the user override removes its 0.50 layer, but the authored class volume and dialogue ducking still apply.

Parent and child adjusters can also overlap. If a Master override applies to children and a Music override targets the child, both are intentional layers. Avoid accidentally applying the same settings scalar at both levels.

EQ Priority is narrow

A Sound Mix's EQ Priority resolves which active mix supplies the legacy equalizer (EQ) settings when those settings cannot be combined. It does not turn the whole mix into an ordered override and does not make lower-priority Sound Class volume adjusters disappear.

Passive mixes have their own trigger

A Sound Class can list Passive Sound Mix Modifiers. The audio engine activates one when a sound in that class plays within the configured volume thresholds; Blueprint does not have to Push it. Manual and passive ownership can refer to the same mix, which is another reason not to infer activation from one widget's local Boolean.

Use passive mixes for content-driven behavior such as dialogue ducking. Use a long-lived manual/base mix for user category volumes. Mixing both jobs in one asset makes ownership and restoration harder to reason about.

The options-screen pattern

Treat the runtime mix and saved numbers as separate owners:

Open options
-> Draft.MusicVolume = persisted/applied MusicVolume
-> AppliedSnapshot = Draft

Music Slider changed to 0.35
-> Draft.MusicVolume = 0.35
-> Set Sound Mix Class Override(
       SM_UserVolumes, SC_Music,
       Volume = 0.35, Pitch = 1.0,
       Fade In Time = 0.05, Apply to Children = true)
-> this is preview; persisted value is still unchanged

Cancel
-> Set override back to AppliedSnapshot.MusicVolume
-> discard Draft

Apply
-> validate Draft
-> apply every category override through the audio coordinator
-> save the plain Draft volume values through the project settings owner
-> only after save policy succeeds, update AppliedSnapshot

Persist 0.35, not “the Sound Mix is currently pushed.” Sound Mix runtime state belongs to the audio device and must be reconstructed on the next run. See Options/settings screen architecture for draft, applied, and persisted state.

Use a short fade for Slider preview so rapid changes do not click. Do not write a SaveGame/config file for every drag sample. Apply or a deliberate autosave boundary owns persistence.

Clearing is not the same as restoring the open snapshot

If the screen opened with the user's saved Music volume at 0.65, Cancel should Set the override back to 0.65. Calling Clear instead restores the mix's authored value, which may be 1.0 and is not necessarily the value that was applied before the screen opened.

Use Clear when the project intentionally wants to stop owning that runtime override—for example, deleting a per-session ducking adjustment—not as a generic Cancel button.

Local output and multiplayer

These nodes resolve a World Context to an audio device. They are ordinary local calls, not remote procedure calls (RPCs), replicated variables, or server-authoritative settings.

  • In a client process, change the mix used by that client's listener output.
  • A listen-server host can also have local audio output, but remote clients do not inherit the host's mix changes.
  • A dedicated server normally has no listener output to configure. Running user-volume code there cannot make clients quieter.
  • In multi-process play-in-editor (PIE), each process has its own local settings and audio state. In one-process/multi-world tests, pass context from the correct play world rather than an editor utility or stale widget.

For a replicated explosion:

server validates explosion
-> replicated event/state reaches relevant clients
-> each client plays the explosion locally
-> each client's SC_SFX / Sound Mix policy determines its output volume

Never replicate a player's Music or Master volume merely to make the sound event replicate. Local preference and authoritative gameplay occurrence are different state.

When it fails (and what failure does)

The nodes have no failure execution pin and no success return. Common silent or misleading outcomes are:

  1. Mix or Sound Class is None. The graph continues, but there is no valid target to adjust.
  2. The World Context resolves no usable audio device. Editor utility, teardown, dedicated-server, or stale-world calls can have no audible result.
  3. The sound is assigned to another class. The override works; the tested sound simply is not in its category.
  4. The mix has no active ownership when your design expects one. Establish base/manual/passive activation deliberately and verify it at the owner.
  5. Another layer is already at zero or very low. Clearing one override cannot defeat a parent class, another active mix, an Audio Component multiplier, platform mute, or device volume.
  6. Apply to Children is wrong. A parent override misses descendants when false, or changes more categories than intended when true.
  7. Push/Pop calls are unbalanced. The mix stays active or fades out while another feature still assumes it owns it.
  8. A passive mix is participating. A playing class can reactivate or retain behavior independently of the widget's manual path.

The calls do not throw gameplay exceptions. For diagnosis, print the world and asset names, audition a known sound assigned to the exact class, temporarily use an obvious nonzero override, and inspect every active layer rather than calling Set repeatedly.

What these nodes do not do

  • They do not assign a Sound Class to a sound asset.
  • They do not edit or save Sound Mix/Sound Class assets at runtime.
  • They do not return the final effective loudness of a playing sound.
  • They do not stop playback, reset playback position, or destroy an Audio Component merely because a class multiplier reached zero.
  • They do not persist user settings across launch.
  • They do not provide per-local-player mixing inside one shared audio device as if each split-screen listener had an independent master output.
  • They do not replicate sound events or local volume preferences.
  • They do not make EQ Priority a general class-volume conflict resolver.

Lookalikes—which one do I want?

Tool Scope Use when
Sound Class property Authored defaults for a category/hierarchy Establishing project-wide routing and baseline volume/pitch
Sound Mix class adjuster / override Runtime category layer on an audio device User category volume, ducking, or temporary mix state
Audio Component Set Volume Multiplier One live sound instance One engine loop, voice, or ambience needs its own level
Play-node Volume Multiplier One new playback request A single one-shot should start louder/quieter
Sound Submix Routed audio signal and effects chain Processing groups with dynamics, EQ/effects, recording, or sends
Audio Modulation / Control Bus Mix Parameter-driven modern modulation graph A larger project needs reusable controls, mixes, and modulation destinations
Stop / Fade Out Audio Component Playback lifetime The sound should actually end rather than merely become inaudible at one mix layer

Rule of thumb: Sound Class says “which category?”, Sound Mix says “how is that category adjusted now?”, and Audio Component says “what happens to this one playing instance?”

Going deeper