2016-08-05 46 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世界的人來說,答案可能很容易回答,但不是每個人都是專家。我不是在問這個問題得到積分,而是爲了幫助其他任何想要了解如何去做的人,因爲這個調用沒有任何樣本,而且也沒有簡單的可搜索解決方案。你爲什麼不自己做一些有用的事情,而不是嘲弄那些試圖幫助別人的人呢? –