[我正在Linux上的python程序中编写一个段,该段允许用户记录一个简短的音频文件。当然,代码中的第一步是检查是否存在麦克风。不幸的是,我正在努力做到可靠。
我希望它独立于:
这可能吗?我考虑过:
这正在推动我的linux知识的极限,所以我很有可能对上述潜在冲突做出了一些不正确的假设。
当然,代码中的第一步是检查是否存在麦克风。
这比您想象的要棘手。使用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'))
...但是在我的系统上,至少有四个不同的输入设备...一个是会议麦克风,一个是从头戴式耳机输入的麦克风,一个是相机上的麦克风,一个是打开的麦克风。 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)