Windows:获取默认麦克风名称

时间:2013-05-22 06:29:23

标签: python windows audio portaudio

在Windows上的python2.7中,我需要获取默认麦克风的名称,这将是一个字符串,如“麦克风(2-高清晰度音频设备)”。

我的第一次尝试是使用子进程查询WMI:wmic path Win32_SoundDevice get * /format:list。不幸的是,这似乎让扬声器和麦克风都回归,我看不到任何可以让我区分这两者的属性。此外,正确设备的名称格式不正确,例如它看起来只是“高清晰度音频设备”,而不是完整正确的字符串“麦克风(2-高清晰度音频设备)”。

我的第二次尝试是使用PyAudio(python绑定到PortAudio)。调用PyAudio().get_default_input_device_info()["name"]让我非常接近,但不幸的是,由于某种原因,名称被截断了!返回值为“Microphone(2- High Definition”)(截断为31个字符长度)。如果我只能获得此字符串的非截断版本,那么它将是完美的。

有关获取默认麦克风名称的最简单,最独立的方法的任何想法?谢谢!

2 个答案:

答案 0 :(得分:1)

根据我对PortAudio的使用经验,MME设备的名称被截断为32个字符。我一直认为这种行为特定于WMME API。您应该能够在其他API(如DirectSound或WASAPI)中查询有关同一物理设备的信息。 (在C / C ++中,这要求将PortAudio配置为使用WASAPI和/或DirectSound进行编译。)如果查询与WASAPI或DirectSound设备相同的物理设备,则可以访问设备名称的所有字符。您应该可以通过获取默认设备名称然后搜索与其匹配的其他设备来执行此操作。

获取默认DirectSound输入设备名称的python代码应如下所示:

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

答案 1 :(得分:0)

显然我可以从ffmpeg获取完整的字符串,如下所示:

ffmpeg -list_devices true -f dshow -i dummy

然后麦克风的名称将在“DirectShow音频设备”

之后出现