Python 从20+;麦克风

Python 从20+;麦克风,python,audio,usb,microphone,libusb,Python,Audio,Usb,Microphone,Libusb,我被要求(如果可能的话)编写一个程序,在一台计算机上监控至少20个麦克风的输入 目前,我正在使用python(2.6)在一个使用Alsa的Ubuntu系统上进行原型制作。到目前为止,我的尝试产生了很多问题 Ubuntu是必需的,Alsa不是,python是理想的 对于硬件,一个建议是多个声卡。另一个是一系列usb集线器和麦克风适配器(如)(在这种情况下,设备将完全相同并位于同一usb总线上) 问题: 如何从一张声卡同时录制多个麦克风?(例如,使用线路输入和麦克风,任何知道如何使用两个以上输入的人

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

目前,我正在使用python(2.6)在一个使用Alsa的Ubuntu系统上进行原型制作。到目前为止,我的尝试产生了很多问题

Ubuntu是必需的,Alsa不是,python是理想的

对于硬件,一个建议是多个声卡。另一个是一系列usb集线器和麦克风适配器(如)(在这种情况下,设备将完全相同并位于同一usb总线上)

问题:

如何从一张声卡同时录制多个麦克风?(例如,使用线路输入和麦克风,任何知道如何使用两个以上输入的人都可以获得奖励!)

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

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

最后,如果使用原始访问,我如何最好地获取数据(目前没有使用pyUSB的经验)以及需要从原始->音频进行什么转换(如果有)

编辑:

通过monitor,我被要求将输入记录到磁盘(理想情况下高于设置的阈值,speex编解码器看起来非常适合),监控音量水平,提供图形反馈,并设置至少一个在所有活动话筒中循环的输出


Python并不是一个长期的需求,它只是迄今为止我发现的从声卡获取PCM数据的最简单的方法(但仅限于麦克风)

我打算让声卡的轮询和数据处理在不同的线程中进行,这是一个我没有太多经验的领域

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

这里“监视器”的定义是一个很大的变量。Monitor可能意味着“记录到磁盘”、“检测高于特定阈值的卷级别”或“在频域中执行更高级别的分析(即传统的信号处理)。”这三种方法对CPU使用和Python的可行性有非常不同的影响。Python可能不是最合适的,这取决于您想要做什么

如果使用Python,我将注意以下几点:

  • Python的音频支持非常弱
  • python ALSA绑定(pyalsa)用于序列器、混频器和硬件控制,而不是读取PCM样本(尽管绑定可能有助于管理设备)
  • Python在某些多线程条件下存在问题(参见GIL——全局解释器锁),通过使用单独的Python进程可以完全避免这些问题,但这也不是所有情况下都需要的(我假设您运行的是多核/处理器系统,希望通过CPU分配监控20个音频输入的负载)
  • CPU和内存密集型操作(如音频分析中所期望的)并不是Python的强项。尽管如此,PCM数据可以通过struct.unpack()解包,信号分析可以通过NumPy和SciPy中的例程完成
每个线路输入和麦克风应该是立体的,有效地提供两个麦克风输入,即每个声卡四个麦克风。假设只有20个输入,这意味着五个USB音频适配器。顺便说一句,要使用线路输入,你需要某种麦克风前置放大器,这可能比你想要的更贵。在这种情况下,20英寸需要10个USB音频适配器把

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

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

关于USB声卡的逻辑到物理映射,一组udev规则将允许您基于USB继承权或序列号(如果设备有序列号)提供有用且一致的设备命名方案或者其他属性。在任何情况下,您都应该能够使用udev规则通过音频设备的标识或物理位置(如您选择)来稳定音频设备的映射

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


希望这能有所帮助!

如果您不介意延迟的话,USB音频是可以的,但我严重怀疑它能否在20个频道上工作,尤其是在20台设备上


获得几个大的Firewire接口(8通道+),可能来自Presonus。找到Linux声音系统支持的东西,你不想自己处理任何总线。如果可以,使用DAW应用程序获取音频。如果需要处理,编写插件可能比从头开始容易。我不知道有什么好的库可以用Python进行多轨录制。

我建议您首先需要一些硬件,如数字混音台,它将支持所有这些输入。我真的怀疑您是否能够轻松地让多个麦克风工作。在您开始编写任何代码来记录所有这些输入之前,检查PC是否/如何处理这种情况是合乎逻辑的第一步

我也不愿意在这里推荐Python