0

この質問は、WindowsオーディオセッションAPIに関するものです。Microsoftのサンプルコードを読んだ後、IAudioClientを取得した後、「GetService」メソッドが呼び出されてIAudioRenderClientを取得していることがわかりました。次に、IAudioRenderClientのGetBufferメソッドとReleaseBufferメソッドを呼び出して、再生するバッファーを追加します。

私の質問:

  1. IAudioRenderClientが必要なのはなぜですか、GetBufferメソッドとReleaseBufferメソッドをIAudioClientに直接配置しないのはなぜですか?つまり、1つのIAudioClientに対して複数のIAudioRenderClientが必要なのはいつですか。

  2. オーディオを再生するときは常にIAudioClientが必要であり、このIAudioClientではGetServiceを呼び出してIAudioRenderClientを取得するため、CoCreateInstance()を呼び出してIAudioRenderClientを作成する機会はありませんか?では、なぜIAudioRenderClientにIIDが必要なのですか?

================================================== ============================

もう少し読んだ後、IAudioClientはIAudioRenderClientまたはIAudioCaptureClientになると思います。しかし、別の質問が発生します。なぜGetServiceを呼び出してIAudioRenderClientを取得しますが、QueryInterfaceは取得しないのでしょうか。

4

1 に答える 1

3
  1. IAudioCaptureClientもあるからです。とonを付けた場合、キャプチャ バッファとレンダ バッファのどちらを扱っているかをどのように知ることができますか? このアプローチは、すべての可能なサービスに対してあまりにも多くのメソッドが乱雑になるのを防ぎます。(これは「インターフェース分離の原則」と呼ばれ、優れた設計と見なされます)。GetBufferReleaseBufferGetBufferReleaseBufferIAudioClientIAudioClient
  2. CoCreateInstanceシステムには多くのサウンドカードがインストールされている可能性があるため、使用しません。IAudioRenderClientの IID を渡した場合、どれが必要かをどのように知ることができますIAudioRenderClientか?
于 2012-12-08T09:34:03.767 に答える