Pyaudio 无法识别 ReSpeaker usb 麦克风 InputChannels
Pyaudio does not recognize ReSpeaker usb microphones InputChannels
我已将 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 Analog
(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 Mic Array (UAC1.0): USB Audio (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 Device: USB Audio (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 将麦克风识别为麦克风?
是否有一些配置文件必须进行调整?
非常感谢任何帮助。
所以在我的例子中,pulseaudio 阻止了设备。我找到了几个选项来改变这个:
检查 pulseaudio 是否使用 lsof | grep "/dev/snd/"
阻止设备
在/etc/pulse/client.conf
link
中设置autospawn = no
并调用
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 Mic Array (UAC1.0): USB Audio (hw:3,0)',
'defaultHighInputLatency': 0.096}
[...]
如果您仍然希望 pulseaudio 处理您的其他设备但忽略您的 USB 设备,这可以使用 udev 来完成。 link
另一种选择是卸载检测到 USB 设备的 pulseaudio 模块索引 link。
致电pactl list
并找到您设备的线路,例如:
Owner Module: 7
然后调用pactl unload-module 7
对我也有用的是卸载 module-udev-detect before 通过
插入 USB 麦克风
pactl unload-module module-udev-detect
我已将 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 Analog (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 Mic Array (UAC1.0): USB Audio (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 Device: USB Audio (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 将麦克风识别为麦克风? 是否有一些配置文件必须进行调整?
非常感谢任何帮助。
所以在我的例子中,pulseaudio 阻止了设备。我找到了几个选项来改变这个:
检查 pulseaudio 是否使用
阻止设备lsof | grep "/dev/snd/"
在
中设置/etc/pulse/client.conf
linkautospawn = no
并调用
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 Mic Array (UAC1.0): USB Audio (hw:3,0)', 'defaultHighInputLatency': 0.096} [...]
如果您仍然希望 pulseaudio 处理您的其他设备但忽略您的 USB 设备,这可以使用 udev 来完成。 link
另一种选择是卸载检测到 USB 设备的 pulseaudio 模块索引 link。
致电
pactl list
并找到您设备的线路,例如:Owner Module: 7
然后调用
pactl unload-module 7
对我也有用的是卸载 module-udev-detect before 通过
插入 USB 麦克风pactl unload-module module-udev-detect