2016-04-11 2 views
9

Я хотел бы получить полное имя всех подключенных микрофонов. Я искал ответ, но ответа не отвечал.Как получить полное имя микрофона в C#?

Позвольте мне показать некоторые примеры:

1.

ManagementObjectSearcher mo = new ManagementObjectSearcher("select * from Win32_SoundDevice"); 

foreach (ManagementObject soundDevice in mo.Get()) 
{    
    MessageBox.Show(soundDevice.GetPropertyValue("Caption").ToString()); 
    // or 
    MessageBox.Show(soundDevice.GetPropertyValue("Description").ToString()); 
    //or 
    MessageBox.Show(soundDevice.GetPropertyValue("Manufacturer").ToString()); 
    //or 
    MessageBox.Show(soundDevice.GetPropertyValue("Name").ToString()); 
    //or 
    MessageBox.Show(soundDevice.GetPropertyValue("ProductName").ToString());      
} 

Все эти добытчики показывает: "Устройство USB Audio" или "Устройство, совместимое с High Definition стандарт".

2.

WaveInCapabilities[] devices = GetAvailableDevices();   
foreach(device in devices) 
{ 
    MessageBox.Show(device.ProductName); 
} 

Тот же ответ: "Устройство USB Audio" или "Устройство, совместимое со стандартом High Definition".

Я хочу получить полное имя. Я имею в виду, что-то вроде: «Sennheiser microphone USB». Возможно ли это? Я нашел: Get the full name of a waveIn device, но ссылка в нем сломана, и я не вижу dsound.lib для C# (для использования DirectSoundCaptureEnumerate). Я ничего не пропустил? Или есть другой вариант?

+2

Является ли полное имя вашего устройства видимым * в любом месте * в Windows? (Диспетчер устройств и т. Д.) – Heinzi

+0

@Heinzi Нет, я не вижу полного имени устройства в диспетчере устройств. Означает ли это, что это невозможно сделать? – Darooks

+0

Ну, если Windows не знает полного имени устройства, я не думаю, что есть способы его получить. (Но я не эксперт в Windows API, поэтому я был бы рад, если кто-то может доказать, что я не прав.) – Heinzi

ответ

4

@AnkurTripathi ответ является правильным, но он возвращает имя, которое содержит до 32 символов. Если кто-то не хочет этого ограничения, то лучше всего использовать перечислитель:

using NAudio.CoreAudioApi; 

MMDeviceEnumerator enumerator = new MMDeviceEnumerator(); 
var devices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);    
foreach (var device in devices) 
    MessageBox.Show(device.friendlyName); 

Он отлично подходит для меня.

3

Попробуйте NAudio https://naudio.codeplex.com/

for (int n = 0; n < WaveIn.DeviceCount; n++) 
{ 
    this.recordingDevices.Add(WaveIn.GetCapabilities(n).ProductName); 
    comboBoxAudio.Items.Add(WaveIn.GetCapabilities(n).ProductName); 
} 

для получения полного имени (FRIENDLYNAME):

MMDeviceEnumerator enumerator = new MMDeviceEnumerator(); 
foreach (MMDevice device in enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active)) 
    { 
      this.recordingDevices.Add(device.FriendlyName); 
    } 
+0

Существует тот же ответ, что и выше. В этом примере ProductName имеет только 31 символ. – Darooks

+0

@Darooks Является ли полное имя вашего устройства видимым в любом месте в Windows? - Если нет - информации больше нет – Cadburry

+0

@Cadburry Мне пришлось сменить USB. В диспетчере устройств теперь есть полное имя. Я этого раньше не заметил. – Darooks

Смежные вопросы