在Windows上的python2.7中,我需要获取默认麦克风的名称,这将是一个string,如“麦克风(2-高保真audio设备)”。
我的第一个尝试是使用子wmic path Win32_SoundDevice get * /format:list
查询WMI: wmic path Win32_SoundDevice get * /format:list
。 不幸的是,这似乎是返回扬声器以及麦克风,我看不到任何可以让我区分两者的属性。 另外,正确设备的名称也不是正确的格式,例如,它只是简单地显示为“高保真audio设备”,而不是完整正确的“麦克风(2-高保真audio设备)”string。
我第二次尝试使用PyAudio(Python绑定到PortAudio)。 调用PyAudio().get_default_input_device_info()["name"]
让我非常接近,但不幸的是,由于某种原因名称被截断! 返回值是“Microphone(2- High Definition)”(截断为31个字符长度)。如果我只能得到这个string的非截断版本,那将是完美的。
什么是最简单,最独立的方式来获得默认的麦克风名称的任何想法? 谢谢!
根据我使用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"]
显然,我可以从ffmpeg中获得完整的字符串,如下所示:
ffmpeg -list_devices true -f dshow -i dummy
然后麦克风的名称将在“DirectShow音频设备”之后上线