代码之家  ›  专栏  ›  技术社区  ›  SpectralWave

如何从用户空间向alsa注册虚拟卡?

  •  2
  • SpectralWave  · 技术社区  · 13 年前

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

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

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

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

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

    2 回复  |  直到 13 年前
        1
  •  5
  •   Jan Hudec    13 年前

    我认为您应该停止为覆盖任何特定文件而烦恼(即。 停止 使用umview,这是不需要的),并简单地使用 "file" plugin 要在中创建设备 ALSA config 那会的 通过中的命名管道将数据传输到虚拟设备 /var/run/virtualsound/output 或者类似的地方。

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

        2
  •  0
  •   Vijeth PO SpectralWave    6 年前

    我以前已经解决过这个问题,

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

    ioctl(SNDRV_CTL_IOCTL_CARD_INFO, ...);     
    

    以便使用已安装的声卡建立列表

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

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

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