如何编写符合虚拟 ALSA 标准的设备驱动程序?
How to write dummy ALSA compliant device driver?
我想编写虚拟的 ALSA 兼容驱动程序作为可加载的内核模块。当通过 aplay/arecord 通过 ALSA-lib 访问它时,比方说,它必须像普通的 7.1 声道音频设备一样至少提供所有基本控制——采样率、声道数、格式等……
在它下面,它只会从音频流中获取每个通道,并将其作为 UDP 数据包流通过网络发送。
它必须能够被多次加载,最终它会在 /dev 下公开尽可能多的音频设备。这样我们的系统中就会有多个虚拟声卡。
这样一个内核模块的最小结构应该是什么?
你能给我一个 100% ALSA 兼容的示例框架(至少是接口)吗?
ALSA 驱动示例太差了...
我想我刚刚找到了我需要的东西。
没有比内核树中 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/
- 安装
alsa-base
alsa-util
modprobe snd-dummy
- 使用
alsamixer
或使用mocp
(需要安装moc)配置添加虚拟音频成功
我想编写虚拟的 ALSA 兼容驱动程序作为可加载的内核模块。当通过 aplay/arecord 通过 ALSA-lib 访问它时,比方说,它必须像普通的 7.1 声道音频设备一样至少提供所有基本控制——采样率、声道数、格式等…… 在它下面,它只会从音频流中获取每个通道,并将其作为 UDP 数据包流通过网络发送。 它必须能够被多次加载,最终它会在 /dev 下公开尽可能多的音频设备。这样我们的系统中就会有多个虚拟声卡。
这样一个内核模块的最小结构应该是什么? 你能给我一个 100% ALSA 兼容的示例框架(至少是接口)吗? ALSA 驱动示例太差了...
我想我刚刚找到了我需要的东西。 没有比内核树中 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/
- 安装
alsa-base
alsa-util
modprobe snd-dummy
- 使用
alsamixer
或使用mocp
(需要安装moc)配置添加虚拟音频成功