我已将USB麦克风(ReSpeaker 4麦克风阵列(UAC1.0))连接到我的Gentoo linux机器上。 我想用USB麦克风录制pyaudio。 Pyaudio检测到USB设备,但未检测到其输入通道。
这是输出的相关部分:
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
print p.get_device_info_by_index(i)
[...]
'maxOutputChannels':2L,'name':u'HDA Intel PCH:AD198x模拟 (hw:0,0)”,“ defaultHighInputLatency”:-1.0}
{'defaultSampleRate':16000.0,'defaultLowOutputLatency':0.024, 'defaultLowInputLatency':-1.0,' maxInputChannels':0L , 'structVersion':2L,'hostApi':0L,'index':1, 'defaultHighOutputLatency':0.096,'maxOutputChannels':2L,'name': u' ReSpeaker 4麦克风阵列(UAC1.0):USB音频(hw:1,0)', 'defaultHighInputLatency':-1.0}
{'defaultSampleRate':44100.0,'defaultLowOutputLatency':-1.0, 'defaultLowInputLatency':0.008707482993197279,'maxInputChannels': 2L,'structVersion':2L,'hostApi':0L,'index':2, 'defaultHighOutputLatency':-1.0,'maxOutputChannels':0L,'name': u'PrimeSense设备:USB音频(hw:2,0)','defaultHighInputLatency': 0.034829931972789115}
[...]
英雄
$ arecord -l
成功检测到麦克风为输入设备。
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: AD198x Analog [AD198x Analog]
Subdevices: 0/2
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
card 1: ArrayUAC10 [ReSpeaker 4 Mic Array (UAC1.0)], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 2: Device [PrimeSense Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 3: Phone [MT65xx Android Phone], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
我假设arecord和pyaudio相互独立,但是 我该怎么办才能使Pyaudio将麦克风识别为Mcrophone? 是否有一些必须修改的配置文件?
非常感谢任何帮助。
答案 0 :(得分:0)
因此,在我的情况下,pulseaudio阻止了设备。我找到了几种方法可以更改此设置:
检查pulseaudio是否用lsof | grep "/dev/snd/"
阻止了设备
在autospawn = no
link中设置/etc/pulse/client.conf
然后致电
pulseaudio --kill
systemctl --user stop pulseaudio.socket
systemctl --user stop pulseaudio.service
此后lsof | grep "/dev/snd/"
为空,
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
print p.get_device_info_by_index(i)
产量:
[...] {'defaultSampleRate':16000.0,'defaultLowOutputLatency':0.024, 'defaultLowInputLatency':0.024,' maxInputChannels':6L , 'structVersion':2L,'hostApi':0L,'index':3, 'defaultHighOutputLatency':0.096,'maxOutputChannels':2L,'name': u'ReSpeaker 4麦克风阵列(UAC1.0):USB音频(hw:3,0)', 'defaultHighInputLatency':0.096} [...]
如果您仍然希望Pulseaudio处理其他设备但忽略USB设备,则可以使用udev完成。 link
另一种选择是卸载检测到USB设备link的Pulseaudio模块索引。
呼叫pactl list
并找到设备的线路,例如:
所有者模块:7
然后致电pactl unload-module 7
对我也有用的是之前通过
插入USB麦克风卸载模块-udev-detect。 pactl unload-module module-udev-detect