2

我正在从用户空间开发一个虚拟设备

(使用 umview http://wiki.virtualsquare.org/wiki/index.php/UMview)所以,我需要将我的设备注册到系统的声卡列表

(我从未在内核模块中使用过 alsa,所以我认为我需要调用 snd_card_register() 函数)

但我找不到从用户空间做到这一点的方法......

也许我可以写一个系统调用来做到这一点?

4

2 回答 2

5

我认为您应该停止为覆盖任何特定文件而烦恼(即停止使用 umview,它不是必需的),只需使用“文件”插件ALSA 配置中创建设备,该设备将通过命名管道将数据传输到您的虚拟设备/var/run/virtualsound/output或类似的地方。

与 umview 方法不同,这将适用于所有应用程序,而无需以任何特殊方式运行它们。

于 2013-03-01T06:52:59.623 回答
0

前段时间解决了这个问题

Alsa 用户空间库只需打开从 0 到 32 的每个 /dev/snd/controlC# 并启动

ioctl(SNDRV_CTL_IOCTL_CARD_INFO, ...);     

为了用已安装的声卡建立一个列表

如果我们在 /dev/snd/control# 上挂载 UmView 模块并劫持 ioctl 并对其进行响应,我们的模块将被 ALSA 识别为声卡

我用这种技术创建了一个虚拟声音设备,你可以在 https://github.com/berdav/umdevaudio找到它

这是构建简单用户空间驱动程序的简单方法。

于 2014-01-08T13:12:53.713 回答