This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Audio Manager

The base audio controller — engine lifecycle, project settings, the authoritative listener, mixing channels, event libraries, and the accessors GS_AudioPro builds on.

Base — ships in GS_Audio.

The Audio Manager is the singleton that owns the audio system. It initializes the engine, builds the mixing channel graph, loads your event libraries, and carries the listener that all spatialization is measured against.

It extends GS_ManagerComponent, so it participates in the standard manager lifecycle — including headless deployment if your project has no Game Manager. Like every manager it responds to standby, pausing audio while a blocking operation such as a stage change completes.

FieldValue
ComponentGS_AudioManagerComponent
TypeId{F28721FD-B9FD-4C04-8CD1-6344BD8A3B78}
ExtendsGS_Core::GS_ManagerComponent
Request BusAudioManagerRequestBus (Single / Single)

For usage guides and setup examples, see The Basics: GS_Audio.

Audio Manager component in the O3DE Inspector

 

Contents


What It Owns

The base manager does not tick. Per-frame work belongs to the systems that need it.


The Listener

There is no separate listener component. The manager carries the listener, and you point it at an entity. One listener, unambiguous.

MethodEffect
SetListenerBoth position and facing follow this entity.
SetListenerSpatialTargetPosition only — proximity and distance are computed from here.
SetListenerOrientationTargetFacing only — direction and HRTF are computed from here.
GetListenerReturns the current listener entity.
GetListenerSpatialTargetReturns the current spatial target.
GetListenerOrientationTargetReturns the current orientation target.
GetListenerTransformReturns the resolved listener transform.

Splitting the listener for third-person

The split targets exist for third-person games, and they are the recommended setup for one.

In third person, the camera and the character are in different places, and the two halves of “where is the listener” want different answers. Proximity should follow the character — how close a sound is to you is about your body, not your camera. Direction should follow the camera — what is on your left is about where you are looking.

Set them separately and the manager switches to computing both, which is what produces the result the framework was tuned for. Set only SetListener and both follow one entity, which is correct for first-person.


Project Settings

GS_AudioProjectSettings is a reflected block on the manager, so the component panel is the configuration UI. TypeId {2B7F4C19-8E63-4A05-9D2C-6F1A8B3E7D40}.

SettingDefaultDescription
SpatializationBinauralStereo (HRTF off) or Binaural (Steam Audio HRTF).
HRTF InterpolationNearestNearest is cheap and suits point sources. Bilinear costs more and suits wide-band material.
HRTF Volume1.0Level of the binaural path.
Frame Size ModeAutoAuto matches the audio device period. Recommended — a mismatched frame size is audible as crunching.
Fixed Frame Size512Used only in Fixed mode.
Default Min Distance1.0Metres.
Default Max Distance100.0Metres.

HRTF settings are hidden unless spatialization is Binaural; the fixed frame size is hidden unless the mode is Fixed.

Geometry settings are not here — they are additive on the Pro manager, and the base gem never reflects them.


API Reference

Request Bus: AudioManagerRequestBus

Singleton bus — single address, single handler. Call via Broadcast.

Libraries and playback

MethodParametersDescription
AddAudioLibraryAZ::Data::Asset<AudioEventLibrary>Load a library and register its events.
RemoveAudioLibraryconst AZStd::string& nameUnregister a library’s events.
PlayEvent2Dconst AZStd::string& eventNameFire an event with no spatialization.
PlayEventAtLocationconst AZStd::string& eventName, const AZ::Vector3& positionFire at a world position.
PlayEventOnEntityconst AZStd::string& eventName, AZ::EntityId entityFire on an entity and track it.

Volume and channels

MethodParametersDescription
ChangeMasterVolumefloat volumeSet the master output level.
ChangeChannelVolumeconst AZStd::string& channel, float volumeSet a named volume channel’s level.
GetMixingChannelNames—Enumerate the configured channel names.
GetMixingBusconst AZStd::string& channelRetrieve a channel’s mixing bus.

These are the natural attachment point for the options system’s audio sliders.

Environmental influence

MethodParametersDescription
ApplyAudioEffectInfluenceinfluencer, effectsImpose an effect set on channels while the influencer applies.
RemoveAudioEffectInfluenceinfluencerRemove that influencer’s contribution.

See Mixing & Effects for how influences stack.

Mix effect routing

Runtime control of named mix effect chains — RerouteMixEffect, SetMixEffectParam, SetMixEffectParamOn and the registration and wiring calls. Documented in full on the Mix Effects page.

Listener

The seven listener methods are tabled under The Listener.


Extending with GS_AudioPro

Worth understanding even if you never write a gem against it, because it is a clean example of how GS gems layer.

GS_AudioPro does not subclass the base manager’s internals or reach into its private state. It fetches primitives across a small accessor surface and attaches its own nodes to them:

AccessorReturnsUsed for
GetEnginethe miniaudio enginecreating sounds
GetGraphthe node graphallocating nodes
GetEndpointthe terminal nodeattaching output
GetMixingBusa volume channelrouting into a channel
GetSteamAudioContextthe shared Steam Audio contextreusing one context
GetSteamAudioHrtfthe shared HRTFreusing one HRTF
GetSteamAudioFrameSizethe audio timestepmatching block size
GetAudioProjectSettingsthe settings blockreading base configuration

Two accessors run the other way and are null in a base-only install — this is how the base gem stays standalone while Pro enriches it:

AccessorPurpose
RegisterSpatialSim / GetSpatialSimPro registers its geometric simulator; the base per-voice spatializer consumes occlusion values from it if one is present.
GetReverbSendNodeThe tap base voices use to feed Pro’s geometry-driven reverb.

The interface those two are typed against is declared in the base gem and implemented in Pro. That is the entire enrichment mechanism: base defines the socket, Pro supplies the plug, and nothing breaks when the plug is absent.

The Pro manager subclasses the base one and declares itself incompatible with it, so the two cannot coexist on an entity. A project running Pro puts the Pro manager component on its manager prefab in place of the base one, and authors everything — channels, libraries, project settings — on that single component.


See Also

For related systems:

For conceptual overviews and usage guides:


Get GS_Audio

GS_Audio — Explore this gem on the product page and add it to your project.