Pyaudio无法识别USB麦克风的InputChannels

时间:2019-07-16 09:24:46

标签: linux pyaudio gentoo

我已将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? 是否有一些必须修改的配置文件?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

因此,在我的情况下,pulseaudio阻止了设备。我找到了几种方法可以更改此设置:

  1. 检查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}   [...]

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

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

    呼叫pactl list并找到设备的线路,例如:

      

    所有者模块:7

    然后致电pactl unload-module 7

  4. 对我也有用的是之前通过

    插入USB麦克风卸载模块-udev-detect。

    pactl unload-module module-udev-detect