在嵌入式环境中,我有两个硬件声音输入设备。 我想将它们组合到一个ALSA界面中。此外,我希望能够同时从多个应用程序访问该界面。到目前为止,这是我的目的:>
pcm.multi {
type multi
slaves {
a {
pcm "hw:0,0"
channels 2
}
b {
pcm "hw:0,1"
channels 2
}
}
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}
这可以将两个设备组合成一个界面,但是该界面只能一次被单个应用程序使用。
pcm.snoop_a {
type dsnoop
ipc_key 1024
slave {
pcm "hw:0,0"
channels 2
}
}
pcm.snoop_b {
type dsnoop
ipc_key 2048
slave {
pcm "hw:0,1"
channels 2
}
}
这允许多个应用程序同时访问每个界面,但是它不会将两个硬件资源合并到一个界面中。
我试图结合两种解决方案,我写道:
pcm.multi_snoop {
type multi
slaves {
a {
pcm "snoop_a"
channels 2
}
b {
pcm "snoop_b"
channels 2
}
}
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}
这不起作用::尝试访问multi_snoop
界面失败:
# arecord -D plug:multi_snoop /dev/null
Recording WAVE '/dev/null' : Unsigned 8 bit, Rate 8000 Hz, Mono
ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable
arecord: set_params:1310: Broken configuration for this PCM: no configurations available
但是请注意,每个dsnoop
设备都可以在multi
设备内部使用。这有效:
pcm.multi_snoop {
type multi
slaves {
a {
pcm "snoop_a"
channels 2
}
}
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
}
与snoop_b
相同。
只有当我尝试将两个dsnoop
设备放入相同的multi
定义中时,它才会失败。
版本信息:
# ls /usr/lib/libasound.so*
/usr/lib/libasound.so /usr/lib/libasound.so.2.0.0
/usr/lib/libasound.so.2
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version k4.9.113.