2013-11-14 86 views
0

我正在通過Qt和libsndfile在C++中播放Portaudio中的wav文件。這工作得很好。我需要以低延遲播放聲音,所以我試圖優化我的代碼,以便文件的實際播放時間等於文件的理論持續時間。確定在Portaudio播放聲音時的確切時間

我注意到,我打電話Pa_StartStream(stream);後聲音不會立即開始播放,但有一個小的延遲。我想知道聲音開始播放的準確時間,而不是以毫秒爲單位進行加載,因爲當時還有其他一些事情正在進行。

最顯而易見的方法是:

myTimer.start(); 
Pa_StartStream(stream); 

但我認爲Portaudio會先調用我的回調函數,加載緩衝區,然後開始播放,這將我的無效測量的時間,對不對?

如何找出播放開始的準確時間?雖然我們在這,我怎麼能找到,當它結束了(我知道當我寫我的最後一個數據到緩衝區,但是當它被打,我不知道..)

感謝

回答

1

我懷疑你可以確切地知道音頻流何時開始。你一定可以通過使用Pa_SetStreamFinishedCallback找出它的結束時間。

+0

謝謝M,這可以幫助我很多:) – jens108