python - 我的系统需要超过 32 个 USB 声卡

标签 python linux alsa udev soundcard

<分区>

我正在从事一个教育性多座位项目,我们需要将 36 个键盘和 36 个 USB 声卡连接到一台计算机。我们正在运行带有 3.6.3-030603 通用内核的 Ubuntu Linux 12.04。

到目前为止,我们已经成功地从 36 个键盘获得了输入,并识别了 36 个声卡而没有出现内核 panic (发生在更新内核之前)。我们知道 36 声卡已被识别,因为 $ lsusb | grep "Audio"-c 输出 36

但是,$ aplay -l 总共列出了 32 个播放设备(包括“内部”声卡)。此外,$ alsamixer -c 32 表示“无效的卡片索引:32”(仅适用于 0 到 31;总共 32)。

所以我的问题是,如果这些命令甚至没有列出其他声卡,我该如何访问它们?我正在用 python 编写一个应用程序,有一些库可供选择,但恐怕它们也会因此而被限制为总共 32 个设备。任何指导都会很有用。

谢谢。

最佳答案

您提出的问题基本上是:ALSA 控制的系统中可以有超过 32 个声卡吗?很明显,虽然您的 USB Controller 知道您连接的所有声卡,但 ALSA 系统却不知道。

让我们进入内核源代码来检查这里发生了什么。在 /sound/core/sound.c 中,您将找到有关最大声卡问题的更多信息:

  39 static int cards_limit = 1;
  40 
  41 MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
  42 MODULE_DESCRIPTION("Advanced Linux Sound Architecture driver for soundcards.");
  43 MODULE_LICENSE("GPL");
  44 module_param(major, int, 0444);
  45 MODULE_PARM_DESC(major, "Major # for sound driver.");
  46 module_param(cards_limit, int, 0444);
  47 MODULE_PARM_DESC(cards_limit, "Count of auto-loadable soundcards.");
  48 MODULE_ALIAS_CHARDEV_MAJOR(CONFIG_SND_MAJOR);
  49 
  50 /* this one holds the actual max. card number currently available.
  51  * as default, it's identical with cards_limit option.  when more
  52  * modules are loaded manually, this limit number increases, too.
  53  */
  54 int snd_ecards_limit;
  55 EXPORT_SYMBOL(snd_ecards_limit);

从代码及其注释中我读到两件事:

  1. 变量 cards_limit 是一个模块参数。我假设在您的安装中此参数设置为 32。如果内核中内置了 ALSA 支持,您可以在更改此选项的地方构建自定义内核。如果 ALSA 支持不是内置的,而是作为模块加载的,则可以在模块加载期间设置此参数。为此,您可以更改系统配置 (man modprobe.d) 或卸载模块,然后使用选项 (man modprobe) 重新加载它。

    <
  2. 限制被描述为仅限制自动加载声卡的数量。要克服此限制,手动加载负责声卡的模块可能就足够了。内核中没有为手动添加的声卡设置限制。

来源:Kernel 2.8 Git

关于python - 我的系统需要超过 32 个 USB 声卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201551/

相关文章:

Javascript 在 Flask jinja2 模板中无法正确渲染

python - 有没有办法在opencv python中获得两个独立轮廓的边界矩形的4个坐标点?

python - 我的 while 循环有问题,不太清楚为什么

linux - 如何调试 Linux I2S 音频输入问题

python - 如何使这个函数能够使用 numpy 数组作为参数并在 python 中返回一个数组?

java - 带有 sudo 的 Raspberry Pi NetBeans 运行 jar

linux - Unix 中的包装函数参数是否有任何限制?

c - 在 C(不是 C++)中使用 fork() 从 1 个父项中生成 3 个子项

c++ - 嵌入式系统上的 ALSA - readi - 输入/输出错误和卡住

linux - ALSA 的 snd_pcm_delay() 究竟返回什么?