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