2012-12-07 5 views
0

이 질문은 Windows 오디오 세션 API에 대한 것입니다. Microsoft의 샘플 코드를 읽은 후 IAudioClient를 가져온 후 IAudioRenderClient를 얻기 위해 "GetService"메서드가 호출됩니다. 그런 다음 IAudioRenderClient의 GetBuffer 및 ReleaseBuffer 메서드를 호출하여 재생할 버퍼를 추가합니다.왜 우리는 IAudioRenderClient 인터페이스가 필요합니까

내 질문 :

  1. 왜 IAudioRenderClient이 필요한 이유는 바로 IAudioClient에 직접 GetBuffer와 ReleaseBuffer 방법을 넣어되지 않는 이유는 무엇입니까? 즉, 단일 IAudioClient에 여러 개의 IAudioRenderClient가 필요한 경우가 있습니까?

  2. 오디오를 재생할 때 항상 IAudioClient가 필요하며 IAudioRenderClient를 얻기 위해 GetService를 호출하는이 IAudioClient에서 우리는 IAudioRenderClient를 만들기 위해 CoCreateInstance()를 호출 할 기회가 없습니까? 그러면 IAudioRenderClient에 IID가 필요한 이유는 무엇입니까?

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

좀 더 읽고 나면 IAudioClient는 IAudioRenderClient 또는 IAudioCaptureClient. 그러나 GetService를 호출하여 IAudioRenderClient를 얻을 수는 있지만 QueryInterface는 얻지 못하는 이유는 무엇입니까?

답변

3
  1. IAudioCaptureClientGetBufferReleaseBuffer이 있기 때문에. GetBufferReleaseBufferIAudioClient에 입력하면 캡처 또는 렌더링 버퍼를 처리하는지 여부를 어떻게 알 수 있습니까? 이 접근법은 또한 모든 가능한 서비스에 대해 너무 많은 방법으로 어수선 해지는 것을 막습니다. IAudioClient. (이것을 "interface segregation principle"이라고하며 좋은 디자인으로 간주됩니다).
  2. 시스템에 많은 사운드 카드가 설치되어 있기 때문에 CoCreateInstance을 사용하지 마십시오. IAudioRenderClient의 이온을 통과 시켰 으면 좋겠다.