我在看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

关于c++ - 如何将DEVINTERFACE_AUDIO_CAPTURE传递到ActivateAudioInterfaceAsync?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38795043/

10-16 19:02