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 阻止了设备。我找到了几个选项来改变这个:

  1. 检查 pulseaudio 是否使用 lsof | grep "/dev/snd/"

    阻止设备

    /etc/pulse/client.conflink

    中设置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} [...]

  2. 如果您仍然希望 pulseaudio 处理您的其他设备但忽略您的 USB 设备,这可以使用 udev 来完成。 link

  3. 另一种选择是卸载检测到 USB 设备的 pulseaudio 模块索引 link

    致电pactl list并找到您设备的线路,例如:

    Owner Module: 7

    然后调用pactl unload-module 7

  4. 对我也有用的是卸载 module-udev-detect before 通过

    插入 USB 麦克风

    pactl unload-module module-udev-detect