]> git.tdb.fi Git - libs/al.git/blob - source/source.cpp
Add Streamer class
[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_buffer(const Buffer &buffer)
88 {
89         attribute(AL_BUFFER, static_cast<int>(buffer.get_id()));
90 }
91
92 void Source::queue_buffers(const vector<const Buffer *> &buffers)
93 {
94         vector<uint> ids;
95         ids.reserve(buffers.size());
96         for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
97                 ids.push_back((*i)->get_id());
98         alSourceQueueBuffers(id, ids.size(), &ids.front());
99 }
100
101 void Source::queue_buffer(const Buffer &buffer)
102 {
103         uint bid=buffer.get_id();
104         alSourceQueueBuffers(id, 1, &bid);
105 }
106
107 void Source::unqueue_buffers(const vector<const Buffer *> &buffers)
108 {
109         vector<uint> ids;
110         ids.reserve(buffers.size());
111         for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
112                 ids.push_back((*i)->get_id());
113         alSourceUnqueueBuffers(id, ids.size(), &ids.front());
114 }
115
116 void Source::unqueue_buffer(const Buffer &buffer)
117 {
118         uint bid=buffer.get_id();
119         alSourceUnqueueBuffers(id, 1, &bid);
120 }
121
122 void Source::clear_buffers()
123 {
124         attribute(AL_BUFFER, AL_NONE);
125 }
126
127 void Source::play()
128 {
129         alSourcePlay(id);
130 }
131
132 void Source::pause()
133 {
134         alSourcePause(id);
135 }
136
137 void Source::stop()
138 {
139         alSourceStop(id);
140 }
141
142 void Source::rewind()
143 {
144         alSourceRewind(id);
145 }
146
147 } // namespace AL
148 } // namespace Msp