]> git.localhorst.tv Git - gong.git/blob - src/audio/Audio.hpp
code, assets, and other stuff stolen from blank
[gong.git] / src / audio / Audio.hpp
1 #ifndef GONG_AUDIO_AUDIO_HPP_
2 #define GONG_AUDIO_AUDIO_HPP_
3
4 #include "../app/IntervalTimer.hpp"
5 #include "../graphics/glm.hpp"
6
7 #include <al.h>
8
9
10 namespace gong {
11 namespace audio {
12
13 class Sound;
14
15 class Audio {
16
17 public:
18         Audio();
19         ~Audio();
20
21         Audio(const Audio &) = delete;
22         Audio &operator =(const Audio &) = delete;
23
24 public:
25         void Position(const glm::vec3 &) noexcept;
26         void Velocity(const glm::vec3 &) noexcept;
27         void Orientation(const glm::vec3 &dir, const glm::vec3 &up) noexcept;
28
29         void Play(
30                 const Sound &,
31                 const glm::vec3 &pos = glm::vec3(0.0f),
32                 const glm::vec3 &vel = glm::vec3(0.0f),
33                 const glm::vec3 &dir = glm::vec3(0.0f)
34         ) noexcept;
35
36         void StopAll() noexcept;
37
38         void Update(int dt) noexcept;
39
40 private:
41         int NextFree() noexcept;
42
43 private:
44         static constexpr std::size_t NUM_SRC = 16;
45         ALuint source[NUM_SRC];
46         app::CoarseTimer timer[NUM_SRC];
47         int last_free;
48
49 };
50
51 }
52 }
53
54 #endif