【问题标题】:Pyaudio does not recognize ReSpeaker usb microphones InputChannelsPyaudio 无法识别 ReSpeaker usb 麦克风 InputChannels
【发布时间】:2019-11-25 00:01:49
【问题描述】:

我已将 USB 麦克风 (ReSpeaker 4 Mic Array (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,'ma​​xInputChannels':0L, 'structVersion':2L,'hostApi':0L,'index':1, “defaultHighOutputLatency”:0.096,“maxOutputChannels”:2L,“名称”: 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,'名称': 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 将麦克风识别为麦克风? 是否有一些配置文件需要修改?

非常感谢任何帮助。

【问题讨论】:

  • 对此有什么答案吗?请分享!

标签: linux pyaudio gentoo


【解决方案1】:

所以在我的情况下,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,'ma​​xInputChannels':6L, 'structVersion':2L,'hostApi':0L,'index':3, 'defaultHighOutputLatency':0.096,'maxOutputChannels':2L,'名称': u'ReSpeaker 4 麦克风阵列 (UAC1.0):USB 音频 (hw:3,0)', 'defaultHighInputLatency':0.096} [...]

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

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

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

    所有者模块:7

    然后拨打pactl unload-module 7

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

    插入 USB 麦克风

    pactl unload-module module-udev-detect

【讨论】:

    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2020-10-04
    • 2015-02-26
    相关资源
    最近更新 更多