如何使用 PulseAudio/ALSA 将物理输入设备拆分为多个虚拟输入设备?

如何使用 PulseAudio/ALSA 将物理输入设备拆分为多个虚拟输入设备?

所以我有每个音频接口有 18 个输入通道。来自这些设备的数据通过使用名为 PortAudio 的库的 C++ 程序提供。问题是,当我开始让每个设备的通道数超过 13 个时,它开始出现paInputOverflow问题,因为它无法处理似乎使用单个recordCallback函数的负载。 (甚至尝试使用空回调函数,但仍然遇到paInputOverflow问题,因此与代码无关)

首先,我认为可以有一种方法来选择要使用的通道,允许我拆分它们并让不同的回调处理不同的通道,但这看起来只有 MacCore 和 ASIO 支持,而我使用的是 ALSA。

其次,我的想法是将输入通道分成两个设备,基本上为前 9 个通道使用一个虚拟设备,为其他 9 个通道使用第二个虚拟设备。

我尝试使用pactl load-module module-remap-source,虽然它确实创建了一个重新映射,但它没有将其检测为 PortAudio 中的单独输入“设备”。还尝试编辑/etc/asound.conf并尝试以这种方式分割它们:

使用类似这样的东西:

pcm_slave.firstdevice {
    pcm "hw:5,0"
    channel 18
}

pcm.firsthalf {
    type plug
    slave.pcm {
         type dsnoop
         ipc_key 12345
         slave firstdevice
         bindings [ 0 1 2 3 4 5 6 7 8 ]
    }
}

pcm.secondhalf {
    type plug
    slave.pcm {
         type dsnoop
         ipc_key 12345
         slave firstdevice
         bindings [ 9 10 11 12 13 14 15 16 17 ]
    }
}

不幸的是,这根本不起作用。我怀疑我可能做错了什么。但此时我已经没有主意了。任何帮助将不胜感激。

PS.:我使用的具体发行版是 Ubuntu 18.04。

答案1

不要"hw:5,0"尝试通过别名来引用该卡,例如"hw:M-Audio18".您可以使用以下命令获取别名 aplay -l

相关内容