为什么我们需要IAudioRenderClient接口

时间:2012-12-07 10:56:15

标签: windows audio com wasapi

这个问题是关于Windows音频会话API的。在阅读了microsoft的示例代码后,我发现在获取IAudioClient之后,会调用“GetService”方法来获取IAudioRenderClient。然后调用IAudioRenderClient的GetBuffer和ReleaseBuffer方法来添加要播放的缓冲区。

我的问题:

  1. 为什么IAudioRenderClient是必需的,为什么不直接将GetBuffer和ReleaseBuffer方法放在IAudioClient中?即在什么时候我们需要多个IAudioRenderClient用于单个IAudioClient?

  2. 因为当我们播放音频时,我们总是需要IAudioClient,而在这个IAudioClient上我们调用GetService来获取IAudioRenderClient,我们没有机会调用CoCreateInstance()来创建IAudioRenderClient吗?那为什么我们需要IAudioRenderClient的IID?

  3. =============================================== ===============================

    经过多次阅读后,我认为IAudioClient可以是IAudioRenderClient或IAudioCaptureClient。但是出现了另一个问题,为什么我们调用GetService来获取IAudioRenderClient而不是QueryInterface?

1 个答案:

答案 0 :(得分:3)

  1. 因为IAudioCaptureClient也有GetBufferReleaseBuffer。如果您将GetBufferReleaseBuffer放在IAudioClient上,那么您如何知道自己是在处理捕获还是渲染缓冲区?这种方法还可以阻止IAudioClient混乱使用太多方法来处理所有可能的服务。 (这被称为“interface segregation principle”,它被认为是好的设计。)
  2. 您不使用CoCreateInstance,因为您的系统可能安装了许多声卡。如果您通过IAudioRenderClient的IID,它将如何知道您想要哪个IAudioRenderClient
相关问题