我正在尝试在 Win7 上使用 PyAudio 连接 PreSonus AudioBox 1818VSL,但是一次录制超过 2 个通道(立体声)时遇到了一些问题。PreSonus 驱动程序创建了许多立体声输入音频设备(例如立体声通道 1&2、3&4 等)和一个 18 输入通道 ASIO 设备。我可以毫无问题地从任何立体声设备录制。为了最大限度地减少超过 2 个通道的延迟和记录,我正在尝试使用 ASIO 设备。
我一直在使用来自http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio的 PyAudio 版本,它编译了对 ASIO、DS、WMME、WASAPI、WDMKS 的支持。
调用pyaudio_handle.is_format_supported()
显示 ASIO 设备支持 44.1、48 和 96 kHz 的 8 到 32 位数据。
下面是返回的字典pa.get_device_info_by_index(32)
{'defaultHighInputLatency': 0.046439909297052155,
'defaultHighOutputLatency': 0.046439909297052155,
'defaultLowInputLatency': 0.046439909297052155,
'defaultLowOutputLatency': 0.046439909297052155,
'defaultSampleRate': 44100.0,
'hostApi': 2L,
'index': 32,
'maxInputChannels': 18L,
'maxOutputChannels': 18L,
'name': u'AudioBox ASIO Driver',
'structVersion': 2L}
下面是我用来创建 PyAudio 输入流的代码。回调函数只是将数据推送到一个列表中并返回pyaudio.paContinue
,直到我得到我想要的样本数量,然后它才返回pyaudio.paComplete
。
pyaudio_handle = pyaudio.PyAudio()
stream = pyaudio_handle.open(
format=pyaudio.get_format_from_width(2,unsigned=False),
channels=4,
rate=48000,
input=True,
frames_per_buffer=256,
input_device_index=32,
stream_callback=pyaudio_stream_callback,
)
尝试以高于 44.1 kHz 的速率初始化 ASIO 驱动程序会导致 PyAudio 挂起而不返回。以 44.1 kHz 初始化会产生以下错误:IOError: [Errno Unanticipated host error] -9999
.
您可以提供解决此错误的任何帮助都会有所帮助。在 Win7 上运行时,我什至会证明 ASIO 可以在 PyAudio 中使用 > 2 个通道。谢谢。