这个问题是关于Windows音频会话API的。在阅读了microsoft的示例代码后,我发现在获取IAudioClient之后,会调用“GetService”方法来获取IAudioRenderClient。然后调用IAudioRenderClient的GetBuffer和ReleaseBuffer方法来添加要播放的缓冲区。
我的问题:
为什么IAudioRenderClient是必需的,为什么不直接将GetBuffer和ReleaseBuffer方法放在IAudioClient中?即在什么时候我们需要多个IAudioRenderClient用于单个IAudioClient?
因为当我们播放音频时,我们总是需要IAudioClient,而在这个IAudioClient上我们调用GetService来获取IAudioRenderClient,我们没有机会调用CoCreateInstance()来创建IAudioRenderClient吗?那为什么我们需要IAudioRenderClient的IID?
=============================================== ===============================
经过多次阅读后,我认为IAudioClient可以是IAudioRenderClient或IAudioCaptureClient。但是出现了另一个问题,为什么我们调用GetService来获取IAudioRenderClient而不是QueryInterface?
答案 0 :(得分:3)
IAudioCaptureClient
也有GetBuffer
和ReleaseBuffer
。如果您将GetBuffer
和ReleaseBuffer
放在IAudioClient
上,那么您如何知道自己是在处理捕获还是渲染缓冲区?这种方法还可以阻止IAudioClient
混乱使用太多方法来处理所有可能的服务。 (这被称为“interface segregation principle”,它被认为是好的设计。)CoCreateInstance
,因为您的系统可能安装了许多声卡。如果您通过IAudioRenderClient
的IID,它将如何知道您想要哪个IAudioRenderClient
?