1
Microsoft MSDN에서 제공하는 자습서를 사용하여 오디오 장치를 열거했습니다.Windows Media Foundation 오디오 장치 열거
여기에 열거 코드 :
HRESULT CreateAudioDeviceSource(IMFMediaSource **ppSource)
{
*ppSource = NULL;
IMFMediaSource *pSource = NULL;
IMFAttributes *pAttributes = NULL;
IMFActivate **ppDevices = NULL;
// Create an attribute store to specify the enumeration parameters.
HRESULT hr = MFCreateAttributes(&pAttributes, 1);
if (FAILED(hr))
{
goto done;
}
// Source type: audio capture devices
hr = pAttributes->SetGUID(
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID
);
if (FAILED(hr))
{
goto done;
}
// Enumerate devices.
UINT32 count;
hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count);
std::cout << count;
if (FAILED(hr))
{
std::cout << "Enum Failed";
goto done;
}
if (count == 0)
{
std::cout << "empty";
hr = E_FAIL;
goto done;
}
// Create the media source object.
hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(&pSource));
if (FAILED(hr))
{
goto done;
}
*ppSource = pSource;
(*ppSource)->AddRef();
done:
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
SafeRelease(&pSource);
return hr;
}
그러나 나는 장치를 열거하는 함수를 호출하지 못했습니다. 메시지 "Enum Failed"가 나타납니다. 그래서 나는 왜 그 문제가 일어 났는지 모른다.
정말 고마워요!
참조 : 윈도우 미디어 재단 https://msdn.microsoft.com/en-us/library/dd317912(v=vs.85).aspx
이 튜토리얼 조각을 ['MFStartup'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms702238) 및'MFShutdown' 호출로 둘러 쌀 필요가 있다고 가정합니다. 실패를보고하면 'hr'코드의 값도 포함시켜야합니다. –
나는 귀하의 조언을 시도합니다. 정말 고맙습니다. – bcuzit