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)的主要内容,如果未能解决你的问题,请参考以下文章

在数据连接中检测移动 chrome 上 HTML 音频的 canplaythrough

检测音频中的音频[音频识别] [关闭]

如何检测音频是不是无法静音?

检测连接的音频设备 iOS

使用麦克风录制时,SDL 音频捕获未检测到任何音频

有没有办法检测 HTML 5 网络音频 API 中的音频频率?