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

使用Python'列出所有音频设备;s pyaudio(portaudio绑定),python,audio,portaudio,pyaudio,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列出所有音频设备?我认为问题可能出在底层的PortAudio库中。您是否有(或者可以用C编写)一个

我试过了

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
列出所有音频设备?

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

此外,谷歌搜索“portaudio asio”还显示:

在某些情况下,PortAudio受到 底层本机音频API。。。ASIO SDK只允许一台设备 一次打开,因此PortAudio/ASIO当前不支持打开 同时使用多个ASIO设备


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

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

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

正如Multimedia Mike所建议的,您可以通过从C中枚举PA设备来消除PyAudio。PortAudio发行版中的PA_devs.C程序可以做到这一点。

我已经为Python创建了(在这个问题发布后一段时间)模块,其中包括ASIO支持(以及所有其他主机API)。 它可以安装在以下位置:

pip install sounddevice --user
之后,您可以列出所有设备,包括:

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

import sounddevice as sd
sd.query_devices()

我需要研究这个。我现在还没有安装C编译器/链接器(这些库也没有),对此我一无所知。。。MultimediaMike上有这样的工具吗?PortAudio不能同时打开多个ASIO设备的流,这与枚举设备信息无关。
sounddevice
模块也使用PortAudio,它可以找到正确的设备。谢谢您的回答。我花了好几个小时试图用ASIO支持编译PyAudio(感谢讨论),但不幸的是我无法完成编译。。。如果您有时间查看这里描述的步骤@RossBencina,请提前感谢!我用一个pyaudio二进制文件尝试了你的代码:对我来说,它打印了我所有的ASIO设备Yes@EmileVrijdags,几个月前我联系了M.Gohlke,他用ASIO支持更新了他的二进制文件。(我最初的帖子是在2013年12月)酷!我会好好利用它;)python3.6-m sounddevice(不打印任何内容)@ChrisP请创建一个问题,如中所述。