10

我试过了

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

4

3 回答 3

7

我已经创建了(在这个问题发布后的一段时间)用于 Python 的sounddevice模块,它包括它自己的支持 ASIO 的 DLL(以及所有其他主机 API)。它可以安装:

pip install sounddevice --user

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

python -m sounddevice

当然,您也可以在 Python 中执行此操作:

import sounddevice as sd
sd.query_devices()
于 2015-12-09T09:22:35.090 回答
1

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

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

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

正如 Multimedia Mike 所建议的那样,您可以通过从 C 中枚举 PA 设备来消除等式中的 PyAudio。PortAudio 发行版中的 pa_devs.c 程序就是这样做的。

于 2013-12-30T06:19:46.810 回答
-2

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

此外,谷歌搜索“portaudio asio”揭示了官方 PortAudio 文档中的这个花絮

在某些情况下,PortAudio 受到底层原生音频 API 功能的限制……ASIO SDK 一次只允许打开一个设备,因此 PortAudio/ASIO 目前不支持同时打开多个 ASIO 设备。

于 2013-12-24T16:21:06.873 回答