2013-11-14 54 views
0

我正在通过Qt和libsndfile在C++中播放Portaudio中的wav文件。这工作得很好。我需要以低延迟播放声音,所以我试图优化我的代码,以便文件的实际播放时间等于文件的理论持续时间。确定在Portaudio播放声音时的确切时间

我注意到,我打电话Pa_StartStream(stream);后声音不会立即开始播放,但有一个小的延迟。我想知道声音开始播放的准确时间,而不是以毫秒为单位进行加载,因为当时还有其他一些事情正在进行。

最显而易见的方法是:

myTimer.start(); 
Pa_StartStream(stream); 

但我认为Portaudio会先调用我的回调函数,加载缓冲区,然后开始播放,这将我的无效测量的时间,对不对?

如何找出播放开始的准确时间?虽然我们在这,我怎么能找到,当它结束了(我知道当我写我的最后一个数据到缓冲区,但是当它被打,我不知道..)

感谢

回答

1

我怀疑你可以确切地知道音频流何时开始。你一定可以通过使用Pa_SetStreamFinishedCallback找出它的结束时间。

+0

谢谢M,这可以帮助我很多:) – jens108