]> git.tdb.fi Git - libs/al.git/blobdiff - source/source.cpp
Add more methods to Source
[libs/al.git] / source / source.cpp
index fec965c5d8ede45e6487b8a2f0e70a03ab233624..2ba1f4a2260fbd38148f0d4526e3d75ac20ffa06 100644 (file)
@@ -43,25 +43,72 @@ void Source::attribute(ALenum attr, const float *v)
        alSourcefv(id, attr, v);
 }
 
-void Source::set_buffer(Buffer &buffer)
+void Source::get_attr(ALenum attr, int *v) const
+{
+       alGetSourcei(id, attr, v);
+}
+
+void Source::get_attr(ALenum attr, float *v) const
+{
+       alGetSourcef(id, attr, v);
+}
+
+SourceState Source::get_state() const
+{
+       int state;
+       get_attr(AL_SOURCE_STATE, &state);
+       return static_cast<SourceState>(state);
+}
+
+void Source::set_position(float x, float y, float z)
+{
+       attribute(AL_POSITION, x, y, z);
+}
+
+void Source::set_looping(bool l)
+{
+       attribute(AL_LOOPING, l);
+}
+
+void Source::set_buffer(const Buffer &buffer)
 {
        attribute(AL_BUFFER, static_cast<int>(buffer.get_id()));
 }
 
-void Source::queue_buffers(const vector<Buffer *> &buffers)
+void Source::queue_buffers(const vector<const Buffer *> &buffers)
 {
        vector<uint> ids;
        ids.reserve(buffers.size());
-       for(vector<Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
+       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::queue_buffer(Buffer &buffer)
+void Source::queue_buffer(const Buffer &buffer)
 {
        uint bid=buffer.get_id();
        alSourceQueueBuffers(id, 1, &bid);
 }
 
+void Source::play()
+{
+       alSourcePlay(id);
+}
+
+void Source::pause()
+{
+       alSourcePause(id);
+}
+
+void Source::stop()
+{
+       alSourceStop(id);
+}
+
+void Source::rewind()
+{
+       alSourceRewind(id);
+}
+
 } // namespace AL
 } // namespace Msp