2013-05-22 2 views
2

В python2.7 на Windows мне нужно получить имя микрофона по умолчанию, который будет представлять собой строку, такую ​​как «Микрофон (2- High Definition Audio Device)».Windows: получить имя микрофона по умолчанию

Моя первая попытка заключалась в том, чтобы запросить WMI с помощью подпроцесса: wmic path Win32_SoundDevice get * /format:list. К сожалению, это, кажется, возвращает динамиков, а также микрофонов, и я не вижу никакой собственности, которая позволила бы мне различить два. Кроме того, имя правильного устройства не в правильном формате, например. он выглядит просто как «High Definition Audio Device» вместо полноценной строки «Микрофон (2- High Definition Audio Device)».

Моя вторая попытка состояла в том, чтобы использовать PyAudio (привязки python к PortAudio). Вызов PyAudio().get_default_input_device_info()["name"] меня довольно близко, но, к сожалению, имя почему-то усечено! Возвращаемое значение - «Микрофон (2- Высокое определение» (длина усеченного до 31 символа). Если бы я мог получить только не усеченную версию этой строки, это было бы прекрасно.

Любые идеи для простейших , наиболее самодостаточный способ получить имя микрофона по умолчанию Спасибо

+0

связана с проблемой усечения: http://stackoverflow.com/questions/1429143/get-the -full-audio-device-name-from-windows – AlcubierreDrive

ответ

0

Видимо, я могу получить полную строку из FFmpeg, следующим образом:!

ffmpeg -list_devices true -f dshow -i dummy

И тогда название микрофона будет на линии после «звуковых устройств DirectShow»

+0

Собственно, это не всегда работает. Он работал на планшете Windows 8, но на рабочем столе Windows 7 он просто вернул усеченную строку. – AlcubierreDrive

+0

dshow всегда кажется усеченным, надеюсь, есть и другой способ перечислить их ... – rogerdpack

1

В моем опыте с PortAudio имена устройств MME усекаются до 32 символов. Всегда было мое предположение, что это поведение специфично для API WMME. Вы должны иметь возможность запрашивать информацию об одном и том же физическом устройстве в других API, таких как DirectSound или WASAPI. (В C/C++ это требует, чтобы PortAudio был настроен для компиляции с помощью WASAPI и/или DirectSound.) Если вы запрашиваете одно и то же физическое устройство, как устройство WASAPI или DirectSound, доступны все символы имени устройства. Вы должны сделать это, получив имя устройства по умолчанию, а затем ищите другое устройство, которое соответствует ему.

Питон код, чтобы получить имя устройства ввода DirectSound по умолчанию должно выглядеть примерно так:

deviceIndex = get_host_api_info_by_type(paDirectSound)["defaultInputDevice"] 
deviceName = get_device_info_by_index(deviceIndex)["name"] 
+0

Спасибо! Если вы можете предоставить пример кода python, который запрашивает имя микрофона по умолчанию из DirectSound или WASAPI, я приму ваш ответ. – AlcubierreDrive

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

  • Нет связанных вопросов^_^