How to select a specific input device with PyAudio

后端 未结 5 1037
余生分开走
余生分开走 2020-12-06 17:01

When recording audio via PyAudio, how do you specify the exact input device to use?

My computer has two microphones, one built-in and one via USB, and I want to reco

相关标签:
5条回答
  • 2020-12-06 17:15

    you can use: get_device_info_by_host_api_device_index. For instance:

    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')
    
    0 讨论(0)
  • 2020-12-06 17:21

    I don't know about PyAudio, but with the sounddevice module it goes like that:

    python3 -m sounddevice
    
    0 讨论(0)
  • 2020-12-06 17:21

    Just use arecord -l to list all available input devices.

    0 讨论(0)
  • 2020-12-06 17:34

    I havent looked at pyaudio but I've used sounddevice as well on few occasions.

    Here is an example code that lists available input and output audio devices.

    import sounddevice as sd
    print sd.query_devices() 
    

    As you can see from below output, when I put my headset to mic jack , Index 1is available as input. 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

    While default laptop audio microphone comes up as index 2

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

    Output

    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)
    
    0 讨论(0)
  • 2020-12-06 17:35

    In the PyAudio Documentation it states that you can define an input_device_index.

    To find out what that device index is, you can follow the code provided in this Github Gist or by following the code found on the Raspberry Pi Forum which provides an example of the outputted code.

    0 讨论(0)
提交回复
热议问题