]> git.tdb.fi Git - libs/al.git/blob - source/source.cpp
e8f33c0d8be5e1014d9082879f5032ca81a12d77
[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_attr(ALenum attr, int *v) const
47 {
48         alGetSourcei(id, attr, v);
49 }
50
51 void Source::get_attr(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_attr(AL_SOURCE_STATE, &state);
60         return static_cast<SourceState>(state);
61 }
62
63 void Source::set_position(float x, float y, float z)
64 {
65         attribute(AL_POSITION, x, y, z);
66 }
67
68 void Source::set_looping(bool l)
69 {
70         attribute(AL_LOOPING, l);
71 }
72
73 void Source::set_buffer(const Buffer &buffer)
74 {
75         attribute(AL_BUFFER, static_cast<int>(buffer.get_id()));
76 }
77
78 void Source::queue_buffers(const vector<const Buffer *> &buffers)
79 {
80         vector<uint> ids;
81         ids.reserve(buffers.size());
82         for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
83                 ids.push_back((*i)->get_id());
84         alSourceQueueBuffers(id, ids.size(), &ids.front());
85 }
86
87 void Source::queue_buffer(const Buffer &buffer)
88 {
89         uint bid=buffer.get_id();
90         alSourceQueueBuffers(id, 1, &bid);
91 }
92
93 void Source::play()
94 {
95         alSourcePlay(id);
96 }
97
98 void Source::pause()
99 {
100         alSourcePause(id);
101 }
102
103 void Source::stop()
104 {
105         alSourceStop(id);
106 }
107
108 void Source::rewind()
109 {
110         alSourceRewind(id);
111 }
112
113 } // namespace AL
114 } // namespace Msp