2016-08-05 24 views
0

Я смотрел документы для функции WASAPI ActivateAudioInterfaceAsync(), и он упоминает об отправке DEVINTERFACE_AUDIO_CAPTURE как deviceInterfacePath, чтобы активировать интерфейс на устройстве записи звука по умолчанию. Это кажется хорошей практикой, поскольку вызов MediaDevice::GetDefaultAudioCaptureId(AudioDeviceRole::Default), который я бы сделал в противном случае, чтобы получить параметр deviceInterfacePath (который используется в примере WASAPI), является синхронным - хотя в некоторых случаях это может занять несколько секунд, блокируя поток пользовательского интерфейса и потенциально получая ваше приложение будет убито.Как передать DEVINTERFACE_AUDIO_CAPTURE в ActivateAudioInterfaceAsync?

К сожалению, документы не показывают образец, особенно для того, как передать GUID как LPCWSTR deviceInterfacePath в ActivateAudioInterfaceAsync.

Как я могу это сделать?

ответ

0

Что мне удалось написать код:

Включает добавить:

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

Initialization:

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

Ну, хорошая попытка для себя ответил на вопрос. Сам вопрос - ОТ, хотя в его нынешнем виде. –

+0

См. [Здесь] (http://meta.stackoverflow.com/a/330571/1413395) для получения дополнительной информации. –

+0

Не знаю, что вы имеете в виду. Это не основной вопрос, на который есть ответ, который вы можете использовать в бингонге, поскольку нет примера, показывающего, как вы это делаете. Ответ может быть легко ответить для кого-то, кто хорошо разбирается в мире C++ и COM, но не каждый является экспертом. Я не задаю вопрос, чтобы получить очки, но чтобы помочь кому-то еще, кто будет искать, как это сделать, поскольку в этом вызове нет образца для этого вызова, и нет простого решения для поиска. Почему бы вам не сделать что-то полезное, а не троллировать людей, которые пытаются помочь другим? –