2013-05-22 131 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