AudioCore

Version 1.0   Unreal Engine 5.8   Darksaint Games   2026

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.

Start Here

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.

A few terms

TermMeaning
PawnThe actor controlled by the player. A Character is a type of Pawn.
ComponentA feature attached to an actor, such as Audio Core Player or Enemy Marker.
Data asset / profileA saved set of settings that you can reuse. Editing a shared profile changes every actor using it.
Volume / triggerAn invisible region that reacts when the player enters or leaves.
DuckTemporarily lower a sound's volume, then restore it.
SnapshotA temporary mix preset, such as muffled low-health audio.
PIEPlay In Editor: the Play button runs the level without packaging a game.
UnitsDistances are centimeters, durations are seconds, and volume multipliers normally range from 0 (silent) to 1 (unchanged).

Installation and First Run

  1. Use the prebuilt AudioCore-Win64.zip with Unreal Engine 5.8 on Windows. The source archive requires a compatible Unreal C++ build toolchain.
  2. Save your project and close its editor before installing or replacing plugin binaries. Extract the folder named AudioCore into your project's Plugins folder. Create Plugins if it does not exist.
  3. Check the folder structure: YourProject/Plugins/AudioCore/AudioCore.uplugin. Do not leave an extra ZIP wrapper folder between Plugins and AudioCore.
  4. Open the project. Go to Edit > Plugins, search for Audio Core, and enable it if necessary. Accept the restart if Unreal requests one. The descriptor enables the built-in Synthesis and MetaSound dependencies.
  5. Open the Content Drawer with Ctrl+Space. In its Settings menu, enable Show Plugin Content. If the folder tree is hidden, open the Sources panel.
  6. Under Audio Core Content, open Core > Map > Example. The asset path is /AudioCore/Core/Map/Example.
  7. Press Play, then click the game viewport. Use WASD and the mouse to fly; E/Q move up/down. Press Esc to stop. Use a stereo output device or headphones when comparing direction and distance.
  8. Follow the cyan central walkway. Galleries A–C contain 18 listening stations. Gallery D contains four Blueprint recipe stations. Read the signs, enter a platform, then leave it completely before trying the next one.

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.

Your First Soundscape

  1. Open the Blueprint for the pawn your GameMode actually spawns. If unsure, inspect World Settings > GameMode Override and that GameMode's Default Pawn Class.
  2. In the Components panel, choose Add > Audio Core Player. Add it once. Select it to edit its Details.
  3. For a first test, assign a looping Sound Wave to Default Day Music. Leave Default Profile empty so a profile does not override this field.
  4. Open the Sound Wave, enable Looping, and save it. One-shot accents should keep Looping off. Audio Core does not turn every assigned sound into a loop.
  5. Compile and save the pawn Blueprint. Press Play. If you hear the music, the basic setup is complete.
  6. To add ambience, create a folder in your project's Content, right-click, choose Miscellaneous > Data Asset, and choose Audio Core Sound Profile. Name it DA_MyOutdoorProfile.
  7. Open the profile. Assign Day Music, optionally Night Music and Combat Music. Add one Ambient Beds entry and assign a looping sound. Start its Volume at 0.25.
  8. Assign the asset to the player component's Default Profile, compile, save, and test again. The profile now supplies the music and ambient bed.

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.

Build an Area Step by Step

Change music in a region

  1. Place an Audio Core Zone from the Place Actors panel.
  2. Choose Box or Sphere. Box Extent is a half-size: 500 cm extends 500 cm in each direction from the center.
  3. Assign Day Music directly, or assign a Sound Profile. A profile's music takes precedence over the inline music fields.
  4. Give intentionally overlapping zones different Priority values, such as 10 outside and 20 inside.
  5. Enter and leave the region in Play. Confirm the outdoor track returns after the last zone is left.

Make a room sound enclosed

  1. Place an Audio Core Interior Volume around the room.
  2. Leave Target Submix empty to affect the main output. Enable Muffle and try 1200 Hz.
  3. Set Music Volume Scale to 0.5 and Blend Time to 1 second.
  4. Optionally assign a looping Interior Ambience sound. Its volume is separate from the music duck.
  5. Enter, listen, then leave. The mix should blend back. A music zone can occupy the same room independently.

Place a local sound or a sound path

  1. Place an Audio Core Sound Source, assign a looping Sound, and keep Auto Play enabled.
  2. Try Audible Radius 750 and Core Radius 150. Keep Core Radius below Audible Radius.
  3. For a path, use Audio Core Spline Source. Select its Spline component and move/add spline points in the viewport. Stations 05, 11 and 17 show diagonal, bent and closed paths.
  4. Keep actor scale at 1,1,1 for predictable layout; shape the path with spline points and the sound field with the radius settings.
  5. Approach from different directions. Turn on Duck Other Audio only if this source should lower the background music and ambience.

Add a discovery accent

  1. Place an Audio Core Discovery Volume and assign a non-looping Stinger.
  2. Leave Trigger Once enabled for a one-time event. Enable Re-Arm On Exit if each visit should replay it.
  3. Assign a unique Discovery Id if your save system will remember it. The ID does not save anything by itself.
  4. Use On Discovered to trigger a quest or notification. Store and restore Has Triggered through your own save system.

Blueprint Recipes and Gameplay Hooks

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.

BlueprintWhat to copyHow to test
BP_DemoMusicOverrideSet 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_DemoProfileOverrideSet 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_DemoSnapshotVolumePush 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_DemoDeathReviveHandleDeath 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_DemoBossInherited EnemyMarker defaults: separate combat tracks with priority 10 / 100.Station 18: listen with both enemies nearby, then approach from either side.

Read and adapt an override graph

  1. Open the recipe and select Event Graph.
  2. Start at ActorBeginOverlap. The first Branch checks that OtherActor is local player 0. This prevents scenery or other pawns from activating the demonstration.
  3. Audio Core Get Player Component returns the local component. The validity Branch prevents calling a missing component.
  4. The action node applies the change, then sets Applied. On exit the matching clear/pop node releases it.
  5. EndPlay checks Applied and component validity before cleanup. Copy this path when an effect owner can be destroyed or unloaded.
  6. Replace the overlap event with your own gameplay event, such as starting a conversation or entering a low-health state. Keep the matching restoration event.

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.

Connect enemy death correctly

  1. Add Audio Core Enemy Marker to your base enemy Blueprint.
  2. Make sure the enemy has query-enabled collision with Object Type Pawn; the proximity scan searches that channel.
  3. Optionally assign Combat Music, Combat Music Priority and a non-looping Death Stinger on the marker.
  4. When your health system confirms death, check Is Active For Audio. If true, call Notify Death on the marker. This removes the enemy from the audio count and requests an immediate rescan. A configured Combat Exit Delay can still keep music playing for that delay.
  5. Choose explicit Notify Death or automatic Treat Destruction As Death. Disable the automatic option if you call Notify Death and then destroy the actor, so the same defeat does not play its stinger twice.
  6. For a pooled or revived enemy, call Notify Revived. For a living enemy that leaves a fight, call Set Active For Audio(false), then true when it returns.

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.

Dialogue, player death and scripted combat

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.

How It Fits Together

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.

Components & Actors

Audio Core Player

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.

UAudioCorePlayerComponent

Audio Core Zone

A 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.

AAudioCoreZone

Audio Core Interior Volume

A 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.

AAudioCoreInteriorVolume

Audio Core Enemy Marker

Add 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).

UAudioCoreEnemyMarker

Audio Core Settings

GameInstance 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.

UAudioCoreSettingsSubsystem

Sound Profile

Data 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.

UAudioCoreSoundProfile

Audio Core Sound Source

A 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.

AAudioCoreSoundSource

Audio Core Spline Source

A 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.

AAudioCoreSplineSource

Audio Core Sound Emitter

A 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.

UAudioCoreSoundEmitterComponent

Audio Core Snapshot

Data 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.

UAudioCoreSnapshot

Audio Core Discovery Volume

A 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.

AAudioCoreDiscoveryVolume

Sound / Spline Source Profile

Reusable 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.

UAudioCoreWorldSourceProfile

Discovery Profile

A 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

Audio Core Player - key properties

PropertyDefaultDescription
Default ProfilenoneSound Profile used outside all zones (music + ambience). Overrides the inline Default*Music when it defines music.
Default Day Music / Default Night MusicnoneSimple inline fallback music when no profile is set. Night falls back to Day.
Combat MusicnoneComponent-level combat track, used when no nearby enemy or active profile supplies one.
Enemy Detection Radius2000Distance (cm) within which active enemy markers trigger combat music.
Enemy Check Interval0.25Seconds between enemy scans.
Crossfade Duration2.0Seconds to blend between music tracks.
Resume Music PositiontrueResume a track where it left off instead of restarting it next time it plays.
Resume Memory Duration30In-game seconds a saved position stays valid before the track restarts. 0 or less = never expire.
Respect Settings VolumestrueScale this component's audio by the Settings sliders (Master x Music for music; Master x Ambient for ambience).
Day Start Hour / Night Start Hour6 / 18Hours (24h clock) that mark the day and night windows.

Sound Profiles

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.

Music section

PropertyDescription
Day MusicLooping music played during the day. Optional.
Night MusicLooping music played at night. Falls back to Day Music if empty.
Combat MusicTrack used while enemies are near and no nearby enemy supplies its own.
Combat StemsOptional 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.

Ambient Beds section (continuous loops, not music)

Steady layers that play the whole time the area is active: wind, rain, room tone, river, crowd, machinery. Add one bed per sound.

PropertyDescription
SoundThe looping sound for this bed (Wave / Cue / MetaSound).
Volume / Pitch MultiplierSteady level and playback-speed for the bed.
Volume Drift / Pitch Drift / Drift RateHumanization: how far and how quickly the volume/pitch slowly wander so long loops never sound dead-static.
Random Start OffsetStart the loop at a random point so reused assets do not phase-lock.
Play DuringDay & Night, Day Only, or Night Only.
Weather / SeasonOptional tag gates. Empty = always; otherwise only plays when the current weather/season tag matches.
Play During CombatOff (default) fades the bed out during combat; on keeps it underneath the fight.
Interior Tag / Interior Volume ScaleLet interior volumes quiet this bed by tag, or set a fixed indoor level (-1 = inherit the interior's default).

Scatter Layers section (occasional one-shots)

Intermittent sounds fired on a random timer: birds, insects, distant animals, creaks, gusts. Layers use separate randomized timers to reduce obvious repetition.

PropertyDescription
SoundsPool of one-shots; one is chosen each time the layer fires.
No Immediate RepeatAvoid consecutive reuse when the pool contains more than one clip.
Min / Max IntervalRandom gap (seconds) between plays.
Min / Max Burst, Burst SpacingFire several one-shots together (e.g. a flock), each slightly apart and with its own random vol/pitch/spot.
Play ChanceProbability (0-1) the layer actually plays each time its timer fires.
Min / Max Volume, Min / Max PitchRandom ranges applied per play.
Play During / Weather / Season / Play During CombatSame gating options as ambient beds.
Spatialize, Min/Max Radius, Min/Max ElevationPlace each one-shot at a random spot around the listener (distance and vertical angle), or play it as 2D.
Attenuation / ConcurrencyOptional Sound Attenuation (3D falloff) and Sound Concurrency (cap simultaneous plays) assets.
Interior Tag / Interior Volume ScalePer-interior indoor level control by tag (-1 = inherit the interior's default).

Music & Resume

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.

Combat Music

While one or more active enemy markers are inside Enemy Detection Radius, combat music takes over. The track is resolved in priority order:

  1. Per-enemy - the nearby active enemy with the highest Combat Music Priority that supplies its own Combat Music (e.g. a boss theme).
  2. Active profile - the current Sound Profile's Combat Music.
  3. Component - the player component's 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).

Transition Cooldowns & Hysteresis

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.

PropertyDefaultWhat it does
Zone Transition Cooldown0Debounce (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 Debounce0Debounce on interior acoustic changes so the muffle/reverb does not flicker on and off in a doorway.
Combat Enter Delay0Wait 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 Delay0Keep 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.

Zones & Priority Stacking

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.

RuleBehaviour
Higher priority winsA priority-10 zone overrides a priority-5 zone even if entered second.
Equal priorityDo not rely on equal-priority ordering. Use different values when one overlapping zone must win.
Start inside a zoneOverlaps 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:

Interior Volumes

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.

PropertyDescription
Muffle (+ Frequency, Resonance)Low-pass filter on the whole mix - like hearing through a wall. Lower frequency = more muffled.
Reverb EffectA 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 ScaleDuck (lower) the AudioCore music while inside. 1 = unchanged, 0 = silent.
Exterior Bed / Scatter Volume ScaleDefault leak for outdoor ambient beds (wind) and scatter (birds) heard through the walls. e.g. keep wind faint, silence birds.
Ambience OverridesPer-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 MusicOptional dedicated track that replaces the zone/default music while inside, with its own day/night variant and resume override.

Mix Snapshots

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.

PropertyDescription
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 ScaleDuck the music while active (multiplies with interior + manual ducks).
Music PitchRe-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 TimeSeconds 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 Audio Sources (Proximity & Spline)

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.

Audio Core Sound Source (point)

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.

Audio Core Spline Source (path)

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.

Environmental Ducking (proximity masking)

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.

Reusable Profiles

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.

ProfileDrivesBundles
Audio Core Sound Source ProfilePoint sourcesSound, 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 ProfileSpline sourcesThe same world-source settings, authored for paths (river, surf, wall of flame).
Audio Core Discovery ProfileDiscovery volumesWhat 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.

Periodic Sound Emitter

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.

PropertyDescription
Sounds / No Immediate RepeatPool of one-shots; one is picked at random. No Immediate Repeat avoids consecutive reuse when multiple clips are available.
Min / Max IntervalRandom gap (seconds) between plays.
Play ChanceProbability (0-1) it actually plays each time its timer fires, so the rhythm feels organic.
Random Start DelayStagger the first play so clustered emitters do not fire in unison.
Min / Max Burst, Burst SpacingFire several one-shots together (a flock or pack), each slightly apart with its own random volume/pitch.
Min / Max Volume, Min / Max PitchRandom ranges applied per play.
Spatialize, Audible Radius, Core RadiusPlay 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, ChannelStart 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 CombatThe 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).

Discovery Volumes

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:

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.

Day / Night

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 & Season

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.

Settings & Volume Control

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.

FunctionPurpose
SetMasterVolume / SetMusicVolume / SetSFXVolume / SetAmbientVolumeSet a channel (0-1) and apply immediately. Wire to UI sliders.
GetMasterVolume / GetMusicVolume / GetSFXVolume / GetAmbientVolumeRead current values (e.g. to initialise sliders).
GetAllSettingsSnapshot all volumes as one FAudioCoreSettings struct (handy for saving).
SaveSettings / LoadSettingsPersist to / restore from GameUserSettings.ini.
OnSettingsChangedMulticast event fired whenever any volume changes - bind reactive UI or your save system.

UI sliders

// On a slider's OnValueChanged:
UAudioCoreSettingsSubsystem::Get(this)->SetMusicVolume(SliderValue);

// To initialise the slider:
MusicSlider->SetValue(UAudioCoreSettingsSubsystem::Get(this)->GetMusicVolume());

Bridging your save system

// 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);

Runtime API (Blueprint)

Drive the mix from gameplay events. All of these live on the Audio Core Player component.

FunctionWhat 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.

Native Gameplay Tags

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.

AudioCore.Weather.Clear AudioCore.Weather.Overcast AudioCore.Weather.Fog AudioCore.Weather.Rain AudioCore.Weather.Storm AudioCore.Weather.Snow AudioCore.Weather.Wind AudioCore.Season.Spring AudioCore.Season.Summer AudioCore.Season.Autumn AudioCore.Season.Winter AudioCore.Snapshot.Underwater AudioCore.Snapshot.LowHealth AudioCore.Snapshot.DreamSequence AudioCore.Snapshot.SpiritRealm AudioCore.Snapshot.Drunk

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.

Editor Help Banners

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.

Debugging

Console CommandEffect
AudioCore.Debug 1Show the live debug panel - a single, organized overlay drawn over the game viewport in PIE.
AudioCore.Debug 0Hide 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.

Multiplayer Notes

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.

First multiplayer setup

  1. Enable Replicates on your player pawn and add one Audio Core Player component. Leave Component Replicates enabled. Possess the pawn through your game's server-authoritative spawning flow. Audio Core detects possession automatically; do not add another component on each client.
  2. Place exactly one Audio Core Network State actor in the persistent level. In Shared State, assign your State Map and starting weather, season and time. The example uses BP_DemoNetworkState and DA_NetworkStates.
  3. From server gameplay, call Set World Weather, Set World Season or Set World Time Of Day on that actor. To share a boss encounter or other named mix, call Push Shared Audio State; call Pop Shared Audio State with the same tag when it ends. Clients joining later receive the current values.
  4. Keep zone, interior and discovery volumes in the level on all machines. Their overlap handlers accept only locally controlled players. Each client's enemy scan uses its own pawn location.
  5. Enable Replicates on enemies. Their Audio Core Enemy Marker replicates its active status, combat track and priority. Call Notify Death on the server before Destroy Actor. Call Notify Revived on the server when reusing a pooled enemy.

Only one player dies, opens a menu or hears a cue

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.

What is shared and what stays local

Repeat the network checks

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.

Included Demonstration

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.

Integration and Distribution

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.

FAQ

No music plays on Begin Play

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.

Zone music does not change when I walk in

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.

Volume sliders do not change anything

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.

Can I use MetaSounds?

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.

Do I need Sound Profiles?

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.

I cannot see Audio Core Content

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.

I cannot move in the example

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.

Combat starts too far away, or the wrong enemy wins

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.

Combat will not stop after death

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.

A death accent plays twice

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.

The wrong track keeps playing after a cutscene

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.

A snapshot never goes away

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.

I hear nothing when the editor is in the background

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.

A loop stops, clicks, or resumes at the wrong point

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.

Changes disappear when I place a new enemy

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.

What should I include when requesting help?

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.

Control audio from any Blueprint: Director and State Map

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.

  1. Keep one Audio Core Player component on your local player pawn. Set the default profile there and confirm the demo works before adding gameplay hooks.
  2. In the Content Browser, create a Data Asset using Audio Core State Map. Register your own tags in Project Settings → Gameplay Tags, for example Game.Audio.Boss and Game.Audio.Menu.
  3. Add one States entry per tag. Match tags exactly and keep them unique. Set a Priority, then only the fields this state should control: Profile, Music, Snapshot, Music Duck, or Combat Override.
  4. Assign that State Map on the player component. From your gameplay event, call Get AudioCore Director → Push Audio State with the matching tag. On completion, call Pop Audio State with the same tag.
  5. Test two simultaneous states. Higher priorities win each field they define; unspecified fields can come from lower states. Equal priorities favor the most recent push. A Priority Override of −1 uses the map entry's priority. Zero or greater overrides it.

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.

Death, respawn and temporary effects

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.

Playback and ownership limits

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.