4 #define AL_SILENCE_DEPRECATION
6 #include <OpenAL/alc.h>
7 #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(_WIN32) || defined(_WIN64) || defined(__HAIKU__)
26 using std::unique_ptr;
34 Audio* Audio::instance =
nullptr;
37 void Audio::shutdown()
47 device = alcOpenDevice(NULL);
73 if (entity == audioEntityIt->second) {
74 Console::println(
"Audio::addEntity(): " + entity->
getId() +
": entity already added!");
82 Console::println(
string(
"Audio::addEntity(): adding '" + entity->
getId() +
"' failed"));
90 auto audioEntity = audioEntityIt->second;
92 audioEntity->dispose();
101 vector<string> audioEntitiesToRemove;
102 for (
const auto& [audioEntityId, audioEntity]:
audioEntities) {
103 audioEntitiesToRemove.push_back(audioEntityId);
107 for (
const auto& key: audioEntitiesToRemove) {
114 for (
const auto& [audioEntityId, audioEntity]:
audioEntities) {
115 audioEntity->update();
121 array<float, 6> listenerOrientation = {
129 alListenerfv(AL_ORIENTATION, listenerOrientation.data());
virtual bool initialize()=0
Initiates this OpenAL entity to OpenAl.
virtual const string & getId() const
Interface to audio module.
Vector3 listenerOrientationAt
void addEntity(AudioEntity *entity)
Adds a audio entity.
Vector3 listenerOrientationUp
unordered_map< string, AudioEntity * > audioEntities
void removeEntity(const string &id)
Removes an audio entity.
void update()
Update and transfer audio entity states to open AL.
static STATIC_DLL_IMPEXT Audio * instance
void reset()
Clears all audio entities.
~Audio()
Private destructor.
Audio()
Private constructor.
Vector3 class representing vector3 mathematical structure and operations with x, y,...
const array< float, 3 > & getArray() const
Vector3 & set(float x, float y, float z)
Sets this vector3 by its components.