2016-08-05 114 views
0

我正在查看WASAPI ActivateAudioInterfaceAsync()函数的文档,它提到通过DEVINTERFACE_AUDIO_CAPTURE作为deviceInterfacePath来激活默认音频捕获设备上的接口。这似乎是一个很好的做法,因为MediaDevice::GetDefaultAudioCaptureId(AudioDeviceRole::Default)调用我会以其他方式获得deviceInterfacePath参数(它在WASAPI示例中使用)是同步的 - 即使在某些情况下可能需要几秒钟,阻止UI线程并可能获取你的应用被杀死。如何将DEVINTERFACE_AUDIO_CAPTURE传递给ActivateAudioInterfaceAsync?

不幸的是,文档没有显示样本,特别是如何通过GUID为LPCWSTR deviceInterfacePathActivateAudioInterfaceAsync

我该怎么办呢?

回答

0

我设法编写了起来:

包括新增:

#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 
+0

嗯,不错的尝试为自回答问题。尽管现在的问题本身就是OT。 –

+0

请参阅[这里](http://meta.stackoverflow.com/a/330571/1413395)请提供更多信息。 –

+0

不确定你的意思。这不是一个基本的问题,有一个答案,你可以bingoogle,因为没有样本显示你如何做。对于精通C++和COM世界的人来说,答案可能很容易回答,但不是每个人都是专家。我不是在问这个问题得到积分,而是为了帮助其他任何想要了解如何去做的人,因为这个调用没有任何样本,而且也没有简单的可搜索解决方案。你为什么不自己做一些有用的事情,而不是嘲弄那些试图帮助别人的人呢? –