6#include <unordered_set>
7#include <unordered_map>
38 :
std::runtime_error(message) {}
82using ::std::unordered_set;
83using ::std::unordered_map;
85using ::std::unique_ptr;
86using ::std::shared_ptr;
87using namespace ::std::chrono_literals;
106 explicit constexpr operator bool()
const {
return IsValid(); }
119 explicit constexpr operator bool()
const {
return IsValid(); }
132 explicit constexpr operator bool()
const {
return IsValid(); }
142 return std::hash<uint32_t>{}(handle.Value());
149 return std::hash<uint32_t>{}(handle.Value());
156 return std::hash<uint32_t>{}(handle.Value());
329 void FadeLayer(
TrackHandle track,
const string& layerName,
float targetVolume, std::chrono::milliseconds duration);
755 unordered_map<TrackHandle, unique_ptr<AudioTrack>>
tracks_;
756 unordered_map<GroupHandle, unique_ptr<AudioGroup>>
groups_;
757 unordered_map<SoundHandle, unique_ptr<Sound>>
sounds_;
766 std::mt19937
rng_{std::random_device{}()};
Exception thrown when an audio operation fails.
Definition audio_manager.h:35
AudioException(const std::string &message)
Definition audio_manager.h:37
Central manager for all audio functionality.
Definition audio_manager.h:179
void StopTrack(TrackHandle track)
Stop playing an audio track.
Definition audio_manager.cpp:222
void StopSound(SoundHandle sound)
Stop a currently playing sound.
Definition audio_manager.cpp:448
AudioManager(const AudioManager &)=delete
static LogLevel GetLogLevel()
Get the current audio log level.
Definition audio_manager.cpp:178
atomic< bool > running_
Flag indicating if audio system is running.
Definition audio_manager.h:763
std::mt19937 rng_
RNG for random playback.
Definition audio_manager.h:766
void EnsureInitialized() const
Ensures the audio system is initialized before use.
Definition audio_manager.cpp:55
void DestroyTrack(TrackHandle track)
Destroy an audio track.
Definition audio_manager.cpp:203
void DestroyGroup(GroupHandle group)
Destroy an audio group.
Definition audio_manager.cpp:318
void SetSoundMinDistance(SoundHandle sound, float minDistance)
Set the minimum distance for distance attenuation.
Definition audio_manager.cpp:697
atomic< uint32_t > next_group_handle_
Counter for generating unique group handles.
Definition audio_manager.h:772
~AudioManager()
Destructor.
Definition audio_manager.cpp:44
void SetSoundPitch(SoundHandle sound, float pitch)
Set the pitch of a sound for its next playback.
Definition audio_manager.cpp:470
bool IsInitialized() const
Check if the audio system is initialized and running.
Definition audio_manager.h:706
AudioManager & operator=(const AudioManager &)=delete
void SetListenerDirection(const Vec3 &direction, uint32_t listenerIndex=0)
Set the listener direction (forward vector)
Definition audio_manager.cpp:647
AudioManager()
Constructor - private due to singleton pattern.
Definition audio_manager.cpp:40
static void SetLogLevel(LogLevel level)
Set the global audio log level (runtime).
Definition audio_manager.cpp:174
float GetMasterVolume() const
Get the current master volume level.
Definition audio_manager.cpp:182
Vec3 GetListenerPosition(uint32_t listenerIndex=0) const
Get the listener position.
Definition audio_manager.cpp:640
void RemoveLayer(TrackHandle track, const string &layerName)
Remove a layer from a track.
Definition audio_manager.cpp:261
bool IsSoundSpatializationEnabled(SoundHandle sound) const
Check if spatialization is enabled for a sound.
Definition audio_manager.cpp:767
GroupHandle NextGroupHandle()
Generate a new group handle.
Definition audio_manager.h:743
void Shutdown()
Shut down the audio system.
Definition audio_manager.cpp:122
thread update_thread_
Thread for audio updates.
Definition audio_manager.h:764
void SetGroupVolume(GroupHandle group, float volume)
Set the volume for an entire audio group.
Definition audio_manager.cpp:327
bool Initialize()
Initialize the audio system.
Definition audio_manager.cpp:61
Vec3 GetSoundPosition(SoundHandle sound) const
Get the 3D position of a sound.
Definition audio_manager.cpp:687
void SetSoundVolume(SoundHandle sound, float volume)
Set the volume of a sound.
Definition audio_manager.cpp:458
void FadeGroup(GroupHandle group, float targetVolume, std::chrono::milliseconds duration)
Fade a group's volume to a target value over time.
Definition audio_manager.cpp:349
float GetGroupVolume(GroupHandle group) const
Get the current volume for an audio group.
Definition audio_manager.cpp:339
void SetSoundMaxDistance(SoundHandle sound, float maxDistance)
Set the maximum distance for distance attenuation.
Definition audio_manager.cpp:717
SoundHandle NextSoundHandle()
Generate a new sound handle.
Definition audio_manager.h:749
float GetSoundRolloff(SoundHandle sound) const
Get the rolloff factor of a sound.
Definition audio_manager.cpp:747
void DestroySound(SoundHandle sound)
Destroy a previously loaded sound.
Definition audio_manager.cpp:410
unordered_map< string, std::vector< SoundHandle > > folder_sounds_
Cached sounds per folder.
Definition audio_manager.h:758
mutex resource_mutex_
Mutex for thread-safe resource access (mutable for const methods)
Definition audio_manager.h:765
void SetListenerPosition(const Vec3 &position, uint32_t listenerIndex=0)
Set the listener position in 3D space.
Definition audio_manager.cpp:632
void SetSoundRolloff(SoundHandle sound, float rolloff)
Set the rolloff factor for distance attenuation.
Definition audio_manager.cpp:737
atomic< uint32_t > next_sound_handle_
Counter for generating unique sound handles.
Definition audio_manager.h:773
unique_ptr< AudioSystem > audio_system_
Core audio system.
Definition audio_manager.h:754
void SetSoundPosition(SoundHandle sound, const Vec3 &position)
Set the 3D position of a sound.
Definition audio_manager.cpp:677
unordered_map< SoundHandle, unique_ptr< Sound > > sounds_
Sound storage.
Definition audio_manager.h:757
unordered_map< TrackHandle, unique_ptr< AudioTrack > > tracks_
Track storage.
Definition audio_manager.h:755
void PlayRandomSoundFromFolder(const string &folderPath, GroupHandle group=GroupHandle::Invalid())
Play a random sound from a folder.
Definition audio_manager.cpp:499
void SetSoundLooping(SoundHandle sound, bool should_loop)
Set whether a sound should loop.
Definition audio_manager.cpp:479
Vec3 GetListenerUp(uint32_t listenerIndex=0) const
Get the listener up vector.
Definition audio_manager.cpp:670
void PlaySound(SoundHandle sound)
Play a sound.
Definition audio_manager.cpp:428
float GetSoundMinDistance(SoundHandle sound) const
Get the minimum distance of a sound.
Definition audio_manager.cpp:707
void AddLayer(TrackHandle track, const string &layerName, const string &filepath, GroupHandle group=GroupHandle::Invalid())
Add an audio layer to a track.
Definition audio_manager.cpp:233
TrackHandle NextTrackHandle()
Generate a new track handle.
Definition audio_manager.h:737
unordered_map< GroupHandle, unique_ptr< AudioGroup > > groups_
Group storage.
Definition audio_manager.h:756
bool IsSoundPlaying(SoundHandle sound) const
Check if a sound is currently playing.
Definition audio_manager.cpp:489
SoundHandle LoadSound(const string &filepath)
Load a sound from a file.
Definition audio_manager.cpp:363
void SetListenerUp(const Vec3 &up, uint32_t listenerIndex=0)
Set the listener up vector.
Definition audio_manager.cpp:662
void FadeLayer(TrackHandle track, const string &layerName, float targetVolume, std::chrono::milliseconds duration)
Fade a layer's volume to a target value over time.
Definition audio_manager.cpp:285
void SetLayerVolume(TrackHandle track, const string &layerName, float volume)
Set the volume of a specific layer.
Definition audio_manager.cpp:272
Vec3 GetListenerDirection(uint32_t listenerIndex=0) const
Get the listener direction.
Definition audio_manager.cpp:655
atomic< uint32_t > next_track_handle_
Counter for generating unique track handles.
Definition audio_manager.h:771
void SetMasterVolume(float volume)
Set the master volume for all audio.
Definition audio_manager.cpp:164
void SetSoundSpatializationEnabled(SoundHandle sound, bool enabled)
Enable or disable spatialization for a sound.
Definition audio_manager.cpp:757
TrackHandle CreateTrack()
Create a new audio track.
Definition audio_manager.cpp:190
GroupHandle CreateGroup()
Create a new audio group.
Definition audio_manager.cpp:299
static AudioManager & GetInstance()
Get the singleton instance of the AudioManager.
Definition audio_manager.cpp:50
void PlayTrack(TrackHandle track)
Start playing an audio track.
Definition audio_manager.cpp:212
float GetSoundMaxDistance(SoundHandle sound) const
Get the maximum distance of a sound.
Definition audio_manager.cpp:727
Exception thrown when a file cannot be loaded.
Definition audio_manager.h:53
FileLoadException(const std::string &message)
Definition audio_manager.h:55
Exception thrown when an invalid handle is used.
Definition audio_manager.h:44
InvalidHandleException(const std::string &message)
Definition audio_manager.h:46
Exception thrown when the audio system is not initialized.
Definition audio_manager.h:62
NotInitializedException(const std::string &message)
Definition audio_manager.h:64
Definition audio_group.cpp:7
LogLevel
Log severity levels for audio diagnostics.
Definition logging.h:18
Strongly typed handle for audio groups.
Definition audio_manager.h:113
uint32_t value
Definition audio_manager.h:114
friend constexpr bool operator==(const GroupHandle &, const GroupHandle &)=default
constexpr bool IsValid() const
Definition audio_manager.h:117
static constexpr GroupHandle Invalid()
Definition audio_manager.h:116
constexpr uint32_t Value() const
Definition audio_manager.h:118
Strongly typed handle for individual sounds.
Definition audio_manager.h:126
constexpr bool IsValid() const
Definition audio_manager.h:130
friend constexpr bool operator==(const SoundHandle &, const SoundHandle &)=default
uint32_t value
Definition audio_manager.h:127
constexpr uint32_t Value() const
Definition audio_manager.h:131
static constexpr SoundHandle Invalid()
Definition audio_manager.h:129
Opaque handle types for audio objects.
Definition audio_manager.h:100
uint32_t value
Definition audio_manager.h:101
constexpr uint32_t Value() const
Definition audio_manager.h:105
friend constexpr bool operator==(const TrackHandle &, const TrackHandle &)=default
constexpr bool IsValid() const
Definition audio_manager.h:104
static constexpr TrackHandle Invalid()
Definition audio_manager.h:103
3D vector for spatial audio positioning
Definition vec3.h:46
size_t operator()(const audio::GroupHandle &handle) const noexcept
Definition audio_manager.h:148
size_t operator()(const audio::SoundHandle &handle) const noexcept
Definition audio_manager.h:155
size_t operator()(const audio::TrackHandle &handle) const noexcept
Definition audio_manager.h:141
3D vector class for spatial audio positioning