确定声音开始在端口音频中播放的确切时间

Determine exact time when sound starts playing in Portaudio

本文关键字:播放 时间 音频 声音 开始      更新时间:2023-10-16

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

注意到在我打电话后声音没有立即开始播放Pa_StartStream(stream);但有一点延迟。我想知道声音开始播放而不是加载的确切时间,以毫秒为单位,因为我根据当时的时间发生了其他一些事情。

显而易见的方法是:

myTimer.start();
Pa_StartStream(stream);

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

如何找出播放开始的确切时间?当我们在它的时候,我怎么知道它什么时候结束(我知道我什么时候将我的最后一个数据写入缓冲区,但我不知道它什么时候被播放......

谢谢

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