linux - 如何编写符合 ALSA 的虚拟设备驱动程序?

标签 linux audio linux-kernel linux-device-driver alsa

我想将虚拟 ALSA 兼容驱动程序编写为可加载的内核模块。当通过 ALSA-lib 通过 aplay/arecord 访问它时,假设它必须像普通的 7.1 声道音频设备一样至少提供所有基本控制 - 采样率、声道数、格式等......
在下面,它将只从音频流中获取每个 channel ,并将其作为 UDP 数据包流通过网络发送。
它必须能够被多次加载,最终它会在/dev 下暴露尽可能多的音频设备。这样,我们将在系统中拥有多个虚拟声卡。

这种内核模块的最小结构应该是什么?
你能给我一个 100% 符合 ALSA 的示例框架(至少是接口(interface))吗?
ALSA 驱动程序示例太差了……

最佳答案

我想我刚刚找到了我需要的东西。
没有比内核树中 sound/drivers 目录下的“dummy”和“aloop”模板更好的 ALSA 接口(interface)示例了:
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/

关于linux - 如何编写符合 ALSA 的虚拟设备驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178824/

相关文章:

linux - 使用 nohup 调用函数

linux - 如何在 linux 中将多个文件合并到一个目录中,以便每个文件数据都放在一个新列中?

linux - 在linux中读取expect文件中的输出

c++ - SDL2 窗口在 raspbian 上不显示

linux - 如何删除名称无效的文件(Ubuntu)?

windows-phone-7 - 获取Windows Phone中麦克风的幅度

sockets - 我可以在内核空间中拥有超过 32 个 netlink 套接字吗?

linux - 在 Linux 中热插拔时检测设备的存在

C++ 声音创建/操作库?

iphone - iPhone,JQTouch和HTML5音频标签