使用多设备同时将 ALSA 输出到两个 dmix 设备

使用多设备同时将 ALSA 输出到两个 dmix 设备

我正在尝试使用两个 dmix 设备同时向两个硬件设备megalodon和播放音频analogmegalodon是 USB 耳机,analog只是我电脑上的 3.5 毫米端口。当我将音频路由到megalodoncalled的 dmixheadsetout并将其直接路由到 时analog,它工作正常。但是,如果我将其路由到headsetoutanalogout( 的 dmix analog),我会收到错误ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable。如果我只输出到analogout,无论是直接播放它还是创建仅输出到它的多输出设备都analogout可以正常工作。

我怎样才能使两者输出headsetoutanalogout正常工作?

以下是我的 asound.conf 的相关部分,以便于理解发生了什么。此外,我尝试过将 dmix 设备包装在设备中,plug就像它们在下面的配置中一样,以及直接使用它们,但都无济于事。

pcm.megalodon {
    type hw
    card "Megalodon"
}

pcm.analog {
    type hw
    card "PCH"
    device 0
}

#Play to headphones and earbuds
pcm.splitout {
    type plug
    slave.pcm {
        type multi
        slaves {
            a { channels 2 pcm "headsetout" }
            b { channels 2 pcm "analog" }
        }
        bindings {
            0 { slave a channel 0 }
            1 { slave a channel 1 }
            2 { slave b channel 0 }
            3 { slave b channel 1 }
        }

    }
    ttable [
        [ 1 0 1 0 ]
        [ 0 1 0 1 ]
    ]
}

#Theoretically play to headphones and earbuds
#this one doesn't work
#error:
#ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable
#aplay: set_params:1204: Broken configuration for this PCM: no configurations available
#
#However, analogout works when used on it's own
pcm.splitout1 {
    type plug
    slave.pcm {
        type multi
        slaves {
            a { channels 2 pcm "headsetout" }
            b { channels 2 pcm "analogout" }
        }
        bindings {
            0 { slave a channel 0 }
            1 { slave a channel 1 }
            2 { slave b channel 0 }
            3 { slave b channel 1 }
        }

    }
    ttable [
        [ 1 0 1 0 ]
        [ 0 1 0 1 ]
    ]
}

#dmix output for headphones
pcm.headsetout {
    type plug
    slave.pcm {
        type dmix
        ipc_key 192959
        ipc_key_add_uid true
        ipc_perm 0666
        slave {
            pcm "megalodon"
            rate 48000
            channels 6

            period_time 0
            period_size 1024
            buffer_time 0
            buffer_size 16384
        }
    }
}

#dmix output for analog jack (3.5mm)
pcm.analogout {
    type plug
    slave.pcm {
        type dmix
        ipc_key 3785682
        ipc_key_add_uid true
        ipc_perm 0666
        slave {
            pcm "analog"
            rate 48000
            channels 2

            period_time 0
            period_size 1024
            buffer_time 0
            buffer_size 16384
        }
    }
}

答案1

我决定尝试使用不同的插件来解决这个问题,最后我能够用 upmix 来解决这个问题。我以为这样type plug就可以解决这个问题,但事实并非如此。

前:

#dmix output for headphones
pcm.headsetout {
    type plug
    slave.pcm {
        type dmix
        ipc_key 192959
        ipc_key_add_uid true
        ipc_perm 0666
        slave {
            pcm "megalodon"
            rate 48000
            channels 6

            period_time 0
            period_size 1024
            buffer_time 0
            buffer_size 16384
        }
    }
}

后:

#dmix output for headphones
pcm.headsetout {
    type upmix
    slave.pcm {
        type plug
        slave.pcm {
            type dmix
            ipc_key 192959
            ipc_key_add_uid true
            ipc_perm 0666
            slave {
                pcm "megalodon"
                rate 48000
                channels 6

                period_time 0
                period_size 1024
                buffer_time 0
                buffer_size 16384
            }
        }
    }
}

相关内容