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

Return to the regular view of this page.

GS_Audio

Audio management, event-based sound playback, multi-layer music scoring, mixing buses with effects, and Klatt formant voice synthesis with 3D spatial audio.

GS_Audio provides a complete audio solution for GS_Play projects. It includes a visual node-based audio event authoring system, multi-layer music scoring, named mixing buses with configurable effects chains, and a built-in Klatt formant voice synthesizer with 3D spatial audio. All features integrate with the GS_Play manager lifecycle and respond to standby mode automatically.

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

 

Contents


Audio Management

The Audio Manager singleton initializes the MiniAudio engine, manages mixing buses, and coordinates score track playback. It extends GS_ManagerComponent and participates in the standard two-stage initialization.

ComponentPurpose
Audio ManagerMaster audio controller – engine lifecycle, bus routing, event library loading, score management.

Audio Manager API


Audio Event Graph

A visual node-based editor for authoring complex sound events. Build audio processing chains with sources, filters, effects, and conditional routing — all evaluated as a data-flow graph at runtime using the gs_graphcanvas framework.

FeaturePurpose
Audio Event GraphVisual sound event editor — sources, filters, effects, routing, and phase lifecycle.

Audio Event Graph


Mixing & Effects

Named audio buses with configurable effects chains and environmental influence. Includes 9 built-in audio filter types.

Component / TypePurpose
GS_MixingBusCustom MiniAudio node for mixing and effects processing.
BusEffectsPairMaps a bus name to an effects chain.
AudioBusInfluenceEffectsEnvironmental effects with priority stacking.

Mixing & Effects API


Score Arrangement

Multi-layer music scoring with configurable time signatures, tempo, and layer control.

AssetPurpose
ScoreArrangementTrackMulti-layer music asset – time signature, BPM, fade, layers.
ScoreLayerIndividual track within a score arrangement.

Score Arrangement API


Klatt Voice Synthesis

Built-in text-to-speech using Klatt formant synthesis with 3D spatial audio.

ComponentPurpose
KlattVoiceSystemComponentShared SoLoud engine management, 3D listener tracking.
KlattVoiceComponentPer-entity voice with spatial audio, phoneme mapping, segment queue.

Klatt Voice API


Dependencies

  • GS_Core (required)
  • MiniAudio (third-party audio library)
  • SoLoud (embedded, for voice synthesis)

Installation

  1. Enable the GS_Audio gem in your project configuration.
  2. Ensure GS_Core and MiniAudio are also enabled.
  3. Create an Audio Manager prefab and add it to the Game Manager’s Startup Managers list.

See Also

For conceptual overviews and usage guides:

For related resources:


Get GS_Audio

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

1 - Audio Manager

Master audio controller – engine initialization, mixing bus routing, event library loading, score playback, and Audio Event Graph instance management.

The Audio Manager is the master audio controller for every GS_Play project. It extends GS_ManagerComponent and participates in the standard two-stage initialization managed by the Game Manager. On startup it initializes the MiniAudio engine, creates the named mixing bus graph, and coordinates score track playback.

Like all GS_Play managers, the Audio Manager responds to standby mode automatically — muting or pausing audio output when the game enters a blocking operation such as a stage change.

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

Audio Manager component in the O3DE Inspector

 

Contents


How It Works

Engine Lifecycle

When the Audio Manager activates, it initializes a MiniAudio engine instance and builds the mixing bus graph from its configured bus list.

Mixing Bus Routing

All audio output flows through named mixing buses. Each bus is a GS_MixingBus node in the MiniAudio graph with its own volume level and optional effects chain. The Audio Manager owns the top-level routing and exposes volume control per bus through the request bus.

Audio Event Graph Pooling

The Audio Manager maintains a template cache and instance pool for Audio Event Graphs. When a graph is played:

  • First request for a path loads and caches the GraphDocumentAsset
  • A GraphInstance is created from the cached asset
  • On release, idle instances are pooled for reuse (default pool size: 8)
  • Each instance is fully independent — variables, phase, and state do not bleed between instances

Score Playback

The Audio Manager coordinates playback of ScoreArrangementTrack assets — multi-layer musical scores with configurable tempo, time signature, and layer selection.


Inspector Properties

PropertyTypeDescription
Mixing BusesAZStd::vector<BusEffectsPair>Named mixing buses with optional effects chains.
Default Master VolumefloatInitial master volume (0.0 to 1.0).

API Reference

GS_AudioManagerComponent

FieldValue
TypeId{F28721FD-B9FD-4C04-8CD1-6344BD8A3B78}
ExtendsGS_Core::GS_ManagerComponent
HeaderGS_Audio/GS_AudioManagerBus.h

Audio Event Graph

Instanced, visual-graph-based sound events with full lifecycle control, variable injection, and 3D spatialization.

Playback Control

MethodParametersReturnsDescription
PlayAudioGraphconst AZStd::string& assetPathAZ::u32 instanceIdFire-and-forget graph playback. Auto-cleaned up when finished. Returns an instance ID.
AcquireAudioGraphconst AZStd::string& assetPathAZ::u32 instanceIdAcquires a graph instance for manual control. Caller is responsible for release.
FireAudioGraphAZ::u32 instanceIdvoidStarts or restarts playback on an acquired instance.
StopAudioGraphAZ::u32 instanceIdvoidStops playback cleanly and returns the instance to the pool.
StopAllAudioGraphsvoidEmergency stops all playing graph instances.
ReleaseAudioGraphAZ::u32 instanceIdvoidReleases a manually acquired instance back to the pool.
StopAudioGraphFadeAZ::u32 instanceId, float fadeTimevoidFades out and stops over the specified duration (seconds).

Lifecycle

MethodParametersReturnsDescription
SetAudioGraphLoopingAZ::u32 instanceId, bool loopingvoidEnables or disables the Loop phase.
FinishAudioGraphAZ::u32 instanceIdvoidTransitions to the Finish phase after current sounds complete.

Variable Control

Set graph variables at runtime to drive filter parameters, routing, and source selection.

MethodParametersReturnsDescription
SetAudioGraphVariableAZ::u32 instanceId, const AZStd::string& name, float valuevoidSets a float variable on the instance.
SetAudioGraphVariableIntAZ::u32 instanceId, const AZStd::string& name, int valuevoidSets an int variable.
SetAudioGraphVariableBoolAZ::u32 instanceId, const AZStd::string& name, bool valuevoidSets a bool variable.
SetAudioGraphVariableStringAZ::u32 instanceId, const AZStd::string& name, const AZStd::string& valuevoidSets a string variable.

Setting a variable marks dependent nodes dirty and re-evaluates only the affected portion of the graph on the next tick.

3D Spatialization

MethodParametersReturnsDescription
SetAudioGraphEntityAZ::u32 instanceId, const AZ::EntityId& entityIdvoidTracks entity position for 3D audio. Updated each tick.
SetAudioGraphPositionAZ::u32 instanceId, const AZ::Vector3& positionvoidFixed world position for 3D audio.
ClearAudioGraphSpatializationAZ::u32 instanceIdvoidDisables 3D spatialization (plays as 2D).

Usage Pattern

// Fire-and-forget
AudioManagerRequestBus::Broadcast(&AudioManagerRequests::PlayAudioGraph,
    "Assets/Audio/Footstep_Stone.audiograph");

// Manual control with variable injection
AZ::u32 instanceId = 0;
AudioManagerRequestBus::BroadcastResult(instanceId,
    &AudioManagerRequests::AcquireAudioGraph,
    "Assets/Audio/Ambience_Forest.audiograph");

AudioManagerRequestBus::Broadcast(&AudioManagerRequests::SetAudioGraphLooping, instanceId, true);
AudioManagerRequestBus::Broadcast(&AudioManagerRequests::SetAudioGraphEntity, instanceId, entityId);
AudioManagerRequestBus::Broadcast(&AudioManagerRequests::FireAudioGraph, instanceId);

// Later: set a variable to mute underwater
AudioManagerRequestBus::Broadcast(&AudioManagerRequests::SetAudioGraphVariable,
    instanceId, "underwater", 0.8f);

// Stop when done
AudioManagerRequestBus::Broadcast(&AudioManagerRequests::StopAudioGraph, instanceId);
AudioManagerRequestBus::Broadcast(&AudioManagerRequests::ReleaseAudioGraph, instanceId);

Mixing

MethodParametersReturnsDescription
SetMixerVolumeconst AZStd::string& busName, float volumevoidSets the volume of a named mixing bus (0.0 – 1.0).
GetMixerVolumeconst AZStd::string& busNamefloatReturns the current volume of a named mixing bus.
SetMasterVolumefloat volumevoidSets master output volume (0.0 – 1.0).
GetMasterVolumefloatReturns current master output volume.

Score

MethodParametersReturnsDescription
PlayScoreTrackconst AZ::Data::Asset<ScoreArrangementTrack>& trackvoidBegins playback of a score arrangement track.
StopScoreTrackvoidStops the currently playing score track.

Notification Bus: AudioManagerNotificationBus

Events broadcast by the Audio Manager. Multiple handler bus — any number of components can subscribe.

EventParametersDescription
OnScoreTrackStartedFired when a score track begins.
OnScoreTrackStoppedFired when a score track stops.
OnMixerVolumeChangedconst AZStd::string& busName, float volumeFired when a mixing bus volume changes.

See Also


Get GS_Audio

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

2 - Audio Event Graph

Visual graph editor for authoring complex sound events with filters, effects, routing, and phase lifecycle.

The Audio Event Graph is an FMOD-style visual editor for authoring complex sound events. Each .audiograph file defines one sound event as a node graph — sources, filters, effects, and routing all connected visually. At runtime, the graph maps directly to a miniaudio processing pipeline.

The Audio Event Graph uses the gs_graphcanvas framework with a DataFlowGraph topology. Nodes evaluate in topological order with dirty-propagation — only nodes affected by a change are re-evaluated.

Audio Event Graph Editor in O3DE Editor

 

Contents


Opening the Editor

Open the Audio Event Graph editor from the O3DE Editor menu: GS Tools > Audio Event Graph Editor.

Each graph is a standalone .audiograph file — use File > New to create one, or File > Open to load an existing graph. Multiple graphs can be open simultaneously in separate tabs.


How It Works

Audio Event Graphs use a data-flow model. Connections carry AudioRoute values — handles that represent a point in the miniaudio processing chain. The signal flows left to right:

  1. Entry nodes gate which phase is active (Start, Loop, or Finish)
  2. Source nodes create sound instances and output an AudioRoute
  3. Filter and effect nodes process the audio and pass it along
  4. Routing nodes (If/Switch) direct the signal based on conditions or variables
  5. The Output node wires the final AudioRoute to a mixing bus

Variables can be set from gameplay code at any time, causing affected nodes to re-evaluate without restarting the entire graph.


Node Catalog

Entry Nodes (Phase Gates)

NodePurpose
Aud_StartNodeActive during the Start phase
Aud_LoopNodeActive during the Loop phase
Aud_FinishNodeActive during the Finish phase

Entry nodes output a gate signal. Downstream nodes only produce audio when their entry gate is active.

Source Nodes

Source Nodes in Audio Event Editor

NodePurposeKey Properties
Aud_SoundNodeSingle audio asset playbackVolume, pitch, delay, looping, 3D spatialization
Aud_AudioPoolNodeRandom selection from a pool of audio assetsSame as SoundNode, plus asset pool list

Filter Nodes

Filter Nodes in Audio Event Editor

NodeFilter Type
LowPassLow-pass filter
HighPassHigh-pass filter
BandPassBand-pass filter
NotchNotch (band-reject) filter
PeakingEQPeaking EQ
LowShelfLow shelf filter
HighShelfHigh shelf filter

All filter nodes take an audio_in input and produce an audio_out output. Filter parameters (cutoff frequency, Q factor, gain) are configurable per-node or bindable to variables.

Effect Nodes

Effect Nodes in Audio Event Editor

NodePurpose
Aud_EchoNodeEcho / reverb effect

Routing Nodes

The built-in gs_graphcanvas IfNode and SwitchNode work with AudioRoute values. Use them for conditional audio paths based on game state variables (e.g., play different sounds based on surface type or weather).

Terminal Node

NodePurpose
Aud_OutputNodeWires the final audio chain to the mixing bus

Every graph needs exactly one Output node.


Phase Lifecycle

Audio Event Graph Lifecycle Nodes

Audio Event Graphs support a three-phase lifecycle for structured sound playback:

  1. Start — Initial playback. The Aud_StartNode gate is active. One-shot intro sounds play here.
  2. Loop — Repeating section. The Aud_LoopNode gate is active. Ambient loops and sustained sounds live here.
  3. Finish — Outro/tail. The Aud_FinishNode gate is active. Fade-outs and release tails play here.

Phases transition automatically: Start plays once, then Loop repeats (if looping is enabled), then Finish plays when FinishAudioGraph() is called. Not all phases are required — a simple one-shot sound only needs a Start node.


Using Variables

Variables let gameplay code control sound behavior at runtime. Common uses:

  • Filter parameters — Bind a filter’s cutoff frequency to a variable, then adjust it from code (e.g., underwater muffling)
  • Routing conditions — Use a variable as the condition for an If/Switch node to select different sound paths
  • Source selection — Gate different source nodes based on game state

Declare variables in the Variable Panel, then either bind them to input slots (right-click > Convert to Reference) or use Get/Set variable nodes.

At runtime, set variables via the Audio Manager API:

AudioManagerRequestBus::Broadcast(&AudioManagerRequests::SetAudioGraphVariable, instanceId, "underwater", 0.8f);

Setting a variable marks dependent nodes dirty and re-evaluates only the affected portion of the graph.


Extending with Custom Nodes

To add a custom audio node:

  1. Create a class inheriting from BaseNode and IDataFlowNode
  2. Register it with GS_AUTO_REGISTER_NODE_FOR(MyAudioNode, "audiograph")
  3. Implement Process(GraphExecutionContext& context)
  4. Follow the empty any pattern for inactive outputs:
void MyAudioNode::Process(GraphExecutionContext& context)
{
    auto inputAny = context.GetInputValueAny(this, "audio_in");
    if (inputAny.empty())
    {
        context.SetOutputValueAny(this, "audio_out", AZStd::any{});  // CRITICAL: truly empty
        return;
    }
    // Process audio...
    context.SetOutputValue(this, "audio_out", outputRoute);
}

The empty any pattern ensures that inactive paths don’t mask valid audio from other connections in multi-input slots.

For full details on node creation, see gs_graphcanvas Nodes.


Runtime API

Audio Event Graphs are played through the Audio Manager component. Key methods:

MethodDescription
PlayAudioGraph(path)Fire-and-forget playback (auto-cleanup)
AcquireAudioGraph(path)Get a handle for manual control
FireAudioGraph(id)Start/restart playback
StopAudioGraph(id)Stop playback
FinishAudioGraph(id)Transition to the Finish phase
SetAudioGraphVariable(id, name, value)Set a graph variable at runtime
SetAudioGraphLooping(id, looping)Enable/disable loop phase
SetAudioGraphEntity(id, entityId)Track entity position for 3D spatialization
SetAudioGraphPosition(id, pos)Fixed world position for 3D
StopAudioGraphFade(id, fadeTime)Fade out and stop

See the Audio Manager documentation for the full API reference.


See Also

3 - Mixing & Effects

Named audio mixing buses with configurable effects chains, environmental influence, and 9 built-in audio filter types.

GS_Audio provides a named mixing bus system built on custom MiniAudio nodes. Each GS_MixingBus is a node in the audio graph with its own volume level and an optional chain of audio filters. Buses are configured in the Audio Manager Inspector and can be controlled at runtime through the mixing request bus.

The effects system includes 9 built-in filter types covering frequency shaping, equalization, delay, and reverb. Environmental influence effects allow game world volumes (rooms, weather zones) to push effects onto buses with priority-based stacking.

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

Contents


GS_MixingBus

Custom MiniAudio node for mixing and effects processing.

FieldValue
TypeId{26E5BA8D-33E0-42E4-BBC0-6A3B2C46F52E}

API Reference

Request Bus: GS_MixingRequestBus

Mixer control commands. Singleton bus – Single address, single handler.

MethodParametersReturnsDescription
SetBusVolumeconst AZStd::string& busName, float volumevoidSets the volume of a named mixing bus (0.0 to 1.0).
GetBusVolumeconst AZStd::string& busNamefloatReturns the current volume of a named mixing bus.
MuteBusconst AZStd::string& busName, bool mutevoidMutes or unmutes a named mixing bus.
IsBusMutedconst AZStd::string& busNameboolReturns whether a named mixing bus is currently muted.
ApplyBusEffectsconst AZStd::string& busName, const AudioBusEffects& effectsvoidApplies an effects chain to a named mixing bus, replacing any existing effects.
ClearBusEffectsconst AZStd::string& busNamevoidRemoves all effects from a named mixing bus.
PushInfluenceEffectsconst AZStd::string& busName, const AudioBusInfluenceEffects& effectsvoidPushes environmental influence effects onto a bus with priority stacking.
PopInfluenceEffectsconst AZStd::string& busName, int priorityvoidRemoves influence effects at the specified priority level from a bus.

Audio Filters

All 9 built-in filter types. Each filter is configured as part of an effects chain applied to a mixing bus.

FilterTypeDescription
GS_LowPassFilterFrequency cutoffAttenuates frequencies above the cutoff point. Used for muffling, distance simulation, and underwater effects.
GS_HighPassFilterFrequency cutoffAttenuates frequencies below the cutoff point. Used for thinning audio, radio/telephone effects.
GS_BandPassFilterBand isolationPasses only frequencies within a specified band, attenuating everything outside. Combines low-pass and high-pass behavior.
GS_NotchFilterBand removalAttenuates frequencies within a narrow band while passing everything outside. The inverse of band-pass.
GS_PeakingEQFilterBand boost/cutBoosts or cuts frequencies around a center frequency with configurable bandwidth. Used for tonal shaping.
GS_LowShelfFilterLow frequency shelfBoosts or cuts all frequencies below a threshold by a fixed amount. Used for bass adjustment.
GS_HighShelfFilterHigh frequency shelfBoosts or cuts all frequencies above a threshold by a fixed amount. Used for treble adjustment.
GS_DelayFilterEcho/delayProduces delayed repetitions of the input signal. Configurable delay time and feedback amount.
GS_ReverbFilterRoom reverbSimulates room acoustics by adding dense reflections. Configurable room size and damping.

Data Structures

BusEffectsPair

Maps a bus name to an effects chain configuration. Used in the Audio Manager’s Inspector to define per-bus effects at design time.

FieldValue
TypeId{AD9E26C9-C172-42BF-B38C-BB06FC704E36}
FieldTypeDescription
Bus NameAZStd::stringThe name of the mixing bus this effects chain applies to.
EffectsAudioBusEffectsThe effects chain configuration for this bus.

AudioBusEffects

A collection of audio filter configurations that form an effects chain on a mixing bus.

FieldValue
TypeId{15EC6932-1F88-4EC0-9683-6D80AE982820}
FieldTypeDescription
FiltersAZStd::vector<AudioFilter>Ordered list of audio filters applied in sequence.

AudioBusInfluenceEffects

Environmental effects with priority-based stacking. Game world volumes (rooms, weather zones, underwater areas) push influence effects onto mixing buses. Higher priority influences override lower ones.

FieldValue
TypeId{75D039EC-7EE2-4988-A2ED-86689449B575}
FieldTypeDescription
PriorityintStacking priority. Higher values override lower values when multiple influences target the same bus.
EffectsAudioBusEffectsThe effects chain to apply as an environmental influence.

See Also

For conceptual overviews and usage guides:

For component references:

  • Audio Manager – Master controller that owns the mixing bus graph

For related resources:

  • Audio Events – Events route their output through mixing buses

Get GS_Audio

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

4 - Score Arrangement

Multi-layer musical score system for dynamic music – tempo, time signatures, fade control, and layer selection.

The Score Arrangement system provides multi-layer dynamic music for GS_Play projects. A ScoreArrangementTrack asset defines a musical score with configurable tempo, time signature, fade behavior, and multiple layers that can be enabled or disabled at runtime. This allows game music to adapt to gameplay state – adding or removing instrumental layers, changing intensity, or crossfading between sections.

Score tracks are loaded and controlled through the Audio Manager request bus.

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

Score Arrangement asset in the O3DE Asset Editor

 

Contents


Data Model

ScoreArrangementTrack

A multi-layer musical score asset. Each track defines the musical structure and contains one or more layers that play simultaneously.

FieldValue
TypeId{DBB48082-1834-4DFF-BAD2-6EA8D83F1AD0}
ExtendsAZ::Data::AssetData
ReflectionRequires GS_AssetReflectionIncludes.h — see Serialization Helpers
FieldTypeDescription
Track NameAZStd::stringIdentifier for this score track.
Time SignatureTimeSignaturesThe time signature for this score (e.g. 4/4, 3/4, 6/8).
BPMfloatTempo in beats per minute.
Fade In TimefloatDuration in seconds for the score to fade in when playback begins.
Fade Out TimefloatDuration in seconds for the score to fade out when playback stops.
LoopboolWhether the score loops back to the beginning when it reaches the end.
LayersAZStd::vector<ScoreLayer>The musical layers that compose this score.
Active LayersAZStd::vector<int>Indices of layers that are active (audible) at the start of playback.

ScoreLayer

A single musical layer within a score arrangement. Each layer represents one track of audio (e.g. drums, bass, melody) that can be independently enabled or disabled.

FieldValue
TypeId{C8B2669A-FAEA-4910-9218-6FE50D2E588E}
FieldTypeDescription
Layer NameAZStd::stringIdentifier for this layer within the score.
Audio AssetAZ::Data::Asset<AudioClipAsset>The audio clip for this layer.
VolumefloatBase volume level for this layer (0.0 to 1.0).
Fade TimefloatDuration in seconds for this layer to fade in or out when toggled.

TimeSignatures (Enum)

Supported musical time signatures for score arrangement tracks.

FieldValue
TypeId{6D6B5657-746C-4FCA-A0AC-671C0F064570}
ValueBeats per MeasureBeat UnitDescription
FourFour4Quarter note4/4 – Common time. The most widely used time signature.
FourTwo4Half note4/2 – Four half-note beats per measure.
TwelveEight12Eighth note12/8 – Compound quadruple meter. Four groups of three eighth notes.
TwoTwo2Half note2/2 – Cut time (alla breve). Two half-note beats per measure.
TwoFour2Quarter note2/4 – Two quarter-note beats per measure. March time.
SixEight6Eighth note6/8 – Compound duple meter. Two groups of three eighth notes.
ThreeFour3Quarter note3/4 – Waltz time. Three quarter-note beats per measure.
ThreeTwo3Half note3/2 – Three half-note beats per measure.
NineEight9Eighth note9/8 – Compound triple meter. Three groups of three eighth notes.

See Also

For conceptual overviews and usage guides:

For component references:


Get GS_Audio

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

5 - Klatt Voice Synthesis

Custom text-to-speech via Klatt formant synthesis with 3D spatial audio, phoneme mapping, and voice profiling.

The Klatt Voice Synthesis system provides custom text-to-speech for GS_Play projects using Klatt formant synthesis with full 3D spatial audio. It uses SoLoud internally for speech generation and MiniAudio for spatial positioning.

The system has two layers:

  • KlattVoiceSystemComponent – A singleton that manages the shared SoLoud engine instance and tracks the 3D audio listener position.
  • KlattVoiceComponent – A per-entity component that generates speech, queues segments, applies voice profiles, and emits spatialized audio from the entity’s position.

Voice characteristics are defined through KlattVoiceProfile assets containing frequency, speed, waveform, formant, and phoneme mapping configuration. Phoneme maps convert input text to ARPABET phonemes for the Klatt synthesizer, with support for custom pronunciation overrides.

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

Klatt Voice Profile asset in the O3DE Asset Editor

 

Contents


Components

KlattVoiceSystemComponent

Singleton component that manages the shared SoLoud engine and 3D listener tracking.

FieldValue
TypeId{F4A5D6E7-8B9C-4D5E-A1F2-3B4C5D6E7F8A}
ExtendsAZ::Component, AZ::TickBus::Handler
BusKlattVoiceSystemRequestBus (Single/Single)

KlattVoiceComponent

Per-entity voice component with spatial audio, phoneme mapping, and segment queue.

FieldValue
TypeId{4A8B9C7D-6E5F-4D3C-2B1A-0F9E8D7C6B5A}
ExtendsAZ::Component, AZ::TickBus::Handler
Request BusKlattVoiceRequestBus (Single/ById, entity-addressed)
Notification BusKlattVoiceNotificationBus (Multiple/Multiple)

API Reference

Request Bus: KlattVoiceSystemRequestBus

System-level voice management. Singleton bus – Single address, single handler.

MethodParametersReturnsDescription
GetSoLoudEngineSoLoud::Soloud*Returns a pointer to the shared SoLoud engine instance.
SetListenerPositionconst AZ::Vector3& positionvoidUpdates the 3D audio listener position for spatial voice playback.
SetListenerOrientationconst AZ::Vector3& forward, const AZ::Vector3& upvoidUpdates the 3D audio listener orientation.
GetListenerPositionAZ::Vector3Returns the current listener position.
IsEngineReadyboolReturns whether the SoLoud engine has been initialized and is ready.

Request Bus: KlattVoiceRequestBus

Per-entity voice synthesis controls. Entity-addressed bus – Single handler per entity ID.

MethodParametersReturnsDescription
Speakconst AZStd::string& textvoidConverts text to speech and plays it. Uses the component’s configured voice profile.
SpeakWithParamsconst AZStd::string& text, const KlattVoiceParams& paramsvoidConverts text to speech using the specified voice parameters instead of the profile defaults.
StopSpeakingvoidImmediately stops any speech in progress and clears the segment queue.
IsSpeakingboolReturns whether this entity’s voice is currently producing speech.
QueueSegmentconst AZStd::string& textvoidAdds a speech segment to the queue. Queued segments play in order after the current segment finishes.
ClearQueuevoidClears all queued speech segments without stopping current playback.
SetVoiceProfileconst AZ::Data::Asset<KlattVoiceProfile>& profilevoidChanges the voice profile used by this component.
GetVoiceProfileAZ::Data::Asset<KlattVoiceProfile>Returns the currently assigned voice profile asset.
SetSpatialConfigconst KlattSpatialConfig& configvoidUpdates the 3D spatial audio configuration for this voice.
GetSpatialConfigKlattSpatialConfigReturns the current spatial audio configuration.
SetVolumefloat volumevoidSets the output volume for this voice (0.0 to 1.0).
GetVolumefloatReturns the current output volume.

Notification Bus: KlattVoiceNotificationBus

Events broadcast by voice components. Multiple handler bus – any number of components can subscribe.

EventParametersDescription
OnSpeechStartedconst AZ::EntityId& entityIdFired when an entity begins speaking.
OnSpeechFinishedconst AZ::EntityId& entityIdFired when an entity finishes speaking (including all queued segments).
OnSegmentStartedconst AZ::EntityId& entityId, int segmentIndexFired when a new speech segment begins playing.
OnSegmentFinishedconst AZ::EntityId& entityId, int segmentIndexFired when a speech segment finishes playing.

Data Types

KlattVoiceParams

Core voice synthesis parameters controlling the Klatt formant synthesizer output.

FieldValue
TypeId{8A9C7F3B-4E2D-4C1A-9B5E-6D8F9A2C1B4E}
FieldTypeDescription
Base FrequencyfloatFundamental frequency (F0) in Hz. Controls the base pitch of the voice.
SpeedfloatSpeech rate multiplier. 1.0 is normal speed.
DeclinationfloatPitch declination rate. Controls how pitch drops over the course of an utterance.
WaveformKlattWaveformGlottal waveform type used by the synthesizer.
Formant ShiftfloatShifts all formant frequencies up or down. Positive values raise pitch character, negative values lower it.
Pitch VariancefloatAmount of random pitch variation applied during speech for natural-sounding intonation.

KlattVoiceProfile

A voice profile asset combining synthesis parameters with a phoneme mapping.

FieldValue
TypeId{2CEB777E-DAA7-40B1-BFF4-0F772ADE86CF}
ReflectionRequires GS_AssetReflectionIncludes.h — see Serialization Helpers
FieldTypeDescription
Voice ParamsKlattVoiceParamsThe synthesis parameters for this voice profile.
Phoneme MapAZ::Data::Asset<KlattPhonemeMap>The phoneme mapping asset used for text-to-phoneme conversion.

KlattVoicePreset

A preset configuration for quick voice setup.

FieldValue
TypeId{2B8D9E4F-7C6A-4D3B-8E9F-1A2B3C4D5E6F}
FieldTypeDescription
Preset NameAZStd::stringDisplay name for this preset.
ProfileKlattVoiceProfileThe voice profile configuration stored in this preset.

KlattSpatialConfig

3D spatial audio configuration for voice positioning.

FieldValue
TypeId{7C9F8E2D-3A4B-5F6C-1E0D-9A8B7C6D5E4F}
FieldTypeDescription
Enable 3DboolWhether this voice uses 3D spatialization. When false, audio plays as 2D.
Min DistancefloatDistance at which attenuation begins. Below this distance the voice plays at full volume.
Max DistancefloatDistance at which the voice reaches minimum volume.
Attenuation ModelintThe distance attenuation curve type (linear, inverse, exponential).
Doppler FactorfloatIntensity of the Doppler effect applied to this voice. 0.0 disables Doppler.

KlattPhonemeMap

Phoneme mapping asset for text-to-ARPABET conversion with custom overrides.

FieldValue
TypeId{F3E9D7C1-2A4B-5E8F-9C3D-6A1B4E7F2D5C}
ReflectionRequires GS_AssetReflectionIncludes.h — see Serialization Helpers
FieldTypeDescription
Base MapBasePhonemeMapThe base phoneme dictionary to use as the foundation for conversion.
OverridesAZStd::vector<PhonemeOverride>Custom pronunciation overrides for specific words or patterns.

PhonemeOverride

A custom pronunciation rule that overrides the base phoneme map for a specific word or pattern.

FieldValue
TypeId{A2B5C8D1-4E7F-3A9C-6B2D-1F5E8A3C7D9B}
FieldTypeDescription
WordAZStd::stringThe word or pattern to match.
PhonemesAZStd::stringThe ARPABET phoneme sequence to use for this word.

Enumerations

KlattWaveform

Glottal waveform types available for the Klatt synthesizer.

FieldValue
TypeId{8ED1DABE-3347-44A5-B43A-C171D36AE780}
ValueDescription
SawSawtooth waveform. Bright, buzzy character.
TriangleTriangle waveform. Softer than sawtooth, slightly hollow.
SinSine waveform. Pure tone, smooth and clean.
SquareSquare waveform. Hollow, reed-like character.
PulsePulse waveform. Variable duty cycle for varied timbres.
NoiseNoise waveform. Breathy, whisper-like quality.
WarbleWarble waveform. Modulated tone with vibrato-like character.

BasePhonemeMap

Available base phoneme dictionaries for text-to-ARPABET conversion.

FieldValue
TypeId{D8F2A3C5-1B4E-7A9F-6D2C-5E8A1B3F4C7D}
ValueDescription
SoLoud_DefaultThe default phoneme mapping built into SoLoud. Covers standard English pronunciation.
CMU_FullThe full CMU Pronouncing Dictionary. Comprehensive English phoneme coverage with over 130,000 entries.

KTT Voice Tags

KTT (Klatt Text Tags) are inline commands embedded in strings passed to KlattVoiceComponent::SpeakText. They are parsed by KlattCommandParser::Parse and stripped from the spoken text before synthesis begins — they are never heard.

Format: <ktt attr1=value1 attr2=value2>

Multiple attributes can be combined in a single tag. Attribute names are case-insensitive. String values may optionally be wrapped in quotes. An empty value (e.g. speed=) resets that parameter to the voice profile default.


speed=X

Override the speech speed multiplier from this point forward.

Range0.15.0
Default resetspeed= (restores profile default)
1.0Normal speed
Normal speech <ktt speed=2.0> fast bit <ktt speed=> back to default.

decl=X / declination=X

Pitch declination — how much pitch falls over the course of the utterance. Both decl and declination are accepted.

Range0.01.0
0.0Steady pitch (no fall)
0.8Strong downward drift
Rising <ktt decl=0.0> steady <ktt decl=0.8> falling voice.

waveform="TYPE"

Change the glottal waveform used by the synthesizer, setting the overall character of the voice.

ValueCharacter
sawDefault, neutral voice
triangleSofter, smoother
sin / sinePure tone, robotic
squareHarsh, mechanical
pulseRaspy, textured
noiseWhispered, breathy
warbleWobbly, character voice
<ktt waveform="noise"> whispered section <ktt waveform="saw"> normal voice.

vowel=X

First formant (F1) frequency multiplier. Shifts the quality of synthesised vowel sounds.

1.0Normal
> 1.0More open vowel quality
< 1.0More closed vowel quality
<ktt vowel=1.4> different vowel colour here.

accent=X

Second formant (F2) frequency multiplier. Shifts accent or dialect colouration.

1.0Normal
< 1.0Shifted accent colouring
<ktt accent=0.8> shifted accent here.

pitch=X

F0 pitch variance amount. Controls how much pitch varies during synthesis.

1.0Normal variance
> 1.0More expressive intonation
< 1.0Flatter, more monotone
<ktt pitch=2.0> very expressive speech <ktt pitch=0.1> flat monotone.

pause=X

Insert a pause of X seconds at this position in the voice playback. Value is required — there is no default.

Hello.<ktt pause=0.8> How are you?

Combined Example

Dialogue string using typewriter text commands and KTT voice tags together:

[b]Warning:[/b] [color=#FF0000]do not[/color] proceed.[pause=1]
<ktt waveform="square" pitch=1.8>This is a mechanical override.<ktt pause=0.5><ktt waveform="saw" pitch=1.0>
[speed=3]Resuming normal protocol.[/speed]

See Also

For conceptual overviews and usage guides:

For component references:

  • Audio Manager – Manager lifecycle that the voice system participates in

Get GS_Audio

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

6 - Third Party Implementations

Integration guides for third-party audio systems with GS_Audio.

This section will contain integration guides for connecting third-party audio middleware and tools with the GS_Audio system.

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


Get GS_Audio

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