2011-12-17 108 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

相關問題