]> git.tdb.fi Git - libs/al.git/blob - source/source.cpp
Drop copyright notices and Id tags from source files
[libs/al.git] / source / source.cpp
1 #include "buffer.h"
2 #include "source.h"
3
4 using namespace std;
5
6 namespace Msp {
7 namespace AL {
8
9 Source::Source()
10 {
11         alGenSources(1, &id);
12 }
13
14 Source::~Source()
15 {
16         alDeleteSources(1, &id);
17 }
18
19 void Source::attribute(ALenum attr, int v)
20 {
21         alSourcei(id, attr, v);
22 }
23
24 void Source::attribute(ALenum attr, float v)
25 {
26         alSourcef(id, attr, v);
27 }
28
29 void Source::attribute(ALenum attr, float v0, float v1, float v2)
30 {
31         alSource3f(id, attr, v0, v1, v2);
32 }
33
34 void Source::attribute(ALenum attr, const float *v)
35 {
36         alSourcefv(id, attr, v);
37 }
38
39 void Source::get_attribute(ALenum attr, int *v) const
40 {
41         alGetSourcei(id, attr, v);
42 }
43
44 void Source::get_attribute(ALenum attr, float *v) const
45 {
46         alGetSourcef(id, attr, v);
47 }
48
49 SourceState Source::get_state() const
50 {
51         int state;
52         get_attribute(AL_SOURCE_STATE, &state);
53         return static_cast<SourceState>(state);
54 }
55
56 void Source::set_position(float x, float y, float z)
57 {
58         attribute(AL_POSITION, x, y, z);
59 }
60
61 void Source::set_looping(bool l)
62 {
63         attribute(AL_LOOPING, l);
64 }
65
66 void Source::set_gain(float g)
67 {
68         attribute(AL_GAIN, g);
69 }
70
71 void Source::set_rolloff_factor(float f)
72 {
73         attribute(AL_ROLLOFF_FACTOR, f);
74 }
75
76 void Source::set_buffer(const Buffer &buffer)
77 {
78         attribute(AL_BUFFER, static_cast<int>(buffer.get_id()));
79 }
80
81 void Source::queue_buffers(const vector<const Buffer *> &buffers)
82 {
83         vector<uint> ids;
84         ids.reserve(buffers.size());
85         for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
86                 ids.push_back((*i)->get_id());
87         alSourceQueueBuffers(id, ids.size(), &ids.front());
88 }
89
90 void Source::queue_buffer(const Buffer &buffer)
91 {
92         uint bid = buffer.get_id();
93         alSourceQueueBuffers(id, 1, &bid);
94 }
95
96 void Source::unqueue_buffers(const vector<const Buffer *> &buffers)
97 {
98         vector<uint> ids;
99         ids.reserve(buffers.size());
100         for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
101                 ids.push_back((*i)->get_id());
102         alSourceUnqueueBuffers(id, ids.size(), &ids.front());
103 }
104
105 void Source::unqueue_buffer(const Buffer &buffer)
106 {
107         uint bid = buffer.get_id();
108         alSourceUnqueueBuffers(id, 1, &bid);
109 }
110
111 void Source::clear_buffers()
112 {
113         attribute(AL_BUFFER, AL_NONE);
114 }
115
116 unsigned Source::get_buffers_queued() const
117 {
118         int n = 0;
119         get_attribute(AL_BUFFERS_QUEUED, &n);
120         return n;
121 }
122
123 unsigned Source::get_buffers_processed() const
124 {
125         int n = 0;
126         get_attribute(AL_BUFFERS_PROCESSED, &n);
127         return n;
128 }
129
130 void Source::play()
131 {
132         alSourcePlay(id);
133 }
134
135 void Source::pause()
136 {
137         alSourcePause(id);
138 }
139
140 void Source::stop()
141 {
142         alSourceStop(id);
143 }
144
145 void Source::rewind()
146 {
147         alSourceRewind(id);
148 }
149
150 } // namespace AL
151 } // namespace Msp