2012-04-15 55 views
1

如何獲取openal中播放源的當前位置?我想我的意思是,在硬件通過緩衝區,openal緩衝區,硬件緩衝區等之後,音頻中的哪個位置正在播放。openal:獲取源的當前播放位置

我已經簡要了解了api,但是我不太確定AL_SAMPLE_OFFSET/AL_BYTE_OFFSET/AL_SEC_OFFSET意味着什麼。如果我正在播放流媒體源,我似乎並沒有得到一個不斷增加的數字,看起來我可能在當前的播放緩衝區中獲得一個位置? (或所有的緩衝區?)

例如,一邊玩,我循環,並運行此代碼:

alGetSourcef(sources[0], AL_SAMPLE_OFFSET, &secoffset); 
printf(" - %f samples\n", secoffset); 

,並得到

- 0.000000 samples 
- 8192.000000 samples 
- 9216.000000 samples 
- 5632.000000 samples 

這似乎並沒有增加。

這是macos 10.7與最新的xcode 4.3,但我假設它應該在其他平臺上類似。

更新:

我已經嘗試增加緩衝區大小,它實際上看起來像它只是在當前播放的緩衝當前位置:所以考慮到

- 0.000000 bytes 
- 18432.000000 bytes 
- 20480.000000 bytes 
- 36864.000000 bytes 
- 36864.000000 bytes 
- 55296.000000 bytes 
- 55296.000000 bytes 
- 73728.000000 bytes 
refilling buffer 2408 
re-queued buffer 2408 
- 16384.000000 bytes 
- 34816.000000 bytes 
- 34816.000000 bytes 
- 51200.000000 bytes 
- 51200.000000 bytes 
- 69632.000000 bytes 
refilling buffer 2409 
re-queued buffer 2409 

,有沒有一個像樣的通過多種不同的緩衝區保持跟蹤的開路方式?

回答

1

這些偏移量來自排隊緩衝區的開始。您需要手動計算已排列的緩衝區的大小並添加到此數字。

在這裏,如果你讀了documentation,它說,第40頁:

的位置是相對於所有的源排隊緩衝區 的開始,任何排隊的一組呼叫穿越緩衝區將 標記爲已處理。

+0

謝謝。直到後來我纔看過規範(我認爲編程指南就足夠了)。 – 2012-04-18 02:39:48