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