重写WASAPI渲染缓冲区

时间:2018-10-31 19:00:35

标签: audio msdn wasapi

我正在尝试使用WASAPI在单线程应用程序中呈现音频,主循环如下所示:

(我在这里使用 frame 来指代循环的迭代,而不是音频帧。)

while (!quitting)
{
    AudioClips* audioClipsToPlay = AppLogic();
    RenderGraphics();

    // Calls WASAPI IAudioRenderClient::GetBuffer and ReleaseBuffer, render
    // buffer size being initialized with N*TargetFrameDuration size.
    // N is the amount of frames between the App wanting to play the clip, 
    // until it is played (latency).
    OutputAudio(audioClipsToPlay);

    SynchronizeToFrameDuration(TargetFrameDuration);
}

audioClipsToPlay是应用程序想要播放的音频剪辑的集合(带有时钟和数据,例如预期会重复播放)。

只要帧速率比N*TargetFrameDuration快,该系统就可以正常工作,但有时并非如此。解决此问题的一种明显方法是增加N,但这样做可能会将延迟增加到不需要的水平。

是否可以重写/重置已写入渲染缓冲区的部分数据?

0 个答案:

没有答案