如何使用 PyAudio 选择特定的输入设备
- 2024-11-08 09:04:00
- admin 原创
- 27
问题描述:
通过 PyAudio 录制音频时,如何指定要使用的精确输入设备?
我的电脑有两个麦克风,一个是内置的,一个是 USB 的,我想使用 USB 麦克风录音。Stream类有一个input_device_index
用于选择设备的函数,但不清楚这个索引与设备之间的关系。例如,我怎么知道索引 0 指的是哪个设备?如果我不得不猜测,我会说 0 指的是内置设备,而 1 指的是 USB 设备,但我想找到一些编程方法来确认这一点。在 Linux 上,有没有办法获取这些索引及其引用的设备的列表?
解决方案 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'))
解决方案 2:
使用@slegroux 精彩代码查找音频索引:
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'))
一旦找到要使用的麦克风所在的索引,请将 input_device_index 选项后跟麦克风的索引(在我的情况下,麦克风位于索引 1)添加到 p.open() 中,如下所示:
stream = p.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=FRAMES_PER_BUFFER,
input_device_index=1
)
希望这有帮助!
解决方案 3:
我没有看过,pyaudio
但是我也曾多次使用过声音设备。
input
下面是列出可用和的示例代码output
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)
解决方案 4:
您的麦克风(您当前正在使用的)的索引始终为 1。您可以使用@Anil_M 的代码对此进行测试:
import sounddevice as sd
print(sd.query_devices())
运行此代码,然后查看索引 1。现在拔下麦克风并再次运行代码。麦克风仍将处于 1 状态
仅当您想使用其他设备时,例如在我的情况下,我需要操作系统音频,您可以使用以下代码:
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"
我必须提一下,此代码仅适用于 Windows
解决方案 5:
PyAudio 文档中指出您可以定义一个input_device_index
。
要找出该设备索引是什么,您可以按照此Github Gist中提供的代码或按照Raspberry Pi 论坛上提供的代码进行操作,该论坛提供了输出代码的示例。
解决方案 6:
您可以使用PulseAudio选择输入设备。
解决方案 7:
我不了解 PyAudio,但是使用sounddevice模块它是这样的:
python3 -m sounddevice
解决方案 8:
只需arecord -l
列出所有可用的输入设备。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件