Quick Start
- Enable the plugin
Edit β Plugins β search "Audio Core" β Enable β restart the editor. AudioCore enables the MetaSound and Synthesis plugins it depends on automatically.
- Add the player component
On your player pawn (Blueprint or C++) add an
Audio Core Playercomponent. This one component drives all music, ambience, combat, interiors and day/night. - Give it music
Either assign a
Default Profile(a Sound Profile data asset) for the full package, or just drop a sound intoDefault Day Musicfor a basic setup. Optionally setCombat Music. - Place a zone (optional)
Drag an
Audio Core Zoneinto the level, size its Box/Sphere, and assign a Sound Profile or inline Day/Night music. Walking in takes over the soundscape; walking out fades back. - Mark your enemies (optional)
Add an
Audio Core Enemy Markercomponent to enemy actors so they trigger combat music when near the player. - Drive time of day (optional)
Call
SetTimeOfDay(0β24)from your own time/sky logic so day/night music variants switch automatically. - Test in PIE
Type
AudioCore.Debug 1in the console to show the live debug overlay.
How It Fits Together
AudioCore is built around one component on the player plus a few optional actors and data assets. There is no manager actor to place and no required setup beyond the player component.
- Audio Core Player (component) decides what you hear β it owns a zone stack, an interior stack, the enemy scan, the day/night clock, and the music crossfade slots.
- Sound Profile (data asset) bundles a complete soundscape β day/night/combat music, looping ambient beds, and random scatter one-shots.
- Zones choose which profile/music plays in an area. Interior Volumes change how the whole mix sounds while inside (muffle, reverb, ducking, ambience leak).
- Enemy Markers feed the combat state. Settings subsystem bridges your options menu and save system to channel volumes.
Components & Actors
Audio Core Player
Add to your player pawn. The heart of the system β manages the zone & interior stacks, scans for enemies, runs the day/night clock, and crossfades music across two slots. Exposes a full Blueprint runtime API.
UAudioCorePlayerComponentAudio 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.
AAudioCoreZoneAudio 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.
AAudioCoreInteriorVolumeAudio Core Enemy Marker
Add to any enemy actor. 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. boss theme).
UAudioCoreEnemyMarkerAudio 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.
UAudioCoreSettingsSubsystemSound Profile
Data asset bundling music + dynamic ambience. Assign to a zone or the player's Default Profile slot. Create via Content Browser β Miscellaneous β Data Asset β Audio Core Sound Profile.
UAudioCoreSoundProfileAudio Core Sound Source
A world-positioned point emitter: waterfall, forge, campfire, surf, humming crystal. Engine attenuation handles distance falloff and virtualizes it when far. Muffled by interiors automatically.
AAudioCoreSoundSourceAudio Core Spline Source
A world emitter that follows a path. Lay the spline along a river, wall of flame, or stretch of surf and one voice rides the nearest point to the listener β a tube of sound along the entire path.
AAudioCoreSplineSourceAudio 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. Timer-driven, no tick.
UAudioCoreSoundEmitterComponentAudio Core Snapshot
Data asset for 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 music. Composes with interiors.
UAudioCoreSnapshotAudio Core Discovery Volume
A Box or Sphere that fires a one-shot moment when the player walks in: a stinger, SFX one-shot, narration (with auto music duck), and/or a pushed mix snapshot. Fires once by default with a save-friendly Discovery Id.
AAudioCoreDiscoveryVolumeSound / Spline Source Profile
Reusable data assets that bundle a complete world-emitter setup. Author "RiverLoud" or "Campfire" once and reuse it anywhere. Assigning one fully drives the source and hides its inline fields.
UAudioCoreWorldSourceProfilePlayer Component β Key Properties
| 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 / Night Music | none | Simple inline fallback music when no profile is set. Night falls back to Day if empty. |
| Combat Music | none | Component-level combat track, used when no nearby enemy or active profile supplies one. |
| Enemy Detection Radius | 2000 cm | Distance within which active enemy markers trigger combat music. |
| Enemy Check Interval | 0.25 s | Seconds between enemy scans. |
| Crossfade Duration | 2.0 s | 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 s | 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 Γ Music for music; Master Γ Ambient for ambience). |
| Day Start Hour / Night Start Hour | 6 / 18 | Hours (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. Any sound asset works in every slot β Sound Wave, Sound Cue, or MetaSound Source. Profiles are optional; zones and the player component also accept inline music for basic setups.
Music Section
| Property | Description |
|---|---|
| Day Music | Looping music played during the day. |
| 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). Each stem has: Stem, Fade In At Enemy Count, Volume, and Fade Time. |
Ambient Beds β Continuous Loops
Steady layers that play the whole time the area is active: wind, rain, room tone, river, crowd, machinery.
| Property | Description |
|---|---|
| Sound | The looping sound for this bed (Wave / Cue / MetaSound). |
| Volume / Pitch Multiplier | Steady level and playback speed. |
| Volume / Pitch Drift & Rate | Humanization: how far and how quickly volume/pitch slowly wander so long loops never sound static. |
| Random Start Offset | Start the loop at a random point so reused assets don't phase-lock. |
| Play During | Day & Night, Day Only, or Night Only. |
| Weather / Season | Optional tag gates. Empty = always; otherwise only plays when the current tag matches. |
| Play During Combat | Off (default) fades the bed 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). |
Scatter Layers β Occasional One-Shots
Intermittent sounds fired on a random timer: birds, insects, distant animals, creaks, gusts. Layers are auto-staggered so they never fire in lock-step.
| Property | Description |
|---|---|
| Sounds | Pool of one-shots; one is chosen each time the layer fires. |
| No Immediate Repeat | Shuffle so the same clip never plays twice in a row. |
| 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 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. |
| Spatialize, Min/Max Radius, Min/Max Elevation | Place each one-shot at a random spot around the listener, or play it as 2D. |
| Attenuation / Concurrency | Optional Sound Attenuation (3D falloff) and Sound Concurrency (cap simultaneous plays) assets. |
Music & Resume
Music plays through two audio slots that ping-pong, so every change is a smooth crossfade of Crossfade Duration seconds. Music is non-positional (2D) β it always plays at full level regardless of listener position.
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:
- Per-enemy β the nearby active enemy with the highest
Combat Music Prioritythat supplies its ownCombat Music(e.g. a boss theme). - Active profile β the current Sound Profile's
Combat Music. - Component β the player component's
Combat Music.
If the active profile defines Combat Stems, they start in sync with the combat track 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 edge cases from standing on a boundary or fighting trickling enemies. Every value defaults to 0 β 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 doesn't spam crossfades. |
| Interior Transition Debounce | 0 | Debounce on interior acoustic changes so muffle/reverb doesn't flicker 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. The single biggest quality win β stops music whiplashing between back-to-back fights. Enemies reappearing within the window cancel the exit. |
IsInCombat reports the raw "enemy in range" state. IsCombatMusicActive reports whether the combat music is engaged β it can linger after combat thanks to Combat Exit Delay. With both delays at 0 they are identical.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.
| Rule | Behaviour |
|---|---|
| Higher priority wins | A priority-10 zone overrides a priority-5 zone even if entered second. |
| Equal priority | The most recently entered zone sits on top. |
| Start inside a zone | Overlaps present at Begin Play are scanned, so spawning inside a volume uses that volume's audio immediately. |
A zone provides sound via a Sound Profile (full package β day/night/combat music plus dynamic ambient beds and scatter), or just inline Day/Night Music for a simple area. Its Ambience Mode can be Inherit (use this zone's profile ambience) or Silence (stop all ambient beds and scatter β for tense or dead spaces).
Interior Volumes
Interior volumes are orthogonal to 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.
| 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 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 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. |
| Ambience Overrides | Per-layer indoor levels by tag β e.g. silence "Birds" but keep "Wind" at 0.4. |
| Interior Ambience (+ Volume) | Optional room-tone loop that fades in while inside. |
| Interior Music / Interior Night Music | Optional dedicated track that replaces 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 pushed 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 PlayerComp->PushAudioSnapshot(Tag_AudioCore_Snapshot_Underwater, UnderwaterSnapshot, /*Priority*/ 10); PlayerComp->PopAudioSnapshot(Tag_AudioCore_Snapshot_Underwater);
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.
| 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. |
| 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). |
| 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), ClearAudioSnapshots(), and queries GetActiveSnapshotCount, GetActiveSnapshotTag, IsSnapshotActive(Tag).
World Audio Sources
World sources are sounds that live in the level rather than ambience tied to the listener β waterfalls, forges, campfires, windmills, magical crystals, ocean surf, flowing rivers. Each works the moment you assign a Sound β no attenuation asset to author β and is shaped by two editable radii:
- Audible Radius β the outer reach. Full level inside, fades to silence at this distance, virtualized (essentially free) beyond it.
- Core Radius β the inner core. Inside it the sound is full volume and rendered to both ears (non-spatialized), so standing near it surrounds you. Outside the core, the sound is directional.
Sound Source (Point)
Drop it where a sound should live, assign a Sound, and set the two radii. No tick. Use Set Source Active to switch it on/off from gameplay. Supports optional day/night, weather and season gates.
Spline Source (Path)
Lay its spline along a river, stream, wall of flame, or stretch of surf and the sound plays all along it. A single spatialized voice rides the point on the spline closest to the listener β a tube of sound wrapped around the whole path. One voice, no gaps, no phasing, and it costs nothing when out of range.
Select the actor to see a live wireframe tube in the viewport β cyan for the Core Radius and orange for the Audible Radius. Enable Use Per-Point Widths to give each spline point its own radii β a wide river mouth, a tight upstream channel.
Environmental Ducking (Proximity Masking)
Turn on Duck Other Audio on any Sound Source or Spline Source to gently lower the player's music and ambience as the listener approaches. The dip scales with proximity and multiple sources blend β the strongest duck wins per channel, so overlapping rivers never stack into silence.
- Ducked Music Level / Ducked Ambience Level β the levels (0β1) that music and ambience reach at the heart of the source. 1 = no change; 0.6 = down to 60%.
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 hides its inline fields β tweak "RiverLoud" once and every river updates.
| Profile | Drives | Bundles |
|---|---|---|
| Sound Source Profile | Point sources | Sound, radii, attenuation, concurrency, volume/pitch, fade, auto-play, settings routing, environmental ducking, and day/night + weather/season gates. |
| Spline Source Profile | Spline sources | Same world-source settings, authored for paths (river, surf, wall of flame). |
| Discovery Profile | Discovery volumes | What the volume plays: stinger, one-shot, narration + snapshot. The volume's shape and trigger rules stay per-placement. |
Periodic Sound Emitters
Drop Audio Core Sound Emitter on any actor to have it play occasional one-shots on its own random timer β a wolf that howls, chirping birds, a frog, an owl, dripping water, a sputtering machine. Timer-driven (no per-frame tick), and a BlueprintSpawnableComponent.
| Property | Description |
|---|---|
| Sounds / No Immediate Repeat | Pool of one-shots; one is picked at random each fire, never repeating back-to-back. |
| Min / Max Interval | Random gap (seconds) between plays. |
| Play Chance | Probability (0β1) it actually plays each time its timer fires. |
| Random Start Delay | Stagger the first play so clustered emitters don't fire in unison. |
| Min / Max Burst, Burst Spacing | Fire several one-shots together (a flock or pack). |
| Spatialize, Audible Radius, Core Radius | Play in 3D from the actor with the same both-ears core falloff, or turn off for 2D. |
| 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.
Discovery Volumes
An 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:
- Stinger β a musical accent on the music channel.
- One-Shot β a 2D sound effect (whoosh, shimmer).
- Narration β a voice line that can auto-duck music for its duration.
- Snapshot β push a mix snapshot for a music swell/mood, auto-popped after
Snapshot Hold Time.
Fires once by default (Trigger Once). For exploration saves, expose Has Triggered keyed by the stable Discovery Id to your own save system. 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.
Day / Night
AudioCore keeps a 24-hour clock that selects day vs night variants of music. Drive the time from whatever 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 PlayerComp->SetTimeOfDayScaled(1830.f); // 1830 = 6:30 PM
Day Start Hour (default 6) and Night Start Hour (default 18) define the windows. 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 current state to a Gameplay Tag and pass it in β AudioCore never reads any external system directly.
PlayerComp->SetWeather(Tag_AudioCore_Weather_Rain); PlayerComp->SetSeason(Tag_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 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).
To drive actual channel levels, assign a Sound Mix and Sound Classes once on the subsystem: Audio Mix, Music Sound Class, SFX Sound Class, Ambient Sound Class.
| Function | Purpose |
|---|---|
| Set/GetMasterVolume, Set/GetMusicVolume, Set/GetSFXVolume, Set/GetAmbientVolume | Set or read a channel (0β1). Wire Set functions to UI 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. |
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); // On load, push values back: S->SetMasterVolume(Saved.MasterVolume); S->SetMusicVolume(Saved.MusicVolume); S->SetSFXVolume(Saved.SFXVolume); S->SetAmbientVolume(Saved.AmbientVolume);
Runtime API (Blueprint)
All functions 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. 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. |
| 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. |
| 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β¦). Highest priority wins. |
| PopAudioSnapshot(Tag) / ClearAudioSnapshots() | Remove a snapshot by tag, or remove them all, blending back to the interior/neutral mix. |
Read-only state exposed for HUDs and tools: IsInCombat, IsCombatMusicActive, GetNearbyEnemyCount, GetZoneStackDepth, GetInteriorStackDepth, IsInsideInterior, GetActiveTrack, GetActiveProfile, GetTimeOfDay, IsDay, GetWeather, GetSeason, GetActiveSnapshotCount, IsSnapshotActive, and more.
Native Gameplay Tags
AudioCore registers a starter vocabulary of weather, season and snapshot tags so the gates work out of the box. You are not limited to these β all gates and API calls accept any Gameplay Tag.
Debugging
| 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: Output / Settings, Music (active track, playback position, crossfade, resume, override), Combat (state, enemy count, transition-delay hysteresis), Ambience (active profile, beds, scatter, proximity duck), Interior / Acoustics (active volume, muffle, reverb), Snapshots, Zones, World State (time of day, weather, season), and World Sources (audible vs virtualized, nearest source state). Values are colour-coded β green for healthy/active, amber for warnings, blue for proximity ducking, dim for inactive.
[AudioCore] and routed through the LogDSAudioCore category. Filter the Output Log by it for clean AudioCore-only messages. The panel is editor/PIE-only β zero runtime cost in a shipped game.Multiplayer
- Add the
Audio Core Playercomponent to your player pawn. Each client hears its own mix based on its own zone/interior/combat state. - Gate setup on Begin Play with
Is Locally Controlledif you only want it active on the local player's pawn. - Enemy markers are evaluated client-side against the local listener, so each client's combat state is independent.
- The Settings subsystem is a GameInstance subsystem β one independent instance per client.
FAQ
Audio Core Player component and that either a Default Profile with music or a Default Day Music sound is assigned.Audio Core Player component on the overlapping pawn. Confirm the component is on the pawn (not the controller) and the zone's trigger overlaps the Pawn channel.