gpt4 book ai didi

python - 在 Linux 中以编程方式检查特定类型的设备

转载 作者:太空宇宙 更新时间:2023-11-03 20:10:07 29 4
gpt4 key购买 nike

我正在我的 python 程序(在 Linux 上)中编写一个片段,允许用户录制一个简短的音频文件。当然,代码的第一步是检查麦克风是否存在。不幸的是,我很难可靠地做到这一点。

我希望它独立工作:

  1. USB麦克风型号
  2. 插入/枚举它和任何其他音频设备的顺序
  3. 设备是热插拔还是冷插拔

这可能吗?我考虑过:

  • udev 规则和“udevadm info”命令(与上面的第 1 项和第 3 项冲突)
  • aplay/arecord(使用 --device 选项指定设备与第 2 项冲突)
  • lsusb 命令(与 1 冲突)
  • 检查/dev 和/sys 目录中的特定设备节点或文件(与 1 和 2 冲突)

这突破了我的 Linux 知识的极限,因此我很有可能对上述潜在冲突做出了一些错误的假设。

最佳答案

Of course, the first step in the code is to check whether a mic is present.

这比你想象的要棘手。使用pyaudio包中发现可用的输入设备相对容易...

import pyaudio

p = pyaudio.PyAudio()

for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev.get('maxInputChannels', 0) > 0:
print('Input device: ', dev.get('name'))

...但在我的系统上,至少有四种不同的输入设备...一种是 session 麦克风,一种是耳机的麦克风输入,一种是相机上的麦克风,一种是麦克风在我只用来驱动一组扬声器的 USB 声音设备上。无法以编程方式决定我真正想要使用哪一个。

<小时/>

如果您假设设置简单(例如,只有一个麦克风),您可以只要求 PyAudio 进行录制,它将使用默认输入设备。有关更多详细信息,请参阅 PyAudio 文档中的示例:

stream = p.open(input=True, ...)

这似乎满足您的要求。如果没有可用的输入设备,这将失败:

>>> s = p.open(input=True, rate=44100, channels=2, format=pyaudio.paInt16)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.7/site-packages/pyaudio.py", line 750, in open
stream = Stream(self, *args, **kwargs)
File "/usr/lib64/python3.7/site-packages/pyaudio.py", line 441, in __init__
self._stream = pa.open(**arguments)
OSError: [Errno -9996] Invalid input device (no default output device)

关于python - 在 Linux 中以编程方式检查特定类型的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757537/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com