如何将DEVEINTERFACE_AUDIO_CAPTURE传递到ActivateAudioInterfaceAsync

How do I pass DEVINTERFACE_AUDIO_CAPTURE into ActivateAudioInterfaceAsync?

本文关键字:ActivateAudioInterfaceAsync CAPTURE AUDIO DEVEINTERFACE      更新时间:2023-10-16

我查看了WASAPI ActivateAudioInterfaceAsync()函数的文档,其中提到将DEVINTERFACE_AUDIO_CAPTURE作为deviceInterfacePath传递,以激活默认音频捕获设备上的接口。这似乎是一个很好的做法,因为我本来会调用MediaDevice::GetDefaultAudioCaptureId(AudioDeviceRole::Default)来获取deviceInterfacePath参数(在WASAPI示例中使用(,但它是同步的——尽管在某些情况下可能需要几秒钟的时间,从而阻塞UI线程,并可能导致应用程序被终止。

不幸的是,文档中没有显示示例,尤其是关于如何将GUID作为LPCWSTR deviceInterfacePath传递给ActivateAudioInterfaceAsync的示例。

我该怎么做?

我设法编写的代码:

要添加的内容:

#include <initguid.h>
#include <mmdeviceapi.h>

初始化:

ComPtr<IActivateAudioInterfaceAsyncOperation> asyncOp; /*needed to get ActivateCompleted callback*/
PWSTR audioCaptureGuidString;
StringFromIID(DEVINTERFACE_AUDIO_CAPTURE, &audioCaptureGuidString);
// This call must be made on the main UI thread.  Async operation will call back to 
// IActivateAudioInterfaceCompletionHandler::ActivateCompleted
HRESULT hr = ActivateAudioInterfaceAsync(
    audioCaptureGuidString, /* deviceInterfacePath (default capture device) */
    __uuidof(IAudioClient2), /*riid*/
    nullptr, /*activationParams*/
    this, /*completionHandler*/
    &asyncOp /*createAsync*/);
CoTaskMemFree(audioCaptureGuidString);
// Windows holds a reference to the application's IActivateAudioInterfaceCompletionHandler interface
// until the operation is complete and the application releases the IActivateAudioInterfaceAsyncOperation interface
相关文章:
  • 没有找到相关文章