使用Python的pyaudio列出所有音频设备(portaudio绑定)

时间:2013-12-24 12:02:24

标签: python audio portaudio pyaudio

我试过

import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    print p.get_device_info_by_index(i)

但我没有获得所有设备的完整列表:例如,我没有在此列表中获得ASIO设备。这很奇怪,因为portaudio也应该给ASIO设备,对吗?

如何使用pyaudio列出所有音频设备?

3 个答案:

答案 0 :(得分:2)

我已经创建了(发布此问题后一段时间)Python的sounddevice模块,其中包括its own DLLs和ASIO支持(以及所有其他主机API)。 它可以安装:

pip install sounddevice --user

之后,您可以列出所有设备:

python -m sounddevice

当然你也可以在Python中做到这一点:

import sounddevice as sd
sd.query_devices()

答案 1 :(得分:1)

我认为你的期望是合理的。枚举PortAudio设备的等效C代码将为您提供所有可用设备。有几件事可能是错的:

  • 您的构建的PyAudio尚未使用ASIO支持进行编译。 PortAudio将枚举已在编译时配置/编译的本机主机API的设备。

  • 你有一个64位版本的Python / PyAudio,你的ASIO设备驱动程序是32位,反之亦然(64位ASIO驱动程序和32位Python)。

正如多媒体迈克建议的那样,你可以通过枚举来自C的PA设备来消除PyAudio .PortAudio分布中的pa_devs.c程序就是这样做的。

答案 2 :(得分:-2)

我认为问题可能出在底层的PortAudio库中。你有(或者你能在C中编写)一个访问PortAudio库并尝试执行同一个列表的简单实用程序吗?

此外,谷歌搜索' portaudio asio'揭示this tidbit from the official PortAudio docs

  

有些情况下PortAudio受到的功能限制   底层本机音频API ... ASIO SDK只允许一个设备   一次打开,所以PortAudio / ASIO目前不支持开放   同时使用多个ASIO设备。