我想分别从麦克风和扬声器捕获音频。我怎样才能区分它们?我可以使用 Wave API(例如 WaveInOpen())捕获其中一个或另一个。
当我使用waveInGetNumDevs() 和waveInGetDevCaps()/waveoutGetDevCaps() 枚举设备时,似乎没有与特定端点设备(例如,麦克风或扬声器)相关的信息。我只看到以下,它们是适配器设备:
高清读取音频输入
高清读取音频输出
网络摄像头...
我想分别从麦克风和扬声器捕获音频。我怎样才能区分它们?我可以使用 Wave API(例如 WaveInOpen())捕获其中一个或另一个。
当我使用waveInGetNumDevs() 和waveInGetDevCaps()/waveoutGetDevCaps() 枚举设备时,似乎没有与特定端点设备(例如,麦克风或扬声器)相关的信息。我只看到以下,它们是适配器设备:
高清读取音频输入
高清读取音频输出
网络摄像头...
我实际上不了解 Windows API,所以我的答案可能不是最好的,甚至可能有更好的方法。
HRESULT hr = CoInitialize(NULL);
IMMDeviceEnumerator *pEnum = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnum);
if(SUCCEEDED(hr))
{
IMMDeviceCollection *pDevices;
// Enumerate the output devices.
hr = pEnum->EnumAudioEndpoints(eAll, DEVICE_STATE_ACTIVE, &pDevices);
// You can choose between eAll, eCapture or eRender
}
这样您就可以区分输入(捕获)和输出(渲染)。(这就是你想要的对吗?)
代码取自这篇文章。您可以查看它以了解正确的 API 调用和库,它甚至可能会为您提供更多信息。
希望这会有所帮助。