【问题标题】:How to select a specific input device with PyAudio如何使用 PyAudio 选择特定的输入设备
【发布时间】:2016-08-22 00:23:34
【问题描述】:

通过 PyAudio 录制音频时,如何指定要使用的确切输入设备?

我的电脑有两个麦克风,一个是内置的,一个是 USB 的,我想用 USB 麦克风录音。 Stream class 有一个input_device_index 用于选择设备,但目前尚不清楚该索引与设备的关系。例如,我如何知道 0 指的是哪个设备索引?如果我不得不猜测,我会说 0 指的是内置设备,而 1 指的是 USB 设备,但我想找到一些程序化的方式来确认这一点。在 Linux 上,有没有办法获取这些索引及其引用的设备的列表?

【问题讨论】:

    标签: python linux audio pyaudio


    【解决方案1】:

    您可以使用: get_device_info_by_host_api_device_index。 例如:

    import pyaudio
    p = pyaudio.PyAudio()
    info = p.get_host_api_info_by_index(0)
    numdevices = info.get('deviceCount')
    for i in range(0, numdevices):
            if (p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0:
                print "Input Device id ", i, " - ", p.get_device_info_by_host_api_device_index(0, i).get('name')
    

    【讨论】:

    • 这段代码对我来说失败了。还需要添加:info = p.get_host_api_info_by_index(0) 然后 numdevices = info.get('deviceCount')。我还需要使用 p 而不是 self.p,然后它就起作用了。请修正你的答案,然后我会投票。谢谢。
    • @WaynePiekarski 完成。谢谢!
    • 您如何将列出的设备之一指定为 pyaudio 设备?
    • 如何选择输入设备? get_device_info_by_host_api_device_index 只获取我的信息
    • input_device_index=x 是解决方案。
    【解决方案2】:

    我没有看过pyaudio,但我也用过几次sounddevice

    这是一个示例代码,列出了可用的 inputoutput audio devices

    import sounddevice as sd
    print sd.query_devices() 
    

    从下面的输出可以看出,当我将耳机放到麦克风插孔时,Index 1 可用作输入。 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

    虽然默认笔记本电脑音频麦克风显示为index 2

    2 Microphone Array (IDT High Defi, MME (2 in, 0 out)

    输出

    Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> ================================ RESTART ================================
    >>> 
       0 Microsoft Sound Mapper - Input, MME (2 in, 0 out)
    >  1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)
       2 Microphone Array (IDT High Defi, MME (2 in, 0 out)
       3 Microsoft Sound Mapper - Output, MME (0 in, 2 out)
    <  4 Speakers / Headphones (IDT High, MME (0 in, 2 out)
       5 Communication Headphones (IDT H, MME (0 in, 2 out)
       6 Primary Sound Capture Driver, Windows DirectSound (2 in, 0 out)
       7 Jack Mic (IDT High Definition Audio CODEC), Windows DirectSound (2 in, 0 out)
       8 Microphone Array (IDT High Definition Audio CODEC), Windows DirectSound (2 in, 0 out)
       9 Primary Sound Driver, Windows DirectSound (0 in, 2 out)
      10 Speakers / Headphones (IDT High Definition Audio CODEC), Windows DirectSound (0 in, 2 out)
      11 Communication Headphones (IDT High Definition Audio CODEC), Windows DirectSound (0 in, 2 out)
      12 Communication Headphones (IDT High Definition Audio CODEC), Windows WASAPI (0 in, 2 out)
      13 Speakers / Headphones (IDT High Definition Audio CODEC), Windows WASAPI (0 in, 2 out)
      14 Jack Mic (IDT High Definition Audio CODEC), Windows WASAPI (2 in, 0 out)
      15 Microphone Array (IDT High Definition Audio CODEC), Windows WASAPI (2 in, 0 out)
      16 Headset Microphone (Bluetooth Hands-free Audio), Windows WDM-KS (1 in, 0 out)
      17 Headphones (Bluetooth Hands-free Audio), Windows WDM-KS (0 in, 2 out)
      18 Headphones (HpOut), Windows WDM-KS (0 in, 2 out)
      19 Microphone Array (MicIn2), Windows WDM-KS (2 in, 0 out)
      20 Jack Mic (MuxedIn), Windows WDM-KS (2 in, 0 out)
      21 Dock Mic (MuxedIn), Windows WDM-KS (2 in, 0 out)
      22 Rec. Playback (MuxedIn), Windows WDM-KS (2 in, 0 out)
      23 Speakers (Speaker/HP), Windows WDM-KS (0 in, 2 out)
    

    【讨论】:

      【解决方案3】:

      PyAudio Documentation 中声明您可以定义input_device_index

      要了解该设备索引是什么,您可以按照此Github Gist 中提供的代码或按照Raspberry Pi Forum 中提供的代码找到输出代码的示例。

      【讨论】:

        【解决方案4】:

        您可以使用PulseAudio 选择输入设备。

        【讨论】:

          【解决方案5】:

          我不知道 PyAudio,但是使用 sounddevice 模块是这样的:

          python3 -m sounddevice
          

          【讨论】:

            【解决方案6】:

            只需使用arecord -l 列出所有可用的输入设备。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-09-03
              • 2011-06-08
              • 2016-03-05
              • 1970-01-01
              • 2019-11-14
              • 1970-01-01
              • 1970-01-01
              • 2020-08-03
              相关资源
              最近更新 更多