Skip to content

Commit 5ff175a

Browse files
committed
Separation of the listener and audio system
1 parent eaaefa7 commit 5ff175a

File tree

8 files changed

+158
-127
lines changed

8 files changed

+158
-127
lines changed

include/audio_buffer.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ using namespace FileSystem;
1515
class AudioBuffer
1616
{
1717
public:
18-
AudioBuffer(const std::string fileName, bool isStreamed = false);
19-
~AudioBuffer();
18+
AudioBuffer(const std::string& fileName, bool isStreamed = false);
19+
virtual ~AudioBuffer();
2020

21-
void load(const std::string fileName, bool isStreamed = false);
22-
void unload();
21+
virtual void load(const std::string& fileName, bool isStreamed = false);
22+
virtual void unload();
2323

24-
ALuint getBuffer();
25-
const std::string getFileName();
24+
virtual ALuint getBuffer();
25+
virtual const std::string getFileName();
2626

27-
bool isStreamed();
27+
virtual bool isStreamed();
2828

2929
protected:
3030
std::string m_fileName = "";

include/audio_listener.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#ifndef _AUDIO_LISTENER_H
2+
#define _AUDIO_LISTENER_H
3+
4+
class AudioListener
5+
{
6+
public:
7+
static void Init();
8+
9+
static void SetPosition (float* position);
10+
static void SetOrientation(float* orientation);
11+
static void SetVelocity (float* velocity);
12+
static void SetPosition (float x, float y, float z);
13+
static void SetOrientation(float tX, float tY, float tZ,
14+
float uX, float uY, float uZ);
15+
static void SetVelocity (float x, float y, float z);
16+
17+
static void GetPosition (float* position);
18+
static void GetOrientation(float* orientation);
19+
static void GetVelocity (float* velocity);
20+
21+
private:
22+
AudioListener() {}
23+
~AudioListener() {}
24+
25+
static float m_listenerPos[3];
26+
static float m_listenerOri[6];
27+
static float m_listenerVel[3];
28+
};
29+
30+
#endif // _AUDIO_LISTENER_H

include/audio_source.h

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,39 @@ class AudioSource
1717
AudioSource(AudioBuffer* buffer = nullptr);
1818
virtual ~AudioSource();
1919

20-
void setBuffer(AudioBuffer* buffer);
21-
void unsetBuffer();
22-
AudioBuffer* getBuffer();
20+
virtual void setBuffer(AudioBuffer* buffer);
21+
virtual void unsetBuffer();
22+
virtual AudioBuffer* getBuffer();
2323

24-
void setLooping(bool isLoop);
25-
void setPitch(float pitch);
26-
void setGain(float gain);
27-
void setPosition(float* position);
28-
void setPosition(float x, float y, float z);
29-
void setRelative(bool isRelative = false);
30-
void setVelocity(float* velocity);
31-
void setVelocity(float x, float y, float z);
24+
virtual void setLooping(bool isLoop);
25+
virtual void setPitch(float pitch);
26+
virtual void setGain(float gain);
27+
virtual void setPosition(float* position);
28+
virtual void setPosition(float x, float y, float z);
29+
virtual void setRelative(bool isRelative = false);
30+
virtual void setVelocity(float* velocity);
31+
virtual void setVelocity(float x, float y, float z);
3232

3333

3434
/*
3535
Reset all attributes to their default value
3636
Can be called only if the sound is inactive
3737
*/
38-
void reset();
39-
40-
void play(bool isLoop = false);
41-
void pause();
42-
void resume();
43-
void stop();
44-
void update();
45-
46-
bool isRelative();
47-
bool isActive();
48-
bool isInactive();
49-
bool isPlaying();
50-
bool isLooping();
51-
bool isPaused();
52-
bool isStopped();
38+
virtual void reset();
39+
40+
virtual void play(bool isLoop = false);
41+
virtual void pause();
42+
virtual void resume();
43+
virtual void stop();
44+
virtual void update();
45+
46+
virtual bool isRelative();
47+
virtual bool isActive();
48+
virtual bool isInactive();
49+
virtual bool isPlaying();
50+
virtual bool isLooping();
51+
virtual bool isPaused();
52+
virtual bool isStopped();
5353

5454
protected:
5555
ALuint m_source;

include/audio_system.h

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,28 +19,15 @@ class AudioSystem
1919
static void DeleteAllBuffers();
2020
static void DeleteAllSources();
2121

22-
static void SetListenerPosition (float* position);
23-
static void SetListenerOrientation(float* orientation);
24-
static void SetListenerVelocity (float* velocity);
25-
static void SetListenerPosition (float x, float y, float z);
26-
static void SetListenerOrientation(float tX, float tY, float tZ,
27-
float uX, float uY, float uZ);
28-
static void SetListenerVelocity (float x, float y, float z);
29-
30-
static void GetListenerPosition (float* position);
31-
static void GetListenerOrientation(float* orientation);
32-
static void GetListenerVelocity (float* velocity);
33-
3422
static void Update();
3523
static void Suspend();
3624
static void Resume();
3725

3826
static void CheckErrorAL();
3927

4028
private:
41-
static float m_listenerPos[3];
42-
static float m_listenerOri[6];
43-
static float m_listenerVel[3];
29+
AudioSystem() {}
30+
~AudioSystem() {}
4431
};
4532

4633
#endif // _AUDIO_SYSTEM_H

src/audio_buffer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include "audio_source.h"
33
#include "audio_system.h"
44

5-
AudioBuffer::AudioBuffer(const std::string fileName, bool isStreamed)
5+
AudioBuffer::AudioBuffer(const std::string& fileName, bool isStreamed)
66
{
77
AudioSystem::audioBuffers.push_back(this);
88
load(fileName, isStreamed);
@@ -37,7 +37,7 @@ AudioBuffer::~AudioBuffer()
3737
AudioSystem::CheckErrorAL();
3838
}
3939

40-
void AudioBuffer::load(const std::string fileName, bool isStreamed)
40+
void AudioBuffer::load(const std::string& fileName, bool isStreamed)
4141
{
4242
unload();
4343

src/audio_listener.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#include <cstring>
2+
#include "alure.h"
3+
#include "audio_listener.h"
4+
5+
6+
float AudioListener::m_listenerPos[3] = {};
7+
float AudioListener::m_listenerOri[6] = {0, 0, -1, 0, 1, 0};
8+
float AudioListener::m_listenerVel[3] = {};
9+
10+
11+
void AudioListener::Init()
12+
{
13+
SetPosition ( 0.0, 0.0, 0.0 );
14+
SetOrientation( 0.0, 0.0, -1.0,
15+
0.0, 1.0, 0.0 );
16+
SetVelocity ( 0.0, 0.0, 0.0 );
17+
}
18+
19+
void AudioListener::SetPosition(float* position)
20+
{
21+
memcpy(m_listenerPos, position, sizeof(float) * 3);
22+
alListenerfv(AL_POSITION, position);
23+
}
24+
25+
void AudioListener::SetOrientation(float* orientation)
26+
{
27+
memcpy(m_listenerOri, orientation, sizeof(float) * 6);
28+
alListenerfv(AL_ORIENTATION, orientation);
29+
}
30+
31+
void AudioListener::SetVelocity(float* velocity)
32+
{
33+
memcpy(m_listenerVel, velocity, sizeof(float) * 3);
34+
alListenerfv(AL_VELOCITY, velocity);
35+
}
36+
37+
void AudioListener::SetPosition(float x, float y, float z)
38+
{
39+
m_listenerPos[0] = x;
40+
m_listenerPos[1] = y;
41+
m_listenerPos[2] = z;
42+
alListenerfv(AL_POSITION, m_listenerPos);
43+
}
44+
45+
void AudioListener::SetOrientation(float tX, float tY, float tZ,
46+
float uX, float uY, float uZ)
47+
{
48+
m_listenerOri[0] = tX;
49+
m_listenerOri[1] = tY;
50+
m_listenerOri[2] = tZ;
51+
m_listenerOri[3] = uX;
52+
m_listenerOri[4] = uY;
53+
m_listenerOri[5] = uZ;
54+
alListenerfv(AL_ORIENTATION, m_listenerOri);
55+
}
56+
57+
void AudioListener::SetVelocity(float x, float y, float z)
58+
{
59+
m_listenerVel[0] = x;
60+
m_listenerVel[1] = y;
61+
m_listenerVel[2] = z;
62+
alListenerfv(AL_VELOCITY, m_listenerVel);
63+
}
64+
65+
void AudioListener::GetPosition(float* position)
66+
{
67+
if (position)
68+
{
69+
memcpy(position, m_listenerPos, 3 * sizeof(float));
70+
}
71+
}
72+
73+
void AudioListener::GetOrientation(float* orientation)
74+
{
75+
if (orientation)
76+
{
77+
memcpy(orientation, m_listenerOri, 6 * sizeof(float));
78+
}
79+
}
80+
81+
void AudioListener::GetVelocity (float* velocity)
82+
{
83+
if (velocity)
84+
{
85+
memcpy(velocity, m_listenerVel, 3 * sizeof(float));
86+
}
87+
}

src/audio_source.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ void AudioSource::reset()
149149

150150
void AudioSource::play(bool isLoop)
151151
{
152+
stop();
152153
setLooping(isLoop);
153154

154155
if (m_stream)

src/audio_system.cpp

Lines changed: 3 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
#include <cstring>
22
#include "audio_system.h"
33
#include "file_system.h"
4-
//#include "audio_source.h"
4+
#include "audio_listener.h"
55
#include "AL/alure.h"
66

7-
float AudioSystem::m_listenerPos[3] = {};
8-
float AudioSystem::m_listenerOri[6] = {0, 0, -1, 0, 1, 0};
9-
float AudioSystem::m_listenerVel[3] = {};
7+
108
std::vector<AudioSource*> AudioSystem::audioSources;
119
std::vector<AudioBuffer*> AudioSystem::audioBuffers;
1210

@@ -116,9 +114,7 @@ void AudioSystem::Init()
116114
write_callback,
117115
seek_callback);
118116

119-
alListenerfv(AL_POSITION, m_listenerPos);
120-
alListenerfv(AL_ORIENTATION, m_listenerOri);
121-
alListenerfv(AL_VELOCITY, m_listenerVel);
117+
AudioListener::Init();
122118
}
123119

124120
void AudioSystem::Deinit()
@@ -145,76 +141,6 @@ void AudioSystem::DeleteAllSources()
145141
audioSources.clear();
146142
}
147143

148-
void AudioSystem::SetListenerPosition(float* position)
149-
{
150-
memcpy(m_listenerPos, position, sizeof(float) * 3);
151-
alListenerfv(AL_POSITION, position);
152-
}
153-
154-
void AudioSystem::SetListenerOrientation(float* orientation)
155-
{
156-
memcpy(m_listenerOri, orientation, sizeof(float) * 6);
157-
alListenerfv(AL_ORIENTATION, orientation);
158-
}
159-
160-
void AudioSystem::SetListenerVelocity(float* velocity)
161-
{
162-
memcpy(m_listenerVel, velocity, sizeof(float) * 3);
163-
alListenerfv(AL_VELOCITY, velocity);
164-
}
165-
166-
void AudioSystem::SetListenerPosition(float x, float y, float z)
167-
{
168-
m_listenerPos[0] = x;
169-
m_listenerPos[1] = y;
170-
m_listenerPos[2] = z;
171-
alListenerfv(AL_POSITION, m_listenerPos);
172-
}
173-
174-
void AudioSystem::SetListenerOrientation(float tX, float tY, float tZ,
175-
float uX, float uY, float uZ)
176-
{
177-
m_listenerOri[0] = tX;
178-
m_listenerOri[1] = tY;
179-
m_listenerOri[2] = tZ;
180-
m_listenerOri[3] = uX;
181-
m_listenerOri[4] = uY;
182-
m_listenerOri[5] = uZ;
183-
alListenerfv(AL_ORIENTATION, m_listenerOri);
184-
}
185-
186-
void AudioSystem::SetListenerVelocity(float x, float y, float z)
187-
{
188-
m_listenerVel[0] = x;
189-
m_listenerVel[1] = y;
190-
m_listenerVel[2] = z;
191-
alListenerfv(AL_VELOCITY, m_listenerVel);
192-
}
193-
194-
void AudioSystem::GetListenerPosition(float* position)
195-
{
196-
if (position)
197-
{
198-
memcpy(position, m_listenerPos, 3 * sizeof(float));
199-
}
200-
}
201-
202-
void AudioSystem::GetListenerOrientation(float* orientation)
203-
{
204-
if (orientation)
205-
{
206-
memcpy(orientation, m_listenerOri, 6 * sizeof(float));
207-
}
208-
}
209-
210-
void AudioSystem::GetListenerVelocity (float* velocity)
211-
{
212-
if (velocity)
213-
{
214-
memcpy(velocity, m_listenerVel, 3 * sizeof(float));
215-
}
216-
}
217-
218144
void AudioSystem::Update()
219145
{
220146
for (auto source : audioSources)

0 commit comments

Comments
 (0)