2015-10-09 131 views
0

我正在開發一個Windows音頻應用程序,並且正在使用MMDeviceEnumerator鞭策所有可用的音頻接口。這滴流淌下來得到一個MMDevice,給我一些關於設備本身的信息。如何從MMDevice獲取通道數量?

我想要獲得設備提供的通道總數。目前,我使用屬性存儲來返回當前的WAV格式,但是這返回了Windows爲「共享」模式指定的格式。使用Focusrite 18i8,Windows表示該設備有2個通道,這與設備高級設置的「默認格式」中指定的完全相同。 Windows本身不會讓我在默認格式中指定除2個輸入通道以外的任何其他內容。

問題是,該設備有18個輸入通道,我想使用Wasapi以獨佔模式打開它並獲得所有通道的訪問權限。我不知道如何找出音頻設備實際擁有多少「真實」頻道。

這可以從MMDevice找到嗎?

+0

我想你有興趣查詢設備屬性:[應用程序可以查詢一個音頻端點設備的PKEY_AudioEngine_DeviceFormat屬性來獲取該用戶已經選擇了該共享模式格式設備。 **有關查詢設備屬性的信息,請參閱設備屬性。**](https://msdn.microsoft.com/zh-cn/library/windows/desktop/dd370811)。 –

+0

我已經在使用PKEY_AudioEngine_DeviceFormat,但它只會像你說的那樣返回共享模式格式。我需要確定此設備在獨佔模式下有多少通道。我討厭認爲我必須不斷地調用IsFormatSupported以增加通道數,直到失敗。有些卡,例如Dante Virtual SoundCard,最多可以有256個通道! –

+0

我不確定它是否可以幫助,但這裏有兩個應用[[1](http://blogs.msdn.com/b/matthew_van_eerde/archive/2011/06/13/how-to-enumerate-audio- endpoint-immdevice-properties-on-your-system.aspx),[2](http://alax.info/blog/1279)]列出了可用的屬性。也許你可以從'PKEY_AudioEngine_OEMFormat'得到你想要的。 –

回答

0

通過使用CSCore,您可以通過使用AudioMeterInformation類獲取此信息。

下面是一個例子:

mic_in.Device = micdevices[waveInIndex]; 

int mic_in_chanNo = AudioMeterInformation.FromDevice(mic_in.Device).MeteringChannelCount; 
相關問題