2014-04-25 81 views

回答

2

是的,將你的呼叫包裝到alSourcePlay的代碼被阻止,所以 想要在它自己的線程中。 OpenAL擁有自己的事件循環 ,可緩衝聲音並將聲音呈現給音頻設備。

通常,您希望單獨的線程爲您的源媒體(線程1)和另一個線程提供OpenAL邏輯(線程2)。這是除了你的UI線程(線程3),如果有的話。

+0

例如,我應該這樣做:{後臺線程} - 寫入PCM數據 - > [共享緩衝區] - 讀 - > {主線程}。後臺線程在主線程播放時調用數據(調用'alSourcePlay')它們? –

+1

如果最終用戶與您的軟件進行交互,而不是獨立進程而沒有用戶界面,則UI代碼需要其自己的線程(通常是主線程)。需要額外的線程來處理媒體讀取/解碼和I/O。第三個線程專用於圍繞OpenAL代碼的邏輯。但是,如果您只是在玩耍,想要撬動OpenAL的輪胎,並且不介意播放過程中出現無響應的流程,請繼續操作,並在單個線程中完成,OpenAL不介意,但會在整個媒體播放期間掛起應用程序。 –