group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
AudioRuntime.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
6#include "AudioMath.hpp"
7#include "SfxTypes.hpp"
8
9#include <cstdint>
10#include <glm/glm.hpp>
11#include <optional>
12#include <random>
13#include <span>
14#include <string>
15#include <string_view>
16#include <unordered_map>
17#include <vector>
18
19namespace audio
20{
21
22using StableId = std::uint32_t;
23
25{
27 friend bool operator==(AudioEventId, AudioEventId) = default;
28};
29
31{
33 friend bool operator==(AudioNodeId, AudioNodeId) = default;
34};
35
37{
39 friend bool operator==(AudioClipId, AudioClipId) = default;
40};
41
43{
45 friend bool operator==(AudioBusId, AudioBusId) = default;
46};
47
48struct RtpcId
49{
51 friend bool operator==(RtpcId, RtpcId) = default;
52};
53
55{
57 friend bool operator==(SwitchGroupId, SwitchGroupId) = default;
58};
59
61{
63 friend bool operator==(SwitchValueId, SwitchValueId) = default;
64};
65
67{
69 friend bool operator==(StateGroupId, StateGroupId) = default;
70};
71
73{
75 friend bool operator==(StateValueId, StateValueId) = default;
76};
77
79{
81 friend bool operator==(AudioObjectId, AudioObjectId) = default;
82};
83
84inline constexpr AudioObjectId kGlobalObject{0};
85inline constexpr AudioBusId kInvalidBus{0};
86
87[[nodiscard]] constexpr StableId stableHash(std::string_view text) noexcept
88{
89 StableId hash = 2166136261u;
90 for (char c : text) {
91 hash ^= static_cast<std::uint8_t>(c);
92 hash *= 16777619u;
93 }
94 return hash == 0 ? 1u : hash;
95}
96
97[[nodiscard]] inline AudioEventId eventId(std::string_view name) noexcept
98{
99 return {stableHash(name)};
100}
101[[nodiscard]] inline AudioNodeId nodeId(std::string_view name) noexcept
102{
103 return {stableHash(name)};
104}
105[[nodiscard]] inline AudioClipId clipId(std::string_view name) noexcept
106{
107 return {stableHash(name)};
108}
109[[nodiscard]] inline AudioBusId busId(std::string_view name) noexcept
110{
111 return {stableHash(name)};
112}
113[[nodiscard]] inline RtpcId rtpcId(std::string_view name) noexcept
114{
115 return {stableHash(name)};
116}
117[[nodiscard]] inline SwitchGroupId switchGroupId(std::string_view name) noexcept
118{
119 return {stableHash(name)};
120}
121[[nodiscard]] inline SwitchValueId switchValueId(std::string_view name) noexcept
122{
123 return {stableHash(name)};
124}
125[[nodiscard]] inline StateGroupId stateGroupId(std::string_view name) noexcept
126{
127 return {stableHash(name)};
128}
129[[nodiscard]] inline StateValueId stateValueId(std::string_view name) noexcept
130{
131 return {stableHash(name)};
132}
133[[nodiscard]] inline AudioObjectId objectId(std::string_view name) noexcept
134{
135 return {stableHash(name)};
136}
137
138enum class AudioNodeType : std::uint8_t
139{
145};
146
156
157enum class AudioCommandType : std::uint8_t
158{
161};
162
164{
167 std::string name;
168 float volume = 1.0f;
169 float priorityOffset = 0.0f;
170 std::uint16_t maxVoices = 0; // 0 = unlimited.
171};
172
174{
176 std::string name;
179 float gain = 1.0f;
180 float priority = 1.0f;
181 float cooldownSeconds = 0.0f;
184 bool loop = false;
185 bool spatial = false;
186 std::uint16_t maxInstances = 0; // 0 = unlimited.
187};
188
190{
192 float weight = 1.0f;
193 float gain = 1.0f;
194 float value = 0.0f; // RTPC/blend point.
196};
197
199{
201 std::string name;
204 std::vector<AudioNodeChild> children;
209 float gain = 1.0f;
210 float priority = 0.0f;
211 bool force2D = false;
212 bool force3D = false;
213 bool loopOverride = false;
214 bool hasLoopOverride = false;
215};
216
231
233{
235 std::string name;
236 std::vector<AudioAction> actions;
237};
238
240{
244 glm::vec3 position{0.0f};
245 glm::vec3 velocity{0.0f};
246 float gain = 1.0f;
247 float priority = 1.0f;
248 float cooldownSeconds = 0.0f;
251 bool loop = false;
252 bool positional = false;
253 std::uint16_t maxInstances = 0;
254 std::uint16_t maxBusInstances = 0;
255};
256
258{
259 glm::vec3 position{0.0f};
260 glm::vec3 velocity{0.0f};
261 std::unordered_map<StableId, float> rtpcs;
262 std::unordered_map<StableId, StableId> switches;
263};
264
266{
267 std::uint64_t postedEvents = 0;
268 std::uint64_t missingEvents = 0;
269 std::uint64_t commandsGenerated = 0;
270 std::uint64_t nodesVisited = 0;
271 std::uint64_t randomChoices = 0;
272 std::uint64_t switchFallbacks = 0;
273 std::uint64_t blendEvaluations = 0;
274 std::uint64_t manifestErrors = 0;
275};
276
278{
279public:
280 bool loadFromFile(std::string_view path, std::vector<std::string>* errors = nullptr);
281 void buildDefault();
282
283 [[nodiscard]] const AudioEventDef* findEvent(AudioEventId id) const;
284 [[nodiscard]] const AudioNodeDef* findNode(AudioNodeId id) const;
285 [[nodiscard]] const AudioClipDef* findClip(AudioClipId id) const;
286 [[nodiscard]] const AudioBusDef* findBus(AudioBusId id) const;
287 [[nodiscard]] AudioBusId resolveBus(std::string_view name) const;
288 [[nodiscard]] AudioEventId resolveEvent(std::string_view name) const;
289 [[nodiscard]] AudioNodeId resolveNode(std::string_view name) const;
290 [[nodiscard]] AudioClipId resolveClip(std::string_view name) const;
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_; }
295
296private:
297 std::vector<AudioBusDef> busses_;
298 std::vector<AudioClipDef> clips_;
299 std::vector<AudioNodeDef> nodes_;
300 std::vector<AudioEventDef> events_;
301 std::unordered_map<StableId, std::size_t> busIndex_;
302 std::unordered_map<StableId, std::size_t> clipIndex_;
303 std::unordered_map<StableId, std::size_t> nodeIndex_;
304 std::unordered_map<StableId, std::size_t> eventIndex_;
305
306 void rebuildIndexes();
307};
308
310{
311public:
312 bool loadManifest(std::string_view path, std::vector<std::string>* errors = nullptr);
313 void loadDefaultManifest();
314
315 [[nodiscard]] const AudioManifest& manifest() const noexcept { return manifest_; }
316 [[nodiscard]] const AudioRuntimeStats& stats() const noexcept { return stats_; }
317 void resetStats() noexcept { stats_ = {}; }
318
319 void
320 setObjectTransform(AudioObjectId object, const glm::vec3& position, const glm::vec3& velocity = glm::vec3{0.0f});
321 void removeObject(AudioObjectId object);
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);
325 void setBusVolume(AudioBusId bus, float volume);
326
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;
331 [[nodiscard]] float busPriorityOffset(AudioBusId bus) const;
332
333 [[nodiscard]] std::vector<AudioCommand>
334 postEvent(AudioEventId event, AudioObjectId object = kGlobalObject, float gain = 1.0f);
335 [[nodiscard]] std::vector<AudioCommand>
336 postEvent(std::string_view eventName, AudioObjectId object = kGlobalObject, float gain = 1.0f);
337
338private:
340 std::unordered_map<StableId, AudioObjectState> objects_;
341 std::unordered_map<StableId, StableId> states_;
342 std::unordered_map<StableId, float> busVolumeOverrides_;
343 std::unordered_map<StableId, std::size_t> randomLastChoice_;
344 std::unordered_map<StableId, std::size_t> sequenceCursors_;
346 std::mt19937 rng_{0xA0D10125u};
347
348 void
349 resolveNode(const AudioNodeDef& node, AudioObjectId object, float gain, std::vector<AudioCommand>& out, int depth);
350 void resolveStopNode(const AudioNodeDef& node, std::vector<AudioCommand>& out, int depth) const;
351 void appendClipCommand(const AudioClipDef& clip,
352 AudioObjectId object,
353 float gain,
354 float priorityOffset,
355 bool force2D,
356 bool force3D,
357 std::optional<bool> loopOverride,
358 std::vector<AudioCommand>& out) const;
359 [[nodiscard]] const AudioObjectState* findObject(AudioObjectId object) const;
360};
361
362} // namespace audio
363
364namespace std
365{
366template <>
367struct hash<audio::AudioEventId>
368{
369 size_t operator()(audio::AudioEventId id) const noexcept { return id.value; }
370};
371template <>
372struct hash<audio::AudioObjectId>
373{
374 size_t operator()(audio::AudioObjectId id) const noexcept { return id.value; }
375};
376} // namespace std
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