使用multi插件组合多个dsnoop设备

时间:2019-01-25 14:49:58

标签: alsa

在嵌入式环境中,我有两个硬件声音输入设备。 我想将它们组合到一个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.

0 个答案:

没有答案