2011-12-17 163 views
0

我想分别从麦克风和扬声器捕捉音频。我如何区分它们?我可以使用Wave API捕获其中一个,例如WaveInOpen()。麦克风发出的声音与扬声器发出的声音

当我使用waveInGetNumDevs()和waveInGetDevCaps()/ waveoutGetDevCaps()枚举设备时,似乎没有与特定终端设备(例如话筒或扬声器)相关的信息。我只看到以下,这是适配器设备:

HD读取的音频输入
HD读取的音频输出
网络摄像头...

+3

您不希望音频*输入*设备是麦克风而*输出*设备是扬声器吗? – 2011-12-17 14:24:42

+0

不,他可能是指调音台作为扬声器 – Ulterior 2011-12-17 19:00:29

+0

我的意思是,媒体播放器输出的音频。使用完全相同的应用程序,我可以捕捉麦克风输入和媒体播放器发出的音频。问题是没有我使用的功能似乎指示音频的来源。当然,我知道它是麦克风还是媒体播放器,但不是我的应用程序。 – user732592 2011-12-18 14:24:01

回答

0

我其实没有在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 
    } 

这样你就可以区分输入(捕捉)和输出(渲染)。 (这就是你想要的吗?)

该代码取自this article。你可以看看它的正确的API调用和库,它甚至可能会给你更多的信息。

希望这是有帮助的。

+0

感谢您的建议,但我忘了提及代码是为XP - 我的坏。 – user732592 2011-12-18 14:26:27

相关问题