Music, ambience and acoustic transitions for Unreal Engine. Start with the included demonstration, then add the same components and Blueprint patterns to your own game.
This manual covers Audio Core 1.0 for Unreal Engine 5.8. The supplied prebuilt package targets Windows 64-bit. You can run the demonstration in a Blueprint project; you do not need to write C++.
New to the plugin? Complete Installation and First Run first. Then use Your First Soundscape. The reference sections explain individual settings, and the Blueprint Recipes section shows how gameplay applies and restores audio changes.
| Term | Meaning |
|---|---|
| Pawn | The actor controlled by the player. A Character is a type of Pawn. |
| Component | A feature attached to an actor, such as Audio Core Player or Enemy Marker. |
| Data asset / profile | A saved set of settings that you can reuse. Editing a shared profile changes every actor using it. |
| Volume / trigger | An invisible region that reacts when the player enters or leaves. |
| Duck | Temporarily lower a sound's volume, then restore it. |
| Snapshot | A temporary mix preset, such as muffled low-health audio. |
| PIE | Play In Editor: the Play button runs the level without packaging a game. |
| Units | Distances are centimeters, durations are seconds, and volume multipliers normally range from 0 (silent) to 1 (unchanged). |
AudioCore-Win64.zip with Unreal Engine 5.8 on Windows. The source archive requires a compatible Unreal C++ build toolchain.AudioCore into your project's Plugins folder. Create Plugins if it does not exist.YourProject/Plugins/AudioCore/AudioCore.uplugin. Do not leave an extra ZIP wrapper folder between Plugins and AudioCore./AudioCore/Core/Map/Example.First-run check: outside the stations you should hear the outdoor profile. Station 01 changes music, station 02 muffles it, and station 03 plays a short accent. The map supplies its own demo GameMode and flying pawn.
If Unreal reports missing or incompatible modules, check the engine version and archive choice first. A Live Coding message saying a module is not loaded does not mean the installed plugin was updated. Install matching binaries with the editor closed, or rebuild the source with the appropriate Unreal toolchain.
See the complete station guide and sound credits. The twelve included sounds may be reused under their separately listed CC0 terms.
DA_MyOutdoorProfile.0.25.Keep your project's customized assets in your own Content folder. Duplicate an example profile or Blueprint there before editing it, so a later plugin update does not replace your work. Duplicate supporting profiles as well if you want settings independent of the demonstration.
This setup also works on replicated player pawns: Audio Core waits for local possession before starting playback. Read Multiplayer Notes to connect server gameplay and shared world state.
Open /AudioCore/Examples/Blueprints. The four recipe Event Graphs run left to right and have named comment sections. Blue sections apply a change, green sections restore it, and amber sections handle cleanup. These are working assets used at stations 19–22.
| Blueprint | What to copy | How to test |
|---|---|---|
| BP_DemoMusicOverride | Set Music Override and its matching Clear Music Override. This takes precedence over normal music selection. | Station 19: enter for guitar music, leave to restore the resolver. |
| BP_DemoProfileOverride | Set Profile Override and Clear Profile Override. This replaces the area profile, including ambient beds; combat and interior music can still take precedence. | Station 20: enter for guitar plus fire ambience, leave to restore the outdoor profile. |
| BP_DemoSnapshotVolume | Push Audio Snapshot and Pop Audio Snapshot By Asset. Remove your own effect instead of clearing every snapshot. | Station 21: enter for the heartbeat mix, leave to remove it. |
| BP_DemoDeathRevive | HandleDeath and HandleRevive. Use the same death handler from your confirmed-death event. | Station 22: approach for combat, touch the center for death, leave the center to revive. |
| BP_DemoGrunt / BP_DemoBoss | Inherited EnemyMarker defaults: separate combat tracks with priority 10 / 100. | Station 18: listen with both enemies nearby, then approach from either side. |
Music and profile overrides each have one active slot. These separated demonstration triggers do not implement competing owners. In a game with overlapping scripted requests, coordinate ownership in one place, or use priority zones and snapshots. For simultaneous snapshot owners, use distinct assets or registered tags; an empty tag must be removed by asset.
The demo's AnyDamage event deliberately treats any damage as lethal. Replace that shortcut with your real health/death decision. HandleDeath is guarded because repeating an unguarded Notify Death can replay its stinger. The visual label confirms the marker's state in the example.
For dialogue, call Set Music Duck with Scale 0.3 and Blend Time 0.5 when the line starts. Call Clear Music Duck when it finishes or is cancelled. Do not change the user's Music slider to create a temporary duck.
For a player-death screen or cutscene, use Set Combat Override → Force Off if nearby living enemies should stop controlling music. Apply a music override or snapshot if needed. On respawn/end of the sequence, clear those temporary changes and restore Set Combat Override → Auto. Force Off does not kill or deactivate enemy markers. Do not use an enemy death marker as a substitute for player-respawn logic.
See Demo and Blueprint recipes for the complete station list and integration scope.
AudioCore is built around one component on the player plus a few optional actors and a data asset. There is no manager actor to place and no required setup beyond the player component.
Add to your player pawn. Manages zone and interior stacks, scans for enemies, uses the supplied time of day, and crossfades music across two slots. Exposes a full Blueprint runtime API.
UAudioCorePlayerComponentA Box or Sphere trigger placed in the level. On overlap it pushes its music/profile onto the player's zone stack; on exit it pops. Highest Priority wins. Can Silence ambience and carry its own resume rules.
AAudioCoreZoneA Box or Sphere that changes how EVERYTHING sounds while inside: universal muffle (low-pass) and reverb on the whole mix, music ducking, exterior-ambience leak control, room tone, and optional interior music.
AAudioCoreInteriorVolumeAdd to an enemy actor with query-enabled Pawn-channel collision. While one or more markers are active within the player's detection radius, combat music plays. Each marker can specify its own combat track and a priority (e.g. a boss theme).
UAudioCoreEnemyMarkerGameInstance subsystem for Master / Music / SFX / Ambient volumes. Wire to UI sliders, apply to Sound Classes, save/load to GameUserSettings.ini, and broadcast changes for any save system.
UAudioCoreSettingsSubsystemData asset bundling music + dynamic ambience. Assign it to a zone or to the player's Default Profile slot. Create via Content Browser > Miscellaneous > Data Asset > Audio Core Sound Profile.
UAudioCoreSoundProfileA world-positioned point emitter: waterfall, forge, campfire, surf, a humming crystal. Engine attenuation handles distance falloff. Audio cost and virtualization depend on the sound asset and project settings. Muffled by interiors automatically.
AAudioCoreSoundSourceA world emitter that follows a path. Lay the spline along a river, stream, wall of flame, or stretch of surf and one voice rides the point nearest the listener, wrapping the path in a tube of sound - one Sound + two editable radii, with optional per-point widths so it can be wider in one spot and narrower in another. A smooth wireframe tube previews it in the viewport.
AAudioCoreSplineSourceA component for any actor - an animal, bird, frog, creaking tree, machine, torch - that plays occasional one-shots on its own random timer. Randomized clip, interval, volume, pitch and optional flock/pack bursts, with the same day/night, weather, season and combat gates. Timer-driven, no tick.
UAudioCoreSoundEmitterComponentData asset describing a predefined mix state (underwater, low-health, dream, spirit realm, drunk). Push it from gameplay to muffle/reverb the whole mix, duck or re-pitch the music, and fade in a tone. Composes with interiors.
UAudioCoreSnapshotA Box or Sphere that fires a one-shot moment when the player walks in: a stinger, an SFX one-shot, narration (with auto music duck), and/or a pushed mix snapshot. Fires once by default with a save-friendly Discovery Id.
AAudioCoreDiscoveryVolumeReusable data assets that bundle a complete world-emitter setup (sound, radii, attenuation, volume/pitch, fade, gates). Author "RiverLoud" or "Campfire" once and reuse it. Assigning one fully drives the source and hides its inline fields.
UAudioCoreWorldSourceProfileA reusable data asset that bundles WHAT a Discovery Volume plays - stinger, one-shot, narration and snapshot. The volume's shape and trigger rules (once / re-arm / save id) stay per-placement.
UAudioCoreDiscoveryProfile| Property | Default | Description |
|---|---|---|
| Default Profile | none | Sound Profile used outside all zones (music + ambience). Overrides the inline Default*Music when it defines music. |
| Default Day Music / Default Night Music | none | Simple inline fallback music when no profile is set. Night falls back to Day. |
| Combat Music | none | Component-level combat track, used when no nearby enemy or active profile supplies one. |
| Enemy Detection Radius | 2000 | Distance (cm) within which active enemy markers trigger combat music. |
| Enemy Check Interval | 0.25 | Seconds between enemy scans. |
| Crossfade Duration | 2.0 | Seconds to blend between music tracks. |
| Resume Music Position | true | Resume a track where it left off instead of restarting it next time it plays. |
| Resume Memory Duration | 30 | In-game seconds a saved position stays valid before the track restarts. 0 or less = never expire. |
| Respect Settings Volumes | true | Scale this component's audio by the Settings sliders (Master x Music for music; Master x Ambient for ambience). |
| Day Start Hour / Night Start Hour | 6 / 18 | Hours (24h clock) that mark the day and night windows. |
A Sound Profile is a data asset that describes a complete soundscape for an area. Sound slots accept Sound Waves, Sound Cues and MetaSound Sources. Looping and seeking behavior depend on the assigned asset. Profiles are optional; zones and the player component also accept music assigned inline for basic setups.
| Property | Description |
|---|---|
| Day Music | Looping music played during the day. Optional. |
| Night Music | Looping music played at night. Falls back to Day Music if empty. |
| Combat Music | Track used while enemies are near and no nearby enemy supplies its own. |
| Combat Stems | Optional intensity layers that ride on top of the combat track and fade in as the fight escalates (by nearby enemy count). Leave empty for a single flat combat track. |
Each Combat Stem has: Stem (a loop matching the combat track's length/tempo), Fade In At Enemy Count (the stem fades in once this many enemies are near), Volume, and Fade Time.
Steady layers that play the whole time the area is active: wind, rain, room tone, river, crowd, machinery. Add one bed per sound.
| Property | Description |
|---|---|
| Sound | The looping sound for this bed (Wave / Cue / MetaSound). |
| Volume / Pitch Multiplier | Steady level and playback-speed for the bed. |
| Volume Drift / Pitch Drift / Drift Rate | Humanization: how far and how quickly the volume/pitch slowly wander so long loops never sound dead-static. |
| Random Start Offset | Start the loop at a random point so reused assets do not phase-lock. |
| Play During | Day & Night, Day Only, or Night Only. |
| Weather / Season | Optional tag gates. Empty = always; otherwise only plays when the current weather/season tag matches. |
| Play During Combat | Off (default) fades the bed out during combat; on keeps it underneath the fight. |
| Interior Tag / Interior Volume Scale | Let interior volumes quiet this bed by tag, or set a fixed indoor level (-1 = inherit the interior's default). |
Intermittent sounds fired on a random timer: birds, insects, distant animals, creaks, gusts. Layers use separate randomized timers to reduce obvious repetition.
| Property | Description |
|---|---|
| Sounds | Pool of one-shots; one is chosen each time the layer fires. |
| No Immediate Repeat | Avoid consecutive reuse when the pool contains more than one clip. |
| Min / Max Interval | Random gap (seconds) between plays. |
| Min / Max Burst, Burst Spacing | Fire several one-shots together (e.g. a flock), each slightly apart and with its own random vol/pitch/spot. |
| Play Chance | Probability (0-1) the layer actually plays each time its timer fires. |
| Min / Max Volume, Min / Max Pitch | Random ranges applied per play. |
| Play During / Weather / Season / Play During Combat | Same gating options as ambient beds. |
| Spatialize, Min/Max Radius, Min/Max Elevation | Place each one-shot at a random spot around the listener (distance and vertical angle), or play it as 2D. |
| Attenuation / Concurrency | Optional Sound Attenuation (3D falloff) and Sound Concurrency (cap simultaneous plays) assets. |
| Interior Tag / Interior Volume Scale | Per-interior indoor level control by tag (-1 = inherit the interior's default). |
Music plays through two audio slots that ping-pong, to crossfade changes of Crossfade Duration seconds. Music is non-positional (2D), so listener distance does not attenuate it; volume sliders, ducks and snapshots still affect its level.
With Resume Music Position on, AudioCore remembers where a track was when it was swapped out. Return within Resume Memory Duration (in-game seconds) and it continues mid-track; wait longer and it starts fresh. Set the duration to 0 or less to always resume. Zones and interior volumes can override these rules per-area via Override Resume Settings.
While one or more active enemy markers are inside Enemy Detection Radius, combat music takes over. The track is resolved in priority order:
Combat Music Priority that supplies its own Combat Music (e.g. a boss theme).Combat Music.Combat Music.If the active profile defines Combat Stems, they are started alongside the combat track as separate audio components and fade in or out as the nearby enemy count crosses each stem's Fade In At Enemy Count, building intensity as a fight grows. Ambient beds and scatter layers fade out during combat by default (opt back in per-layer with Play During Combat).
The Transitions section on the player component smooths out the edge cases that come from standing on a boundary or fighting trickling enemies. Every value defaults to 0, which is exactly the original instant behaviour - turn them up only where you want the extra polish.
| Property | Default | What it does |
|---|---|---|
| Zone Transition Cooldown | 0 | Debounce (seconds) on zone music/ambience changes so straddling a zone edge does not spam crossfades. A burst of enter/exit events collapses into one change once the player settles. |
| Interior Transition Debounce | 0 | Debounce on interior acoustic changes so the muffle/reverb does not flicker on and off in a doorway. |
| Combat Enter Delay | 0 | Wait this long after enemies are detected before combat music engages - avoids a stab of battle music for a foe only briefly in range. |
| Combat Exit Delay | 0 | Keep combat music going this long after the last enemy leaves or dies. This can prevent abrupt exploration/combat changes between nearby fights. Enemies reappearing within the window cancel the exit. |
IsInCombat still reports the raw "enemy in range" state; the new IsCombatMusicActive reports whether the combat music is engaged (it can linger after combat thanks to Combat Exit Delay). Force On/Off can make these values differ even with zero delays. IsCombatMusicActive reports effective combat state, not proof that a combat track is audible; a missing track or manual music override can prevent playback.
Each Audio Core Zone the player overlaps is pushed onto a stack sorted by Priority. The top zone decides the music/ambience. Exiting any zone pops it and the next one down resumes - no manual tracking needed.
| Rule | Behaviour |
|---|---|
| Higher priority wins | A priority-10 zone overrides a priority-5 zone even if entered second. |
| Equal priority | Do not rely on equal-priority ordering. Use different values when one overlapping zone must win. |
| Start inside a zone | Overlaps present at begin play are scanned, so spawning inside a volume uses that volume's audio. |
A zone provides sound in one of two ways: assign a Sound Profile (full package - day/night/combat music plus dynamic ambient beds and scatter), or just set inline Day/Night Music for a simple area. Its Ambience Mode can be:
Inherit - use this zone's profile ambience, or keep the current ambience if it has none.Silence - stop all ambient beds and scatter while inside, so only music plays (good for tense or dead spaces).Interior volumes work independently of zones: a zone decides which music plays; an interior decides how the whole soundscape sounds while you are inside it. They stack by Priority and all transitions blend over Blend Time.
The muffle and reverb run on a submix - by default the project's main output submix, so they affect everything you hear (music, SFX, dialogue, any audio), not just AudioCore.
| Property | Description |
|---|---|
| Muffle (+ Frequency, Resonance) | Low-pass filter on the whole mix - like hearing through a wall. Lower frequency = more muffled. |
| Reverb Effect | A Submix Effect Preset (usually a reverb) applied to the whole mix to give the space its acoustics. |
| Target Submix (Advanced) | Leave empty to affect the main output (recommended). Set only to limit the effect to one specific submix. |
| Music Volume Scale | Duck (lower) the AudioCore music while inside. 1 = unchanged, 0 = silent. |
| Exterior Bed / Scatter Volume Scale | Default leak for outdoor ambient beds (wind) and scatter (birds) heard through the walls. e.g. keep wind faint, silence birds. |
| Ambience Overrides | Per-layer indoor levels by tag - e.g. silence "Birds" but keep "Wind" at 0.4. Matches the Interior Tag set on a profile's layers and beats the defaults above. |
| Interior Ambience (+ Volume) | Optional room-tone loop that fades in while inside. |
| Interior Music / Interior Night Music | Optional dedicated track that replaces the zone/default music while inside, with its own day/night variant and resume override. |
A Audio Core Snapshot is a data asset describing a predefined mix state you push from gameplay: underwater, low-health, dream sequence, spirit realm, drunk. It is the same kind of acoustic state an interior applies, but driven by code/Blueprint instead of a volume - so it can react to anything (health, items, story beats).
// Push when the player goes underwater, remove when they surface
#include "GameplayTagContainer.h"
const FGameplayTag UnderwaterTag = FGameplayTag::RequestGameplayTag(FName(TEXT("AudioCore.Snapshot.Underwater")));
PlayerComp->PushAudioSnapshot(UnderwaterTag, UnderwaterSnapshot, /*Priority*/ 10);
PlayerComp->PopAudioSnapshot(UnderwaterTag);
Snapshots stack by priority and compose with any active interior: the highest-priority snapshot wins for muffle/reverb, and its music duck multiplies with the interior's. With no snapshot pushed, interiors behave exactly as before.
| Property | Description |
|---|---|
| Muffle (+ Frequency, Resonance) | Low-pass the whole mix - the classic underwater/concussed feel. |
| Submix Effect (+ Target Submix) | A submix effect (reverb, EQ, distortion) applied to all audio. Leave Target Submix empty for the main mix. |
| Music Volume Scale | Duck the music while active (multiplies with interior + manual ducks). |
| Music Pitch | Re-pitch the music - drop below 1 for a woozy drunk/dream slow-down. |
| Snapshot Ambience (+ Volume) | Optional looping tone that fades in while active (underwater rumble, spirit drone), on its own slot. |
| Blend Time | Seconds to blend the snapshot's effects in/out on push/pop. |
API on the player component: PushAudioSnapshot(Tag, Snapshot, Priority), PopAudioSnapshot(Tag), PopAudioSnapshotByAsset(Snapshot), ClearAudioSnapshots(), and queries GetActiveSnapshotCount, GetActiveSnapshotTag, IsSnapshotActive(Tag). Pushing the same non-empty tag again updates that entry. For an empty tag, push and remove by asset; popping an empty tag does not identify an effect. Create a snapshot via Content Browser > Miscellaneous > Data Asset > Audio Core Snapshot.
World sources are sounds that live in the level rather than ambience tied to the listener: waterfalls, forges, campfires, windmills, magical crystals, ocean surf, and flowing rivers. Each works the moment you assign a Sound - no attenuation asset to author - and is shaped by two editable radii:
Because they play through the normal audio path, an interior automatically muffles them and the Settings ambient slider controls them. Power users can still assign a custom Sound Attenuation asset, which then fully controls the falloff and overrides both radii.
Drop it where a sound should live, assign a Sound, and set the Audible Radius and Core Radius. No tick. Use Set Source Active to switch it on/off from gameplay (light the forge, brake the windmill), and the optional day/night, weather and season gates to limit when it plays.
Lay its spline along a river, stream, wall of flame, or stretch of surf and the sound plays all along it. Set one Sound and the two radii on the actor - there is nothing to configure per-section. A single spatialized voice continuously rides the point on the spline closest to the listener, so the engine's distance attenuation becomes a tube of sound wrapped around the whole path: full volume and both-ears near the line, directional and fading out toward the edge, the entire length (including right at the ends). The spline uses one moving emitter. It still updates the nearest point at runtime; profile its cost with your source count and target hardware.
Select the actor to see a live wireframe tube grow along the spline - cyan for the both-ears Core Radius and orange for the Audible Radius. The tube uses gravity-aligned cross-sections, so the rings stand upright and read naturally along the path instead of spinning around it. It renders with the viewport's Realtime mode on or off and is editor-only (stripped from cooked builds). Drag either radius and the tube updates immediately.
Per-point widths. Enable Use Per-Point Widths to give each spline point its own Audible and Core radius - a wide river mouth, a tight upstream channel, a fan of surf - and both the wireframe tube and the audio taper smoothly between points. The width list auto-syncs to the number of spline points (new points start at the current radius), and the index of each entry matches the point number you select in the level. Leave it off and the whole path uses the single Audible / Core Radius as before. (Per-point widths are ignored if you assign a custom Sound Attenuation asset.)
Assign a Sound, then size the Core Radius (the both-ears center) and Audible Radius (the outer reach). The AudioCore.Debug 1 overlay has a WORLD SOURCES section showing how many are placed and on, how many are audible right now, and the nearest source's state, distance and audible radius.
A loud source - a roaring waterfall, a wide river, a forge - should dominate the soundscape when you stand next to it. Turn on Duck Other Audio on any Sound Source or Spline Source and it gently lowers the player's music and ambience as the listener approaches, easing smoothly back to full at the Audible Radius. It is a tunable dip, not a mute, and the source never ducks itself.
It composes with every other volume rule (interior duck, manual/dialogue duck, snapshot duck, the Settings sliders) by multiplying in, and only affects AudioCore music + ambient beds + scatter - never dialogue or unrelated SFX. Spline sources measure proximity from the nearest point on the path. The AudioCore.Debug 1 overlay shows the live Proximity duck multipliers, and GetEnvironmentMusicDuck / GetEnvironmentAmbientDuck expose them to Blueprint.
Optional proximity checking: ducking is opt-in (off by default), and the player component only runs its lightweight proximity check while at least one ducking source is registered.
World sources and discovery volumes can be configured inline for a one-off, or driven by a profile data asset so one authored setup can be reused across the level. Assigning a profile fully drives the actor and its inline fields hide, so there is a single source of truth - tweak "RiverLoud" once and every river updates. Leave the profile empty and the inline fields return.
| Profile | Drives | Bundles |
|---|---|---|
| Audio Core Sound Source Profile | Point sources | Sound, Audible & Core radii, attenuation, concurrency, volume/pitch, fade, auto-play, settings routing, environmental ducking, and the day/night + weather/season gates. |
| Audio Core Spline Source Profile | Spline sources | The same world-source settings, authored for paths (river, surf, wall of flame). |
| Audio Core Discovery Profile | Discovery volumes | What the volume plays: stinger, one-shot, narration (+ music duck) and the pushed snapshot. The volume's shape and trigger rules (once / re-arm / Discovery Id) always stay per-placement. |
Create one via right-click in the Content Browser > Miscellaneous > Data Asset > pick the profile type.
The Audio Core Sound Emitter is a component you drop on any actor to have it play occasional one-shots on its own random timer - a wolf that howls now and then, chirping birds, a frog, an owl, dripping water, a sputtering machine. The sound comes from the actor and follows it, and everything is randomized to vary repeated clips. It is timer-driven (no per-frame tick) and a BlueprintSpawnableComponent.
| Property | Description |
|---|---|
| Sounds / No Immediate Repeat | Pool of one-shots; one is picked at random. No Immediate Repeat avoids consecutive reuse when multiple clips are available. |
| Min / Max Interval | Random gap (seconds) between plays. |
| Play Chance | Probability (0-1) it actually plays each time its timer fires, so the rhythm feels organic. |
| Random Start Delay | Stagger the first play so clustered emitters do not fire in unison. |
| Min / Max Burst, Burst Spacing | Fire several one-shots together (a flock or pack), each slightly apart with its own random volume/pitch. |
| Min / Max Volume, Min / Max Pitch | Random ranges applied per play. |
| Spatialize, Audible Radius, Core Radius | Play in 3D from the actor with the same both-ears core falloff, or turn off for a 2D sound. Optional custom Attenuation / Concurrency assets. |
| Auto Play, Respect Settings Volumes, Channel | Start on begin play, obey the Settings sliders, and route through Master x Ambient (wildlife/nature) or Master x SFX (mechanical). |
| Play During / Weather / Season / Play During Combat | The same gates as the rest of the system - e.g. owls at night, birds by day, birds fall silent in a fight. |
Runtime API: StartEmitter(), StopEmitter(), IsEmitting(), and PlayNow() to fire one immediately (honouring the gates and burst settings).
A Audio Core Discovery Volume is a Box or Sphere that fires a one-shot moment when the player walks in - perfect for vistas, ruins and reveals. Any combination plays together:
Snapshot Hold Time.It fires once by default (Trigger Once). For exploration saves, expose Has Triggered keyed by the stable Discovery Id to your own save system so a discovery stays discovered across sessions; or enable Re-Arm On Exit to let it fire again each time the player re-enters. The On Discovered event passes the discovering actor so you can drive quests, UI or markers in Blueprint, and Trigger Discovery lets you fire it manually.
AudioCore keeps a 24-hour clock that selects day vs night variants of music. You drive the time from whatever time/sky logic your project uses:
// Standard 24-hour clock (0-24): 12 = noon, 6.5 = 6:30 AM
PlayerComp->SetTimeOfDay(13.5f);
// Convenience for systems that report a 0-2400 clock value
// Decimal hours scaled by 100, not HHMM: 1200 = noon, 1850 = 6:30 PM.
PlayerComp->SetTimeOfDayScaled(1850.f);
Day Start Hour (default 6) and Night Start Hour (default 18) define the windows. When the time crosses a boundary, zones and profiles swap to their night/day track automatically. Calling SetTimeOfDay every frame is safe - music only re-evaluates when the day/night boundary is actually crossed.
Weather and season are tag-driven and system-agnostic. Map your project's (or any system's) current state to a Gameplay Tag and pass it in - AudioCore never reads any external system directly, it only reacts to the tag you give it.
#include "GameplayTagContainer.h"
PlayerComp->SetWeather(FGameplayTag::RequestGameplayTag(FName(TEXT("AudioCore.Weather.Rain"))));
PlayerComp->SetSeason(FGameplayTag::RequestGameplayTag(FName(TEXT("AudioCore.Season.Winter"))));
Ambient beds and scatter layers carry optional Weather/Season gates: an empty gate always plays, otherwise the layer only plays while the current tag matches. The On Weather Changed and On Season Changed events let you react in Blueprint (swap a cue, fire a stinger) without polling.
The Audio Core Settings subsystem holds Master, Music, SFX and Ambient volumes (0-1). Grab it from any Blueprint with Get AudioCore Settings (no object pin needed) or in C++ with UAudioCoreSettingsSubsystem::Get(this).
Audio Core components can use the stored channel levels directly. To also control other game sounds through Sound Classes, assign a Sound Mix and Sound Classes once on the subsystem: Audio Mix, Music Sound Class, SFX Sound Class, Ambient Sound Class. If you leave them unassigned the values are still stored and readable, and Master applies once at the audio device; Audio Core components apply their selected channel volume. Disable Respect Settings Volumes on an Audio Core component if that same channel multiplier is already applied through its Sound Class. Apply each channel once to avoid double attenuation.
| Function | Purpose |
|---|---|
| SetMasterVolume / SetMusicVolume / SetSFXVolume / SetAmbientVolume | Set a channel (0-1) and apply immediately. Wire to UI sliders. |
| GetMasterVolume / GetMusicVolume / GetSFXVolume / GetAmbientVolume | Read current values (e.g. to initialise sliders). |
| GetAllSettings | Snapshot all volumes as one FAudioCoreSettings struct (handy for saving). |
| SaveSettings / LoadSettings | Persist to / restore from GameUserSettings.ini. |
| OnSettingsChanged | Multicast event fired whenever any volume changes - bind reactive UI or your save system. |
// On a slider's OnValueChanged:
UAudioCoreSettingsSubsystem::Get(this)->SetMusicVolume(SliderValue);
// To initialise the slider:
MusicSlider->SetValue(UAudioCoreSettingsSubsystem::Get(this)->GetMusicVolume());
// Persist whenever volumes change
auto* S = UAudioCoreSettingsSubsystem::Get(this);
S->OnSettingsChanged.AddDynamic(this, &UMySave::OnAudioChanged);
// MySave stores GetAllSettings(); on load, push values back:
S->SetMasterVolume(Saved.MasterVolume);
S->SetMusicVolume(Saved.MusicVolume);
S->SetSFXVolume(Saved.SFXVolume);
S->SetAmbientVolume(Saved.AmbientVolume);
Drive the mix from gameplay events. All of these live on the Audio Core Player component.
| Function | What it does |
|---|---|
| PlayStinger(Sound, Vol, Pitch) | Fire a one-shot musical accent on top of the current mix (discovery chime, hit sting). Pair with SetMusicDuck to dip the music under it. |
| SetMusicDuck(Scale, BlendTime) | Lower the music to Scale (0-1) over BlendTime seconds, e.g. while dialogue plays. Stacks with any interior duck. |
| ClearMusicDuck(BlendTime) | Return the music to full over BlendTime seconds. |
| SetProfileOverride(Profile) | Force a Sound Profile to drive music + ambience regardless of zone, until cleared (scripted moments). |
| ClearProfileOverride() | Return to normal zone/default resolution. |
| SetMusicOverride(Sound) / ClearMusicOverride() | Force one specific track over zones and combat, then release it. |
| RefreshAudio() | Re-evaluate music + ambience now (after changing data, weather or season at runtime). |
| PushAudioSnapshot(Tag, Snapshot, Priority) | Push a predefined mix state (underwater, low-health, dream...) on top of the current acoustics. Highest priority wins; composes with interiors. |
| PopAudioSnapshot(Tag) / PopAudioSnapshotByAsset(Asset) / ClearAudioSnapshots() | Remove your snapshot by tag or exact asset. Clear Audio Snapshots removes every active snapshot; reserve it for a deliberate full reset. |
Read-only state is also exposed for HUDs and tools: IsInCombat, IsCombatMusicActive, GetNearbyEnemyCount, GetZoneStackDepth, GetInteriorStackDepth, IsInsideInterior, GetActiveTrack, GetActiveProfile, GetTimeOfDay, IsDay, GetWeather, GetSeason, GetActiveSnapshotCount, GetActiveSnapshotTag, IsSnapshotActive, and more. Events: OnWeatherChanged, OnSeasonChanged, and OnDayNightChanged.
AudioCore registers a starter vocabulary of weather and season tags so the gates work out of the box and show up in the tag picker. You are not limited to these - the Weather/Season gates and SetWeather/SetSeason accept any Gameplay Tag, so you can drive AudioCore from your own project's tags just as easily.
The AudioCore.Snapshot.* tags are a starter vocabulary for PushAudioSnapshot / PopAudioSnapshot; like weather and season they are only defaults - the snapshot API accepts any Gameplay Tag.
Every section of every AudioCore asset, actor and component shows an "About This Section / Actor / Component" banner at the top - a full, auto-wrapping description of what that section does, right in the Details panel. Combined with the per-property tooltips, the system is built to be usable without leaving the editor. The Details customization is editor-only. The descriptive text properties also exist on runtime objects.
| Console Command | Effect |
|---|---|
| AudioCore.Debug 1 | Show the live debug panel - a single, organized overlay drawn over the game viewport in PIE. |
| AudioCore.Debug 0 | Hide the panel. |
The panel groups every AudioCore system into labelled sections so the whole audio state can be read at a glance: Output / Settings (master, music, ambient, SFX), Music (active track, playback position, crossfade, interior duck, resume, manual-override flag), Combat (state, enemy count and the music transition-delay hysteresis), Ambience (active profile, beds playing / scatter layers, interior leak scales, proximity duck), Interior / Acoustics (active volume, muffle frequency, reverb, music/bed/scatter scales), Snapshots (active tag and stack depth), Zones (top zone, its priority and stack depth), World State (time of day, day window, weather and season tags), and World Sources (how many are placed and on, how many are audible right now versus outside their audible radius, any missing sounds, plus the nearest source's type, audible/out-of-range state, distance, audible radius, emitter count and ducking). Values are colour-coded - green for healthy/active, amber for warnings, blue for proximity ducking, dim for inactive/out-of-range - and missing or silent setups are flagged in place.
All log output is prefixed [AudioCore] and routed through the LogDSAudioCore category - filter the Output Log by it for clean AudioCore-only messages. Use the overlay while testing in PIE. Disable it with AudioCore.Debug 0 when finished.
Gameplay state crosses the network; audio is rendered locally. Listen servers and remote clients each run their own mix. Remote pawn copies and dedicated servers do not start player playback. Replicated properties carry persistent world state; reliable RPCs carry owner-only states and enemy death stingers.
BP_DemoNetworkState and DA_NetworkStates.On the server, obtain the affected player's possessed pawn and its Audio Core Player component. Call Client Push Audio State on that component, supplying a tag present in the State Map. Only its owning client receives the state. Use Client Pop Audio State with the same tag to release it, or Client Play Stinger for a one-shot. Do not use Get Player Pawn(0) to identify an arbitrary remote player on the server; use the actual pawn from your damage, interaction or respawn event.
The local Director keeps private states while that client's pawn is absent. After server possession of the replacement pawn, send Client Pop Audio State to its component to restore normal playback. For a player who first connects already dead, initialize the correct private state from your server's player initialization flow; owner RPCs are events, not a saved history for future connections.
Open BP_DemoNetworkState for commented examples. Assign its TargetPlayerAudio reference from the affected pawn, then call ApplyOwnerDeathState or ClearOwnerDeathState. The example uses the built-in DreamSequence tag as a private death mix and Underwater as a shared track state. Replace those tags and the State Map entries with your game's names. These events do not implement health or damage rules.
Open the example map and stop any active Play session. Run Automation RunTests AudioCore.Multiplayer from the editor console. The two tests start their own listen-server and dedicated-server sessions using temporary Play settings. They change PIE copies, join an additional client, exercise owner states, world state, enemy death/revival, source activation and pawn respawning, then close those sessions. Results appear in the Output Log. Keep the editor foreground or temporarily disable background CPU throttling while testing. The flying demo pawn is a listening controller; use your game's replicated movement and health systems for production gameplay.
Enable Show Plugin Content in the Content Browser and open /AudioCore/Core/Map/Example. Its GameMode and flying demo pawn are included under /AudioCore/Examples/Blueprints; no separate project content is required. Press Play, click the viewport, and use WASD and the mouse. E and Q move vertically.
The demonstration includes eighteen listening stations (three variations each for zones, interiors, discoveries, point sources, spline sources and combat) plus four working Blueprint recipe stations for music overrides, profile overrides, snapshots, and death/revive hooks. The graphs are laid out and commented, with matching cleanup paths. See the station guide and Blueprint integration notes. Twelve credited CC0 sounds are included. This demo is a listening walkthrough, not a production character controller.
Copy the AudioCore plugin into your project's Plugins directory, enable Audio Core, and restart Unreal Editor. Built-in Synthesis and MetaSound plugins are enabled by the descriptor. The demonstration runs using Audio Core and built-in engine assets. No external service or authoring tools are required.
Source is supplied for rebuilding. The verified release target is Unreal Engine 5.8.3 on Windows 64-bit. Other engine versions and platforms require separate validation. Assets saved in 5.8 are not supplied as backward-compatible 5.7 content.
Music resume relies on Sound Wave playback reporting and seek support. Complex Sound Cues and MetaSounds may not report a single meaningful playback position; test those assets and disable resume where necessary. Combat stems are started as separate components and are not sample-accurate Quartz scheduling.
See Third-party audio sources and licenses. Darksaint Games copyright notices cover the plugin source, not ownership of the separately credited CC0 recordings.
Make sure the pawn has an Audio Core Player component and that either a Default Profile with music or a Default Day Music sound is assigned.
The zone looks for the Audio Core Player component on the overlapping pawn. A pawn component is recommended. Pawn/controller lookup is supported, but owner-based enemy scans and initial overlap checks are simplest on the pawn. Confirm both collision components generate overlaps and the trigger overlaps the Pawn channel.
For Audio Core sounds, check Respect Settings Volumes and the relevant channel value. A Sound Mix is not required for the included demo. For other project sounds, configure the Sound Mix and Sound Classes and assign those classes to the sounds. Avoid applying the same channel through both the class and the component. Master applies once at the audio device.
Yes, sound slots accept MetaSound Sources as well as Sound Waves and Sound Cues. Test the source's looping and seeking behavior; not every procedural graph reports a usable playback position.
No. They are optional. Zones and the player component accept inline Day/Night/Combat music for simple setups. Profiles add day/night/combat music plus dynamic ambient beds and scatter that inline music cannot.
Enable Show Plugin Content in the Content Drawer Settings menu, then expand the Sources panel. Confirm the plugin is enabled and the descriptor is directly under YourProject/Plugins/AudioCore.
Click the Play viewport to give it focus. Use WASD and mouse, with E/Q for height. Confirm the loaded map is Example and its World Settings uses BP_AudioCoreDemoGameMode. A different project GameMode can spawn a different pawn.
Check Enemy Detection Radius on the spawned pawn's Audio Core Player component. Its general default is 2000 cm; the showroom pawn uses 550 cm to separate stations. Check active markers, their Pawn object channel, and Combat Music Priority. Give a boss a higher value than a grunt.
Call Notify Death on the defeated enemy's marker and confirm it becomes inactive. Check that no other active marker remains nearby. Check Combat Exit Delay and whether Combat Override is Force On. In multiplayer, call the death handler on the server and enable Replicates on the enemy; clients receive its inactive status.
Guard the death handler with Is Active For Audio and choose one notification route. If you explicitly notify before Destroy Actor, turn off Treat Destruction As Death on that marker.
Clear the manual music or profile override on completion, cancellation and teardown. Check the debug overlay for a manual override, combat state and active zone/interior. A profile override does not outrank a manual track or combat music.
Match the removal to the push: use the same non-empty Gameplay Tag, or Pop Audio Snapshot By Asset for the same asset when no tag was supplied. Include cancellation and EndPlay cleanup, as shown in BP_DemoSnapshotVolume.
Bring the editor to the foreground and click the game viewport. Check Unreal's background-audio preference, the Windows output device, volume sliders and the assigned sound. Use a stereo/game endpoint rather than a mono chat endpoint for positional listening.
Confirm Looping is enabled on the Sound Wave or authored inside the Sound Cue/MetaSound. A loop must have a suitable seam. Test the asset on its own. Disable Resume Music Position for sources without reliable seek support.
Set reusable values in the enemy Blueprint's component defaults, then Compile and Save. A change to one placed actor does not redefine the Blueprint. The supplied boss and grunt variants demonstrate inherited defaults.
Send your engine version, platform, the affected actor/Blueprint, the steps to reproduce, and relevant LogDSAudioCore messages. Include the active track, enemy count and stack depths from the debug overlay if the problem concerns selection or transitions. Contact Darksaint Games support.
Use Get AudioCore Director in a Widget, Game Mode, quest Blueprint or other object with a game-world context. This world subsystem remembers calls while the player pawn is absent and applies them to the next registered Audio Core Player component. It survives pawn replacement within the same world; it does not save state across map travel or application restarts.
Game.Audio.Boss and Game.Audio.Menu.Example: a boss state at priority 100 supplies Music; a menu state at priority 200 supplies only Music Duck = 0.2. The boss track continues quietly under the menu. Pop the menu tag to restore its level; pop the boss tag to return to normal zone/default selection. Enter/Exit Stingers follow changes to the top state, not every contributing field.
Director Play Music is a manual override above state music. Call Clear Music to release it. A null sound passed to Play Music means intentional silence. Director Set Profile Override and Set Combat Override also take precedence over their state fields. Clear Profile Override and Resume Auto Combat release those controls. Use the same API owner for applying and clearing an effect; do not mix direct component calls with Director calls for the same control.
On the base enemy's confirmed death event, call its Enemy Marker → Notify Death before Destroy Actor. Repeated calls and the automatic destruction hook produce one death stinger per life. Call Notify Revived when reusing that enemy. Set Active For Audio is for temporary exclusion such as fleeing or incapacitation; it does not define a new life. Detection requires query-enabled collision with the Pawn object type.
For player death, push your own death state through the Director and set Combat Override = Force Off in that entry. Pop that tag when the player respawns. Director state persists until explicitly released. World sources reconnect to the current player within 0.3 seconds after spawn or possession and then apply that player's gates and proximity ducking.
For underwater/low-health effects that must survive pawn replacement, use Director Push Snapshot and Pop Snapshot with a unique registered tag per effect. Direct player-component snapshots belong to that pawn. Reusing a tag updates that entry; it does not create a second independently owned effect.
The feature artwork is an illustration, not a screenshot of the included debug overlay. The supplied settings channels are Master, Music, SFX and Ambient. Release target: Unreal Engine 5.8, Windows x64. Network games use local playback with replicated world state and owner-targeted events. Independent split-screen mixes are not supplied.