diff options
Diffstat (limited to 'intern/audaspace/OpenAL')
-rw-r--r-- | intern/audaspace/OpenAL/AUD_OpenALDevice.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp index 9e153b9b34f..7ee8652f226 100644 --- a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp +++ b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp @@ -890,11 +890,14 @@ float AUD_OpenALDevice::getPosition(AUD_Handle* handle) if(isValid(handle)) { AUD_OpenALHandle* h = (AUD_OpenALHandle*)handle; - if(h->isBuffered) - alGetSourcef(h->source, AL_SEC_OFFSET, &position); - else - position = h->reader->getPosition() / - (float)h->reader->getSpecs().rate; + alGetSourcef(h->source, AL_SEC_OFFSET, &position); + if(!h->isBuffered) + { + AUD_Specs specs = h->reader->getSpecs(); + position += (h->reader->getPosition() - m_buffersize * + AUD_OPENAL_CYCLE_BUFFERS / specs.channels) / + (float)specs.rate; + } } unlock(); |