我试过了
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
?
我已经创建了(在这个问题发布后的一段时间)用于 Python 的sounddevice模块,它包括它自己的支持 ASIO 的 DLL(以及所有其他主机 API)。它可以安装:
pip install sounddevice --user
之后,您可以列出所有设备:
python -m sounddevice
当然,您也可以在 Python 中执行此操作:
import sounddevice as sd
sd.query_devices()
我认为你的期望是合理的。枚举 PortAudio 设备的等效 C 代码将为您提供所有可用设备。有几件事可能是错误的:
您的 PyAudio 版本尚未使用 ASIO 支持进行编译。PortAudio 将仅枚举已在编译时配置/编译的本机主机 API 的设备。
您有一个 64 位的 Python/PyAudio 版本,并且您的 ASIO 设备驱动程序是 32 位的,反之亦然(64 位 ASIO 驱动程序和 32 位 Python)。
正如 Multimedia Mike 所建议的那样,您可以通过从 C 中枚举 PA 设备来消除等式中的 PyAudio。PortAudio 发行版中的 pa_devs.c 程序就是这样做的。
我认为问题可能出在底层的 PortAudio 库中。你有(或者你可以用 C 语言编写)一个访问 PortAudio 库并尝试执行相同列表的简单实用程序吗?
此外,谷歌搜索“portaudio asio”揭示了官方 PortAudio 文档中的这个花絮:
在某些情况下,PortAudio 受到底层原生音频 API 功能的限制……ASIO SDK 一次只允许打开一个设备,因此 PortAudio/ASIO 目前不支持同时打开多个 ASIO 设备。