这个问题是关于 Windows 音频会话 API 的。看了微软的示例代码,发现得到一个IAudioClient后,在其上调用“GetService”方法,得到一个IAudioRenderClient。然后调用IAudioRenderClient的GetBuffer和ReleaseBuffer方法添加要播放的缓冲区。
我的问题:
为什么需要IAudioRenderClient,为什么不直接把GetBuffer和ReleaseBuffer方法放在IAudioClient中呢?即在什么情况下我们需要多个 IAudioRenderClient 用于单个 IAudioClient?
因为当我们播放音频时,总是需要一个 IAudioClient,而在这个 IAudioClient 上我们调用 GetService 来获得一个 IAudioRenderClient,我们没有任何机会调用 CoCreateInstance() 来创建 IAudioRenderClient 是吗?那么为什么我们需要一个 IID 用于 IAudioRenderClient 呢?
==================================================== ==============================
经过更多阅读,我认为 IAudioClient 可以是 IAudioRenderClient 或 IAudioCaptureClient。但是另一个问题来了,为什么我们调用GetService来获取IAudioRenderClient而不是QueryInterface呢?