在使用PyAudio录制音频时,如何指定要使用的确切输入设备?
我的电脑有两个麦克风,一个是内置的,一个是通过USB连接的,我想使用USB麦克风进行录音。 Stream类 有一个 input_device_index
用于选择设备,但不清楚该索引如何与设备相关联。例如,如何确定设备索引0代表哪个设备?如果要猜测,我会说0代表内置设备,1代表USB设备,但我想找到一些编程方式来确认这一点。在Linux上,有没有一种获取这些索引及其所指设备列表的方法?
您可以使用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'))
我还没有看过pyaudio
,但我在几个场合使用过sounddevice。
这里有一个列出可用的input
和output
audio devices
的示例代码。
import sounddevice as sd
print sd.query_devices()
索引1
可用作输入。1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)
而默认的笔记本电脑麦克风则出现在索引2
。
输出。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)
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'))
stream = p.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=FRAMES_PER_BUFFER,
input_device_index=1
)
import sounddevice as sd
print(sd.query_devices())
p = pyaudio.PyAudio()
# if there is no speaker device this all makes no sense anyways
try:
wasapi_info = p.get_host_api_info_by_type(pyaudio.paWASAPI)
except OSError:
exit()
#choosing the speaker device
default_speakers=p.get_device_info_by_index(wasapi_info["defaultOutputDevice"])
# or "defaultInputDevice"
input_device_index
。只需使用arecord -l
列出所有可用的输入设备。
input_device_index=x
是解决方案。 - fsp