python-sounddevice 不会检测音频接口上的所有输入通道(windows)
Posted
技术标签:
【中文标题】python-sounddevice 不会检测音频接口上的所有输入通道(windows)【英文标题】:python-sounddevice won't detect all input channels on audio interface (windows) 【发布时间】:2019-07-01 09:18:15 【问题描述】:我使用的是 Focusrite Scarlett 18i20 音频接口,我需要使用至少 4 个输入来记录脉冲响应。我在 Windows 10 PC 上运行,使用 python (anaconda) 和 sounddevice。
当我使用 sounddevice.query_devices() 时,它会将设备列为 “1个Focusrite USB(Focusrite USB Au,MME(2进0出)”。
我的问题是该设备实际上有 8 个模拟输入通道,我至少需要其中的 4 个。输出也是如此,它看到 2 但应该是 8。如何让 sounddevice 识别它们?这是驱动问题吗?
devices in matlab and sounddevice
【问题讨论】:
您能否发布完整的设备列表? 是的,请参阅我添加到主帖或此处的链接中的图片:i.stack.imgur.com/NzIdR.png 您是否使用conda
安装了sounddevice
模块?如果是,你应该尝试卸载它并使用pip
安装它。
谢谢!我重新安装了 pip,它现在向我显示了具有正确输入和输出数量的设备。希望它会从这里很好地工作,再次感谢!
@Neilski 问题是conda-forge
上的PortAudio 包不支持ASIO,请参阅github.com/conda-forge/portaudio-feedstock/issues/9。另见github.com/spatialaudio/python-sounddevice/issues/229。
【参考方案1】:
由于 Windows 10 上有很多音频驱动程序可以在 Scarlett 和 Python 之间运行,因此您必须选择更合适的(ASIO 在 Windows 上运行良好,您可以下载它here)。
下载并安装后,sounddevice.query_devices()
应返回多个包含 Scarlett 的字符串,每个字符串都有不同的驱动程序。
然后你只需要启动你的流并选择你所有的频道(我的是 6i6 所以只有 6 个频道):
def run(self):
try:
with sd.Stream(callback=self.read_stream, 'device': "Focusrite USB ASIO", 'channels': 6, samplerate=44100):
sd.sleep(2147483647)
except ValueError:
print("Focusrite disconnected")
【讨论】:
ASIO4ALL 链接很有帮助,但根据问题中的设备列表,这已经安装了。问题是 PortAudio DLL 必须支持编译的 ASIO。请参阅问题下方的 cmets。以上是关于python-sounddevice 不会检测音频接口上的所有输入通道(windows)的主要内容,如果未能解决你的问题,请参考以下文章