2013-04-24 68 views
1

我剛剛開始使用OpenAL。如何將音頻流入OpenAL源?

我已經成功將WAV文件加載到它,併成功地播放它們。這很容易。

現在,我需要能夠將音樂流入OpenAL,而不是將整個文件加載到OpenAL中。雖然這對音效和類似效果很好,但如您所知,使用音樂可能會非常危險。

問題是,我似乎無法在Google上找到與此相關的任何內容。雖然我發現了一些與流式OGG文件相關的示例,但我寧願製作支持所有音樂文件的系統。

據我所知,OpenAL應該已經內置了這個功能。但我找不到它們。

所以,我的問題是,如何將音頻流式傳輸到OpenAL的緩衝區,同時刪除已播放的部分並導入尚未播放的部分?

如果這是一個無知的問題,我很抱歉。

回答

1

使用alSourceQueueBuffers()排列緩衝區,以便由源直接連續播放。在播放過程中,使用alGetSourcei()AL_BUFFERS_PROCESSED一起獲得已完全播放並準備重新使用的緩衝區數。 alSourceUnqueueBuffers()會將這些緩衝區從隊列中彈出,以便您可以用新數據填充它們並將它們重新排隊。

基本上你會循環一個線程:短時間睡眠,測試新的可用緩衝區,填充數據,排隊並重新進入睡眠狀態。

SFML在其SoundStream class(C++)中實現此功能,如果您願意,可以將其視爲參考。