-/* $Id$
-
-This file is part of libmspal
-Copyright © 2008 Mikko Rasa, Mikkosoft Productions
-Diestributed under the LGPL
-*/
-
#include "buffer.h"
#include "source.h"
alDeleteSources(1, &id);
}
-void Source::attribute(ALenum attr, int v)
-{
- alSourcei(id, attr, v);
-}
-
-void Source::attribute(ALenum attr, float v)
+SourceState Source::get_state() const
{
- alSourcef(id, attr, v);
+ int state = INITIAL;
+ alGetSourcei(id, AL_SOURCE_STATE, &state);
+ return static_cast<SourceState>(state);
}
-void Source::attribute(ALenum attr, float v0, float v1, float v2)
+void Source::set_position(float x, float y, float z)
{
- alSource3f(id, attr, v0, v1, v2);
+ alSource3f(id, AL_POSITION, x, y, z);
}
-void Source::attribute(ALenum attr, const float *v)
+void Source::set_velocity(float x, float y, float z)
{
- alSourcefv(id, attr, v);
+ alSource3f(id, AL_VELOCITY, x, y, z);
}
-void Source::get_attr(ALenum attr, int *v) const
+void Source::set_looping(bool l)
{
- alGetSourcei(id, attr, v);
+ alSourcei(id, AL_LOOPING, l);
}
-void Source::get_attr(ALenum attr, float *v) const
+void Source::set_gain(float g)
{
- alGetSourcef(id, attr, v);
+ alSourcef(id, AL_GAIN, g);
}
-SourceState Source::get_state() const
+void Source::set_rolloff_factor(float f)
{
- int state;
- get_attr(AL_SOURCE_STATE, &state);
- return static_cast<SourceState>(state);
+ alSourcef(id, AL_ROLLOFF_FACTOR, f);
}
-void Source::set_position(float x, float y, float z)
+void Source::set_buffer(const Buffer &buffer)
{
- attribute(AL_POSITION, x, y, z);
+ alSourcei(id, AL_BUFFER, buffer.get_id());
}
-void Source::set_looping(bool l)
+void Source::queue_buffers(const vector<const Buffer *> &buffers)
{
- attribute(AL_LOOPING, l);
+ vector<uint> ids;
+ ids.reserve(buffers.size());
+ for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
+ ids.push_back((*i)->get_id());
+ alSourceQueueBuffers(id, ids.size(), &ids.front());
}
-void Source::set_buffer(const Buffer &buffer)
+void Source::queue_buffer(const Buffer &buffer)
{
- attribute(AL_BUFFER, static_cast<int>(buffer.get_id()));
+ uint bid = buffer.get_id();
+ alSourceQueueBuffers(id, 1, &bid);
}
-void Source::queue_buffers(const vector<const Buffer *> &buffers)
+void Source::unqueue_buffers(const vector<const Buffer *> &buffers)
{
vector<uint> ids;
ids.reserve(buffers.size());
for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
ids.push_back((*i)->get_id());
- alSourceQueueBuffers(id, ids.size(), &ids.front());
+ alSourceUnqueueBuffers(id, ids.size(), &ids.front());
}
-void Source::queue_buffer(const Buffer &buffer)
+void Source::unqueue_buffer(const Buffer &buffer)
{
- uint bid=buffer.get_id();
- alSourceQueueBuffers(id, 1, &bid);
+ uint bid = buffer.get_id();
+ alSourceUnqueueBuffers(id, 1, &bid);
+}
+
+void Source::clear_buffers()
+{
+ alSourcei(id, AL_BUFFER, AL_NONE);
+}
+
+unsigned Source::get_buffers_queued() const
+{
+ int n = 0;
+ alGetSourceiv(id, AL_BUFFERS_QUEUED, &n);
+ return n;
+}
+
+unsigned Source::get_buffers_processed() const
+{
+ int n = 0;
+ alGetSourceiv(id, AL_BUFFERS_PROCESSED, &n);
+ return n;
}
void Source::play()