2013-05-22 95 views
2

在Windows上的python2.7中,我需要获取默认麦克风的名称,该名称将为诸如“麦克风(2-高保真音频设备)”之类的字符串。Windows:获取默认麦克风名称

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

我的第二次尝试是使用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

然后MIC的名字将是在“DirectShow音频设备”后面的线上

+0

其实,这并不总是奏效。它在Windows 8平板电脑上工作,但在Windows 7桌面上,它只是返回截断的字符串。 – AlcubierreDrive

+0

dshow似乎总是被截断,希望有其他方法来枚举它们,而不是... – rogerdpack

1

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

的Python代码来获取默认的DirectSound输入设备的名称应该是这个样子:

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

谢谢!如果您能够请提供一个从DirectSound或WASAPI查询默认麦克风名称的python代码示例,我会接受您的答案。 – AlcubierreDrive