rev |
line source |
nuclear@48
|
1 #include "openal.h"
|
nuclear@48
|
2 #include "source.h"
|
nuclear@48
|
3
|
nuclear@48
|
4 AudioSource::AudioSource()
|
nuclear@48
|
5 {
|
nuclear@48
|
6 sample = 0;
|
nuclear@48
|
7
|
nuclear@48
|
8 alGenSources(1, &alsrc);
|
nuclear@48
|
9 alSourcei(alsrc, AL_LOOPING, AL_TRUE);
|
nuclear@48
|
10 }
|
nuclear@48
|
11
|
nuclear@48
|
12 AudioSource::~AudioSource()
|
nuclear@48
|
13 {
|
nuclear@48
|
14 if(alsrc) {
|
nuclear@48
|
15 if(is_playing()) {
|
nuclear@48
|
16 stop();
|
nuclear@48
|
17 }
|
nuclear@48
|
18 alDeleteSources(1, &alsrc);
|
nuclear@48
|
19 }
|
nuclear@48
|
20 }
|
nuclear@48
|
21
|
nuclear@48
|
22 void AudioSource::set_sample(const AudioSample *sample)
|
nuclear@48
|
23 {
|
nuclear@48
|
24 stop();
|
nuclear@48
|
25
|
nuclear@48
|
26 if(sample) {
|
nuclear@48
|
27 if(!sample->albuffer) {
|
nuclear@48
|
28 fprintf(stderr, "%s: trying to attach null buffer!\n", __FUNCTION__);
|
nuclear@48
|
29 return;
|
nuclear@48
|
30 }
|
nuclear@48
|
31 alSourcei(alsrc, AL_BUFFER, sample->albuffer);
|
nuclear@48
|
32 }
|
nuclear@48
|
33 this->sample = sample;
|
nuclear@48
|
34 }
|
nuclear@48
|
35
|
nuclear@48
|
36 const AudioSample *AudioSource::get_sample() const
|
nuclear@48
|
37 {
|
nuclear@48
|
38 return sample;
|
nuclear@48
|
39 }
|
nuclear@48
|
40
|
nuclear@48
|
41 void AudioSource::set_position(const Vector3 &pos, bool viewspace)
|
nuclear@48
|
42 {
|
nuclear@48
|
43 alSourcei(alsrc, AL_SOURCE_RELATIVE, viewspace ? AL_TRUE : AL_FALSE);
|
nuclear@48
|
44 alSource3f(alsrc, AL_POSITION, pos.x, pos.y, pos.z);
|
nuclear@48
|
45 }
|
nuclear@48
|
46
|
nuclear@48
|
47 Vector3 AudioSource::get_position() const
|
nuclear@48
|
48 {
|
nuclear@48
|
49 float pos[3];
|
nuclear@48
|
50 alGetSourcefv(alsrc, AL_POSITION, pos);
|
nuclear@48
|
51 return Vector3(pos[0], pos[1], pos[2]);
|
nuclear@48
|
52 }
|
nuclear@48
|
53
|
nuclear@51
|
54 void AudioSource::set_volume(float vol)
|
nuclear@51
|
55 {
|
nuclear@51
|
56 alSourcef(alsrc, AL_GAIN, vol);
|
nuclear@51
|
57 }
|
nuclear@51
|
58
|
nuclear@51
|
59 float AudioSource::get_volume() const
|
nuclear@51
|
60 {
|
nuclear@51
|
61 float vol;
|
nuclear@51
|
62 alGetSourcef(alsrc, AL_GAIN, &vol);
|
nuclear@51
|
63 return vol;
|
nuclear@51
|
64 }
|
nuclear@51
|
65
|
nuclear@51
|
66 void AudioSource::set_reference_dist(float rdist)
|
nuclear@51
|
67 {
|
nuclear@51
|
68 alSourcef(alsrc, AL_REFERENCE_DISTANCE, rdist);
|
nuclear@51
|
69 }
|
nuclear@51
|
70
|
nuclear@51
|
71 float AudioSource::get_reference_dist() const
|
nuclear@51
|
72 {
|
nuclear@51
|
73 float res;
|
nuclear@51
|
74 alGetSourcef(alsrc, AL_REFERENCE_DISTANCE, &res);
|
nuclear@51
|
75 return res;
|
nuclear@51
|
76 }
|
nuclear@51
|
77
|
nuclear@48
|
78 bool AudioSource::is_playing() const
|
nuclear@48
|
79 {
|
nuclear@48
|
80 int state;
|
nuclear@48
|
81 alGetSourcei(alsrc, AL_SOURCE_STATE, &state);
|
nuclear@48
|
82 return state == AL_PLAYING;
|
nuclear@48
|
83 }
|
nuclear@48
|
84
|
nuclear@48
|
85 void AudioSource::play()
|
nuclear@48
|
86 {
|
nuclear@48
|
87 if(sample) {
|
nuclear@48
|
88 alSourcePlay(alsrc);
|
nuclear@48
|
89 }
|
nuclear@48
|
90 }
|
nuclear@48
|
91
|
nuclear@48
|
92 void AudioSource::stop()
|
nuclear@48
|
93 {
|
nuclear@48
|
94 if(sample) {
|
nuclear@48
|
95 alSourceStop(alsrc);
|
nuclear@48
|
96 }
|
nuclear@48
|
97 }
|