如何编写虚拟的 ALSA 兼容设备驱动程序?

4
我希望能够编写一个虚拟的ALSA兼容驱动程序,作为可加载的内核模块。当通过ALSA-lib使用aplay/arecord访问它时,它必须表现为正常的7.1声道音频设备,至少提供所有基本控制功能 - 采样率、通道数、格式等等...在底层,它将从音频流中获取每个通道,并将其作为UDP数据包流发送到网络上。它必须能够多次加载,并最终在/dev下公开尽可能多的音频设备。这样,我们就可以在系统中拥有多个虚拟声卡。
这样的内核模块的最小结构应该是什么?你能给我一个示例框架(至少是接口),使其100%符合ALSA标准吗?ALSA驱动程序示例都很差劲...

1
你可能不需要创建一个内核模块。你想要的是编写一个alsa插件,它将创建一个alsa设备并将任何通道放在网络上。你可以看看pulseaudio正在做什么,或者简单地配置pulseaudio以完全满足你的需求。 - Alexandre Belloni
我明白了。但是我真的希望将它放在内核空间中,以便可以用于其他任何事情。我计划还要通过这个驱动程序控制LED灯。 - valioiv
这也是您可以从用户空间执行的操作。 - Alexandre Belloni
实际上,LED是用于作为备用通信渠道传输音频的激光器。因此,存在时间限制,不适合用户空间使用... - valioiv
2个回答

4

我想我刚找到了我需要的东西。 在内核树下的sound/drivers目录中,“dummy”和“aloop”模板是最好的ALSA接口示例:

https://alsa-project.org/main/index.php/Matrix:Module-dummy

https://www.alsa-project.org/main/index.php/Matrix:Module-aloop

我需要实现网络部分。
编辑: 又添加了一个非常简单但基本的虚拟ALSA驱动程序项目:

https://alsa-project.org/main/index.php/Minivosc

编辑 2020_09_25: 另一个很棒的ALSA示例:

https://www.openpixelsystems.org/posts/2020-06-27-alsa-driver/


2
  • 安装 alsa-basealsa-util
  • modprobe snd-dummy
  • 使用 alsamixer 或者使用 mocp(需要安装 moc)来配置并成功添加虚拟音频设备

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接