TDME2  1.9.200
Audio.h
Go to the documentation of this file.
1 #pragma once
2 
3 #if defined(__APPLE__)
4  #include <OpenAL/alc.h>
5 #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(_WIN32) || defined(__HAIKU__)
6  #include <AL/alc.h>
7 #endif
8 
9 #include <string>
10 #include <unordered_map>
11 
12 #include <tdme/tdme.h>
13 #include <tdme/audio/fwd-tdme.h>
15 #include <tdme/math/Vector3.h>
16 
17 using std::string;
18 using std::unordered_map;
19 
23 
24 /**
25  * Interface to audio module
26  * @author Andreas Drewke
27  */
28 class tdme::audio::Audio final
29 {
30  friend class AudioBufferManager;
31  friend class AudioStream;
32  friend class Sound;
33 
34 private:
35  static constexpr uint32_t ALBUFFERID_NONE { 0 };
36  static constexpr uint32_t ALSOURCEID_NONE { 0 };
38 
39  ALCdevice* device { nullptr };
40  ALCcontext* context { nullptr };
41 
42  unordered_map<string, AudioEntity*> audioEntities;
43 
49 
50  // forbid class copy
52 
53  /**
54  * Private constructor
55  */
56  Audio();
57 
58  /**
59  * Private destructor
60  */
61  ~Audio();
62 
63 public:
64 
65  /**
66  * @return audio singleton instance
67  */
68  inline static Audio* getInstance() {
69  if (Audio::instance == nullptr) {
70  Audio::instance = new Audio();
71  }
72  return Audio::instance;
73  }
74 
75  /**
76  * Shuts the audio down
77  */
78  static void shutdown();
79 
80  /**
81  * @return listener position
82  */
83  inline const Vector3& getListenerPosition() const {
84  return listenerPosition;
85  }
86 
87  /**
88  * Set listener position
89  * @param listenerPosition listener position
90  */
92  this->listenerPosition = listenerPosition;
93  }
94 
95  /**
96  * @return listener velocity
97  */
98  inline const Vector3& getListenerVelocity() const {
99  return listenerVelocity;
100  }
101 
102  /**
103  * Set listener velocity
104  * @param listenerVelocity listener velocity
105  */
107  this->listenerVelocity = listenerVelocity;
108  }
109 
110  /**
111  * @return listener orientation at
112  */
113  inline const Vector3& getListenerOrientationAt() const {
114  return listenerOrientationAt;
115  }
116 
117  /**
118  * Set listener orientation at
119  * @param listenerOrientationAt listener orientation at
120  */
122  this->listenerOrientationAt = listenerOrientationAt;
123  }
124 
125  /**
126  * @return listener orientation up
127  */
128  inline const Vector3& getListenerOrientationUp() const {
129  return listenerOrientationUp;
130  }
131 
132  /**
133  * Set listener orientation up
134  * @return listener orientation up
135  */
137  this->listenerOrientationUp = listenerOrientationUp;
138  }
139 
140  /**
141  * Returns an audio entity identified by given id
142  * @param id id
143  * @return audio entity
144  */
145  inline AudioEntity* getEntity(const string& id) {
146  auto audioEntityIt = audioEntities.find(id);
147  if (audioEntityIt == audioEntities.end()) return nullptr;
148  return audioEntityIt->second;
149  }
150 
151  /**
152  * Adds a audio entity
153  * @param entity audio entity
154  */
155  void addEntity(AudioEntity* entity);
156 
157  /**
158  * Removes an audio entity
159  * @param id id
160  */
161  void removeEntity(const string& id);
162 
163  /**
164  * Clears all audio entities
165  */
166  void reset();
167 
168  /**
169  * Update and transfer audio entity states to open AL
170  */
171  void update();
172 
173 };
Audio entity base class.
Definition: AudioEntity.h:19
Interface to audio module.
Definition: Audio.h:29
Vector3 listenerOrientationAt
Definition: Audio.h:47
AudioEntity * getEntity(const string &id)
Returns an audio entity identified by given id.
Definition: Audio.h:145
Vector3 listenerPosition
Definition: Audio.h:45
ALCdevice * device
Definition: Audio.h:39
void setListenerOrientationAt(const Vector3 &listenerOrientationAt)
Set listener orientation at.
Definition: Audio.h:121
void addEntity(AudioEntity *entity)
Adds a audio entity.
Definition: Audio.cpp:67
Vector3 listenerOrientationUp
Definition: Audio.h:48
static constexpr uint32_t ALSOURCEID_NONE
Definition: Audio.h:36
unordered_map< string, AudioEntity * > audioEntities
Definition: Audio.h:42
static void shutdown()
Shuts the audio down.
Definition: Audio.cpp:37
void setListenerVelocity(const Vector3 &listenerVelocity)
Set listener velocity.
Definition: Audio.h:106
void setListenerOrientationUp(const Vector3 &listenerOrientationUp)
Set listener orientation up.
Definition: Audio.h:136
const Vector3 & getListenerOrientationAt() const
Definition: Audio.h:113
static constexpr uint32_t ALBUFFERID_NONE
Definition: Audio.h:35
void removeEntity(const string &id)
Removes an audio entity.
Definition: Audio.cpp:86
const Vector3 & getListenerVelocity() const
Definition: Audio.h:98
const Vector3 & getListenerPosition() const
Definition: Audio.h:83
const Vector3 & getListenerOrientationUp() const
Definition: Audio.h:128
void update()
Update and transfer audio entity states to open AL.
Definition: Audio.cpp:111
static STATIC_DLL_IMPEXT Audio * instance
Definition: Audio.h:37
static Audio * getInstance()
Definition: Audio.h:68
void reset()
Clears all audio entities.
Definition: Audio.cpp:98
~Audio()
Private destructor.
Definition: Audio.cpp:61
Vector3 listenerVelocity
Definition: Audio.h:46
AudioBufferManager audioBufferManager
Definition: Audio.h:44
Audio()
Private constructor.
Definition: Audio.cpp:44
ALCcontext * context
Definition: Audio.h:40
void setListenerPosition(const Vector3 &listenerPosition)
Set listener position.
Definition: Audio.h:91
Sound audio entity implementation.
Definition: Sound.h:19
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20
#define STATIC_DLL_IMPEXT
Definition: tdme.h:15
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6