16#include <unordered_map>
91 hash ^=
static_cast<std::uint8_t
>(c);
94 return hash == 0 ? 1u : hash;
261 std::unordered_map<StableId, float>
rtpcs;
280 bool loadFromFile(std::string_view path, std::vector<std::string>* errors =
nullptr);
291 [[nodiscard]] std::span<const AudioBusDef>
busses() const noexcept {
return busses_; }
292 [[nodiscard]] std::span<const AudioClipDef>
clips() const noexcept {
return clips_; }
293 [[nodiscard]] std::span<const AudioEventDef>
events() const noexcept {
return events_; }
294 [[nodiscard]] std::span<const AudioNodeDef>
nodes() const noexcept {
return nodes_; }
312 bool loadManifest(std::string_view path, std::vector<std::string>* errors =
nullptr);
322 void setRtpc(AudioObjectId
object, RtpcId rtpc,
float value);
323 void setSwitch(AudioObjectId
object, SwitchGroupId group, SwitchValueId value);
324 void setState(StateGroupId group, StateValueId value);
327 [[nodiscard]]
float rtpcValue(AudioObjectId
object, RtpcId rtpc,
float fallback = 0.0f)
const;
328 [[nodiscard]] SwitchValueId
switchValue(AudioObjectId
object, SwitchGroupId group)
const;
329 [[nodiscard]]
float busGain(AudioBusId bus)
const;
330 [[nodiscard]] std::uint16_t
busMaxVoices(AudioBusId bus)
const;
333 [[nodiscard]] std::vector<AudioCommand>
335 [[nodiscard]] std::vector<AudioCommand>
340 std::unordered_map<StableId, AudioObjectState>
objects_;
341 std::unordered_map<StableId, StableId>
states_;
346 std::mt19937
rng_{0xA0D10125u};
354 float priorityOffset,
357 std::optional<bool> loopOverride,
358 std::vector<AudioCommand>& out)
const;
Pure helpers for spatial audio attenuation, panning, Doppler, and occlusion.
Sound effect identifiers, categories, and the SoundClip data type.
SfxId
Identifies a loaded sound clip.
Definition SfxTypes.hpp:16
@ _Count
Definition SfxTypes.hpp:89
Definition AudioRuntime.hpp:278
std::vector< AudioNodeDef > nodes_
Definition AudioRuntime.hpp:299
const AudioNodeDef * findNode(AudioNodeId id) const
Definition AudioRuntime.cpp:423
AudioEventId resolveEvent(std::string_view name) const
Definition AudioRuntime.cpp:447
const AudioBusDef * findBus(AudioBusId id) const
Definition AudioRuntime.cpp:435
void rebuildIndexes()
Definition AudioRuntime.cpp:465
std::unordered_map< StableId, std::size_t > busIndex_
Definition AudioRuntime.hpp:301
std::unordered_map< StableId, std::size_t > nodeIndex_
Definition AudioRuntime.hpp:303
AudioNodeId resolveNode(std::string_view name) const
Definition AudioRuntime.cpp:453
void buildDefault()
Definition AudioRuntime.cpp:295
std::vector< AudioBusDef > busses_
Definition AudioRuntime.hpp:297
AudioClipId resolveClip(std::string_view name) const
Definition AudioRuntime.cpp:459
std::unordered_map< StableId, std::size_t > clipIndex_
Definition AudioRuntime.hpp:302
AudioBusId resolveBus(std::string_view name) const
Definition AudioRuntime.cpp:441
const AudioEventDef * findEvent(AudioEventId id) const
Definition AudioRuntime.cpp:417
std::span< const AudioClipDef > clips() const noexcept
Definition AudioRuntime.hpp:292
const AudioClipDef * findClip(AudioClipId id) const
Definition AudioRuntime.cpp:429
std::vector< AudioEventDef > events_
Definition AudioRuntime.hpp:300
std::span< const AudioBusDef > busses() const noexcept
Definition AudioRuntime.hpp:291
std::unordered_map< StableId, std::size_t > eventIndex_
Definition AudioRuntime.hpp:304
std::span< const AudioNodeDef > nodes() const noexcept
Definition AudioRuntime.hpp:294
std::vector< AudioClipDef > clips_
Definition AudioRuntime.hpp:298
std::span< const AudioEventDef > events() const noexcept
Definition AudioRuntime.hpp:293
bool loadFromFile(std::string_view path, std::vector< std::string > *errors=nullptr)
Definition AudioRuntime.cpp:137
Definition AudioRuntime.hpp:310
std::uint16_t busMaxVoices(AudioBusId bus) const
Definition AudioRuntime.cpp:598
float busGain(AudioBusId bus) const
Definition AudioRuntime.cpp:581
const AudioObjectState * findObject(AudioObjectId object) const
Definition AudioRuntime.cpp:840
std::unordered_map< StableId, std::size_t > sequenceCursors_
Definition AudioRuntime.hpp:344
void setBusVolume(AudioBusId bus, float volume)
Definition AudioRuntime.cpp:541
std::unordered_map< StableId, AudioObjectState > objects_
Definition AudioRuntime.hpp:340
const AudioRuntimeStats & stats() const noexcept
Definition AudioRuntime.hpp:316
AudioManifest manifest_
Definition AudioRuntime.hpp:339
void loadDefaultManifest()
Definition AudioRuntime.cpp:497
void setSwitch(AudioObjectId object, SwitchGroupId group, SwitchValueId value)
Definition AudioRuntime.cpp:528
bool loadManifest(std::string_view path, std::vector< std::string > *errors=nullptr)
Definition AudioRuntime.cpp:481
std::unordered_map< StableId, std::size_t > randomLastChoice_
Definition AudioRuntime.hpp:343
void appendClipCommand(const AudioClipDef &clip, AudioObjectId object, float gain, float priorityOffset, bool force2D, bool force3D, std::optional< bool > loopOverride, std::vector< AudioCommand > &out) const
Definition AudioRuntime.cpp:809
std::unordered_map< StableId, float > busVolumeOverrides_
Definition AudioRuntime.hpp:342
float busPriorityOffset(AudioBusId bus) const
Definition AudioRuntime.cpp:604
void resolveNode(const AudioNodeDef &node, AudioObjectId object, float gain, std::vector< AudioCommand > &out, int depth)
Definition AudioRuntime.cpp:663
float rtpcValue(AudioObjectId object, RtpcId rtpc, float fallback=0.0f) const
Definition AudioRuntime.cpp:547
SwitchValueId switchValue(AudioObjectId object, SwitchGroupId group) const
Definition AudioRuntime.cpp:564
void setState(StateGroupId group, StateValueId value)
Definition AudioRuntime.cpp:535
const AudioManifest & manifest() const noexcept
Definition AudioRuntime.hpp:315
void resolveStopNode(const AudioNodeDef &node, std::vector< AudioCommand > &out, int depth) const
Definition AudioRuntime.cpp:790
void setRtpc(AudioObjectId object, RtpcId rtpc, float value)
Definition AudioRuntime.cpp:521
AudioRuntimeStats stats_
Definition AudioRuntime.hpp:345
void resetStats() noexcept
Definition AudioRuntime.hpp:317
void setObjectTransform(AudioObjectId object, const glm::vec3 &position, const glm::vec3 &velocity=glm::vec3{0.0f})
Definition AudioRuntime.cpp:507
std::mt19937 rng_
Definition AudioRuntime.hpp:346
std::vector< AudioCommand > postEvent(AudioEventId event, AudioObjectId object=kGlobalObject, float gain=1.0f)
Definition AudioRuntime.cpp:618
std::unordered_map< StableId, StableId > states_
Definition AudioRuntime.hpp:341
void removeObject(AudioObjectId object)
Definition AudioRuntime.cpp:516
Definition AudioMath.cpp:10
AudioNodeId nodeId(std::string_view name) noexcept
Definition AudioRuntime.hpp:101
constexpr float k_fullGainDistance
Definition AudioMath.hpp:14
constexpr AudioObjectId kGlobalObject
Definition AudioRuntime.hpp:84
constexpr AudioBusId kInvalidBus
Definition AudioRuntime.hpp:85
AudioBusId busId(std::string_view name) noexcept
Definition AudioRuntime.hpp:109
StateValueId stateValueId(std::string_view name) noexcept
Definition AudioRuntime.hpp:129
constexpr float k_silentDistance
Definition AudioMath.hpp:15
AudioObjectId objectId(std::string_view name) noexcept
Definition AudioRuntime.hpp:133
constexpr StableId stableHash(std::string_view text) noexcept
Definition AudioRuntime.hpp:87
StateGroupId stateGroupId(std::string_view name) noexcept
Definition AudioRuntime.hpp:125
AudioClipId clipId(std::string_view name) noexcept
Definition AudioRuntime.hpp:105
AudioCommandType
Definition AudioRuntime.hpp:158
@ StopClip
Definition AudioRuntime.hpp:160
@ Play
Definition AudioRuntime.hpp:159
AudioNodeType
Definition AudioRuntime.hpp:139
@ Blend
Definition AudioRuntime.hpp:144
@ Sequence
Definition AudioRuntime.hpp:142
@ Random
Definition AudioRuntime.hpp:141
@ Sound
Definition AudioRuntime.hpp:140
@ Switch
Definition AudioRuntime.hpp:143
RtpcId rtpcId(std::string_view name) noexcept
Definition AudioRuntime.hpp:113
std::uint32_t StableId
Definition AudioRuntime.hpp:22
AudioActionType
Definition AudioRuntime.hpp:148
@ SetRtpc
Definition AudioRuntime.hpp:151
@ Stop
Definition AudioRuntime.hpp:150
@ SetSwitch
Definition AudioRuntime.hpp:152
@ SetBusVolume
Definition AudioRuntime.hpp:154
@ SetState
Definition AudioRuntime.hpp:153
@ Play
Definition AudioRuntime.hpp:149
SwitchGroupId switchGroupId(std::string_view name) noexcept
Definition AudioRuntime.hpp:117
SwitchValueId switchValueId(std::string_view name) noexcept
Definition AudioRuntime.hpp:121
AudioEventId eventId(std::string_view name) noexcept
Definition AudioRuntime.hpp:97
Definition AudioRuntime.hpp:365
Definition AudioRuntime.hpp:218
AudioNodeId targetNode
Definition AudioRuntime.hpp:220
StateValueId stateValue
Definition AudioRuntime.hpp:226
AudioClipId targetClip
Definition AudioRuntime.hpp:221
SwitchGroupId switchGroup
Definition AudioRuntime.hpp:223
AudioBusId bus
Definition AudioRuntime.hpp:227
float value
Definition AudioRuntime.hpp:228
SwitchValueId switchValue
Definition AudioRuntime.hpp:224
AudioActionType type
Definition AudioRuntime.hpp:219
RtpcId rtpc
Definition AudioRuntime.hpp:222
float gain
Definition AudioRuntime.hpp:229
StateGroupId stateGroup
Definition AudioRuntime.hpp:225
Definition AudioRuntime.hpp:164
std::string name
Definition AudioRuntime.hpp:167
float volume
Definition AudioRuntime.hpp:168
float priorityOffset
Definition AudioRuntime.hpp:169
std::uint16_t maxVoices
Definition AudioRuntime.hpp:170
AudioBusId parent
Definition AudioRuntime.hpp:166
Definition AudioRuntime.hpp:43
friend bool operator==(AudioBusId, AudioBusId)=default
StableId value
Definition AudioRuntime.hpp:44
Definition AudioRuntime.hpp:174
bool spatial
Definition AudioRuntime.hpp:185
SfxId sfx
Definition AudioRuntime.hpp:177
std::string name
Definition AudioRuntime.hpp:176
bool loop
Definition AudioRuntime.hpp:184
float cooldownSeconds
Definition AudioRuntime.hpp:181
float silentDistance
Definition AudioRuntime.hpp:183
AudioBusId bus
Definition AudioRuntime.hpp:178
float fullGainDistance
Definition AudioRuntime.hpp:182
float gain
Definition AudioRuntime.hpp:179
float priority
Definition AudioRuntime.hpp:180
std::uint16_t maxInstances
Definition AudioRuntime.hpp:186
Definition AudioRuntime.hpp:37
StableId value
Definition AudioRuntime.hpp:38
friend bool operator==(AudioClipId, AudioClipId)=default
Definition AudioRuntime.hpp:240
std::uint16_t maxBusInstances
Definition AudioRuntime.hpp:254
glm::vec3 velocity
Definition AudioRuntime.hpp:245
float silentDistance
Definition AudioRuntime.hpp:250
float priority
Definition AudioRuntime.hpp:247
glm::vec3 position
Definition AudioRuntime.hpp:244
AudioCommandType type
Definition AudioRuntime.hpp:241
std::uint16_t maxInstances
Definition AudioRuntime.hpp:253
float gain
Definition AudioRuntime.hpp:246
bool loop
Definition AudioRuntime.hpp:251
bool positional
Definition AudioRuntime.hpp:252
float cooldownSeconds
Definition AudioRuntime.hpp:248
float fullGainDistance
Definition AudioRuntime.hpp:249
SfxId sfx
Definition AudioRuntime.hpp:242
AudioBusId bus
Definition AudioRuntime.hpp:243
Definition AudioRuntime.hpp:233
std::string name
Definition AudioRuntime.hpp:235
std::vector< AudioAction > actions
Definition AudioRuntime.hpp:236
Definition AudioRuntime.hpp:25
StableId value
Definition AudioRuntime.hpp:26
friend bool operator==(AudioEventId, AudioEventId)=default
Definition AudioRuntime.hpp:190
float gain
Definition AudioRuntime.hpp:193
SwitchValueId switchValue
Definition AudioRuntime.hpp:195
AudioNodeId node
Definition AudioRuntime.hpp:191
float value
Definition AudioRuntime.hpp:194
float weight
Definition AudioRuntime.hpp:192
Definition AudioRuntime.hpp:199
std::vector< AudioNodeChild > children
Definition AudioRuntime.hpp:204
AudioNodeType type
Definition AudioRuntime.hpp:202
std::string name
Definition AudioRuntime.hpp:201
AudioNodeId defaultChild
Definition AudioRuntime.hpp:208
SwitchGroupId switchGroup
Definition AudioRuntime.hpp:205
bool force3D
Definition AudioRuntime.hpp:212
bool loopOverride
Definition AudioRuntime.hpp:213
StateGroupId stateGroup
Definition AudioRuntime.hpp:206
float gain
Definition AudioRuntime.hpp:209
float priority
Definition AudioRuntime.hpp:210
RtpcId rtpc
Definition AudioRuntime.hpp:207
bool force2D
Definition AudioRuntime.hpp:211
bool hasLoopOverride
Definition AudioRuntime.hpp:214
AudioClipId clip
Definition AudioRuntime.hpp:203
Definition AudioRuntime.hpp:31
friend bool operator==(AudioNodeId, AudioNodeId)=default
StableId value
Definition AudioRuntime.hpp:32
Definition AudioRuntime.hpp:79
StableId value
Definition AudioRuntime.hpp:80
friend bool operator==(AudioObjectId, AudioObjectId)=default
Definition AudioRuntime.hpp:258
std::unordered_map< StableId, StableId > switches
Definition AudioRuntime.hpp:262
glm::vec3 velocity
Definition AudioRuntime.hpp:260
std::unordered_map< StableId, float > rtpcs
Definition AudioRuntime.hpp:261
glm::vec3 position
Definition AudioRuntime.hpp:259
Definition AudioRuntime.hpp:266
std::uint64_t manifestErrors
Definition AudioRuntime.hpp:274
std::uint64_t commandsGenerated
Definition AudioRuntime.hpp:269
std::uint64_t randomChoices
Definition AudioRuntime.hpp:271
std::uint64_t missingEvents
Definition AudioRuntime.hpp:268
std::uint64_t postedEvents
Definition AudioRuntime.hpp:267
std::uint64_t blendEvaluations
Definition AudioRuntime.hpp:273
std::uint64_t nodesVisited
Definition AudioRuntime.hpp:270
std::uint64_t switchFallbacks
Definition AudioRuntime.hpp:272
Definition AudioRuntime.hpp:49
friend bool operator==(RtpcId, RtpcId)=default
StableId value
Definition AudioRuntime.hpp:50
Definition AudioRuntime.hpp:67
StableId value
Definition AudioRuntime.hpp:68
friend bool operator==(StateGroupId, StateGroupId)=default
Definition AudioRuntime.hpp:73
friend bool operator==(StateValueId, StateValueId)=default
StableId value
Definition AudioRuntime.hpp:74
Definition AudioRuntime.hpp:55
StableId value
Definition AudioRuntime.hpp:56
friend bool operator==(SwitchGroupId, SwitchGroupId)=default
Definition AudioRuntime.hpp:61
friend bool operator==(SwitchValueId, SwitchValueId)=default
StableId value
Definition AudioRuntime.hpp:62
size_t operator()(audio::AudioEventId id) const noexcept
Definition AudioRuntime.hpp:369
size_t operator()(audio::AudioObjectId id) const noexcept
Definition AudioRuntime.hpp:374