确定声音在Portaudio中播放的确切时间

时间:2013-11-14 12:27:15

标签: c++ audio portaudio

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

我注意到在拨打Pa_StartStream(stream);后声音没有立即开始播放,但是有一点延迟。我想知道声音开始播放的确切时间,而不是以毫秒为单位加载,因为我还有其他一些事情依赖于那个时间。

显而易见的方法是:

myTimer.start();
Pa_StartStream(stream);

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

如何找到播放开始的确切时间?虽然我们在这里,我怎么能知道它什么时候结束(我知道什么时候我把我的最后一个数据写入缓冲区,但我不知道它什么时候被播放..)

由于

1 个答案:

答案 0 :(得分:1)

我怀疑你能够(确切地)知道音频流何时开始。您当然可以使用Pa_SetStreamFinishedCallback找出它何时完成。