2016-04-27 467 views
5

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

我的电脑有两个麦克风,一个是内置麦克风,另一个是通过USB,我想用USB麦克风录音。 Stream class有一个input_device_index用于选择设备,但不清楚这个索引与设备的关系。例如,我怎么知道哪个设备索引0指的是?如果我不得不猜测,我会说0指的是内置设备,而1指的是USB设备,但我想找到一些确认此问题的编程方式。在Linux上,有没有办法获得这些索引及其引用设备的列表?

回答

1

我还没有看pyaudio,但我已经使用sounddevice以及上几次。

下面是一个示例代码,列出了可用的inputoutputaudio 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) 
7

你可以使用: 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') 
+0

此代码失败。需要添加:info = p.get_host_api_info_by_index(0)然后numdevices = info.get('deviceCount')。此外,我需要使用p而不是self.p,然后它工作。请修复您的答案,然后我会立即投票。谢谢。 –

+0

@WaynePiekarski完成。谢谢! – slegroux