diff --git a/src/modules/audio/Source.h b/src/modules/audio/Source.h index d9c803992..b91067638 100644 --- a/src/modules/audio/Source.h +++ b/src/modules/audio/Source.h @@ -73,7 +73,7 @@ namespace audio virtual float getVolume() const = 0; virtual void seek(float offset, Unit unit) = 0; - virtual float tell(Unit unit) const = 0; + virtual float tell(Unit unit) = 0; // all float * v must be of size 3 virtual void setPosition(float * v) = 0; diff --git a/src/modules/audio/null/Source.cpp b/src/modules/audio/null/Source.cpp index 96c14ac2c..4da104c23 100644 --- a/src/modules/audio/null/Source.cpp +++ b/src/modules/audio/null/Source.cpp @@ -105,7 +105,7 @@ namespace null { } - float Source::tell(Source::Unit) const + float Source::tell(Source::Unit) { return 0.0f; } diff --git a/src/modules/audio/null/Source.h b/src/modules/audio/null/Source.h index 0459301c1..0d5c5c2f6 100644 --- a/src/modules/audio/null/Source.h +++ b/src/modules/audio/null/Source.h @@ -58,7 +58,7 @@ namespace null virtual void setVolume(float volume); virtual float getVolume() const; virtual void seek(float offset, Unit unit); - virtual float tell(Unit unit) const; + virtual float tell(Unit unit); virtual void setPosition(float * v); virtual void getPosition(float * v) const; virtual void setVelocity(float * v); diff --git a/src/modules/audio/openal/Pool.cpp b/src/modules/audio/openal/Pool.cpp index 80a419602..036e1c3cf 100644 --- a/src/modules/audio/openal/Pool.cpp +++ b/src/modules/audio/openal/Pool.cpp @@ -237,6 +237,18 @@ namespace openal } } + void Pool::seek(Source * source, float offset, void * unit) + { + thread::Lock lock(mutex); + return source->seekAtomic(offset, unit); + } + + float Pool::tell(Source * source, void * unit) + { + thread::Lock lock(mutex); + return source->tellAtomic(unit); + } + ALuint Pool::findi(const Source * source) const { std::map::const_iterator i = playing.find((Source *)source); diff --git a/src/modules/audio/openal/Pool.h b/src/modules/audio/openal/Pool.h index 02f0eae27..3a662b37c 100644 --- a/src/modules/audio/openal/Pool.h +++ b/src/modules/audio/openal/Pool.h @@ -103,6 +103,8 @@ namespace openal void resume(Source * source); void rewind(); void rewind(Source * source); + void seek(Source * source, float offset, void * unit); + float tell(Source * source, void * unit); private: diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index d785a0470..122fc5019 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -221,11 +221,11 @@ namespace openal return volume; } - void Source::seek(float offset, Source::Unit unit) + void Source::seekAtomic(float offset, void * unit) { if (valid) { - switch (unit) { + switch (*((Source::Unit*) unit)) { case Source::UNIT_SAMPLES: if (type == TYPE_STREAM) { ALint buffer; @@ -249,13 +249,18 @@ namespace openal } } } + + void Source::seek(float offset, Source::Unit unit) + { + return pool->seek(this, offset, &unit); + } - float Source::tell(Source::Unit unit) const + float Source::tellAtomic(void * unit) const { if (valid) { float offset; - switch (unit) { + switch (*((Source::Unit*) unit)) { case Source::UNIT_SAMPLES: alGetSourcef(source, AL_SAMPLE_OFFSET, &offset); if (type == TYPE_STREAM) offset += offsetSamples; @@ -276,6 +281,11 @@ namespace openal return 0.0f; } + float Source::tell(Source::Unit unit) + { + return pool->tell(this, &unit); + } + void Source::setPosition(float * v) { if(valid) diff --git a/src/modules/audio/openal/Source.h b/src/modules/audio/openal/Source.h index af073cedb..5b281aac7 100644 --- a/src/modules/audio/openal/Source.h +++ b/src/modules/audio/openal/Source.h @@ -87,8 +87,10 @@ namespace openal virtual float getPitch() const; virtual void setVolume(float volume); virtual float getVolume() const; + virtual void seekAtomic(float offset, void * unit); virtual void seek(float offset, Unit unit); - virtual float tell(Unit unit) const; + virtual float tellAtomic(void * unit) const; + virtual float tell(Unit unit); virtual void setPosition(float * v); virtual void getPosition(float * v) const; virtual void setVelocity(float * v);