Windows:获取默认麦克风名称

Posted

技术标签:

【中文标题】Windows:获取默认麦克风名称【英文标题】:Windows: get default microphone name 【发布时间】:2013-05-22 06:29:23 【问题描述】:

在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 个字符长度)。如果我只能得到这个字符串的非截断版本,那就完美了。

对于获取默认麦克风名称的最简单、最独立的方法有什么想法吗?谢谢!

【问题讨论】:

截断问题相关:***.com/questions/1429143/… 【参考方案1】:

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

ffmpeg -list_devices true -f dshow -i dummy

然后mic的名字会在“DirectShow audio devices”后面一行

【讨论】:

实际上,这并不总是有效的。它在 Windows 8 平板电脑上工作,但在 Windows 7 桌面上,它只是返回截断的字符串。 dshow 似乎总是被截断,希望有其他方法来枚举它们...【参考方案2】:

根据我使用 PortAudio 的经验,MME 设备的名称被截断为 32 个字符。我一直认为这种行为是特定于 WMME API 的。您应该能够在 DirectSound 或 WASAPI 等其他 API 中查询有关同一物理设备的信息。 (在 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"]

【讨论】:

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

以上是关于Windows:获取默认麦克风名称的主要内容,如果未能解决你的问题,请参考以下文章

获取 windows phone 中麦克风的振幅

Java 声音采样器未完成获取缓冲区

QtCreate中使用QAudioInput获取默认麦克风的音频数据

音频:如何设置默认麦克风的电平?

Windows 10 神州网信政府版 麦克风摄像头的使用。

是否可以确定麦克风类型?