从20多个麦克风输入

Pau*_*lly 10 python audio usb microphone libusb

我被问到(如果可能的话)在一台计算机上编写监控至少20个麦克风输入的程序.

目前我在使用Alsa的Ubuntu系统上使用python(2.6)进行原型设计.到目前为止,我的尝试已经产生了不少问题......

Ubuntu是一个要求,Alsa不是,而python是理想的.

对于硬件,一个建议是多个声卡.另一个是一系列usb集线器和麦克风适配器(就像这些)(在这种情况下,设备将是相同的并且在同一USB总线上)

问题:

如何从单个声卡同时录制多个麦克风?(例如,对于任何知道如何使用超过两个输入的人来说,使用线路输入和麦克风,奖励!)

在USB设置中,如何识别声卡(usb适配器)插入USB集线器(或USB集线器链)的位置.

如果解决方案是通过USB对麦克风进行原始访问,那么USB总线上的设备位置是仅取决于它们插入USB集线器上的哪个端口,还是可以在打开和关闭计算机电源之间进行更改?

>声音 - 最后,如果使用原始的访问,我该如何获得最佳的数据(与pyUSB目前没有经验),什么转换(如果有的话)从原料要求?

编辑:

由监视器,我已经要求记录输入到磁盘(理想地高于设定的阈值,其Speex编解码器看起来非常适合),监视器的音量水平,提供图形反馈和建立至少一个输出通过所有有源麦克风周期.

Python是不是一个长期的需求,只是到目前为止,我已经找到摆脱声卡PCM数据(仅麦克风不过)最简单的方法

我打算在独立线程的声卡和数据处理地点进行投票,我没有得到与太多的经验的区域.

我在哪里可以找到有关实现USB音频类驱动程序的更多信息?

Aar*_*ron 7

"监视器"的定义在这里是一个非常大的变量.监视器可能意味着"记录到磁盘","检测高于特定阈值的音量级别"或"在频域中执行更高级别的分析(即传统信号处理)".这三者对CPU使用率和Python的可行性有着非常不同的含义.根据您的想法,Python可能不是最合适的.

如果你使用Python,我会注意到以下内容:

  • Python的音频支持非常弱
  • python ALSA绑定(pyalsa)用于音序器,混音器和硬件控制,而不是读取PCM样本(尽管绑定可能有助于管理设备)
  • Python在某些多线程条件下(参见GIL - 全局解释器锁)存在问题,可以通过单独的Python进程完全避免,但这在所有情况下都不可取(我假设您正在运行多核/处理器系统,并希望划分监控CPU上20个音频输入的负载.
  • 像音频分析那样的CPU和内存密集型操作并不是Python的强项.话虽如此,可以通过struct.unpack()解压缩PCM数据,并且可以使用NumPy和SciPy中的例程进行信号分析.

每个线路输入和麦克风应该是立体的,每个有效地提供两个麦克风输入,即每个声卡四个麦克风.假设只有20个输入,这意味着五个USB音频适配器.顺便说一句,要使用线路输入,你需要某种类型的麦克风前置放大器,这可能比你想要的更昂贵.在这种情况下,您需要10个USB音频适配器才能输入20个输入.

我要提醒大多数低端集线器可能无法处理5-10个音频适配器的流量.就此而言,我确信你有一个USB 2.0高速集线器(即使实际的音频设备是USB 1.1全速或慢速),以确保你有足够的上行带宽.如果您有这个选项,就不难获得带有4个或5个外部USB端口的PCI USB适配卡.顺便说一句,你显示的USB设备只有立体声输出和麦克风输入(没有线路输入).

顺便说一句,理想情况下,您使用USB等时传输模式具有低延迟和一致的传输,但我怀疑ALSA驱动程序是否支持它.

关于USB声卡的逻辑到物理映射,一组udev规则允许您根据USB层次结构提供有用且一致的设备命名方案,或者,如果您需要,可以提供序列号(如果设备具有它们)或其他属性.在任何情况下,您都应该能够使用udev规则来稳定音频设备的身份或物理位置(如您所选).

我对pyUSB一无所知,但确实看到它支持等时传输模式.一目了然pyUSB可以实现非常精确的控制,但我怀疑你会做更多的编码,你打算做(你基本上需要在Python中实现USB音频类驱动程序的更好部分).

希望有所帮助!