2015-10-09 4 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/en-us/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;