如何仅在 ALSA 混音器中设置一种特定声源的输出音量?

如何仅在 ALSA 混音器中设置一种特定声源的输出音量?

我有一个声音解决方案,它可以通过 ALSA 播放不同来源(MP3、CD、语音合成器)的声音。为了允许多个源(其中只有一个同时播放声音),我将其配置dmix为默认的 ALSA 声音设备,该设备又与该plughw设备(JustBoom HAT 声卡)进行通信。这个配置工作得很好,但我还没有找到一种方法来设置 CD 播放器声源的音量,它直接寻址 ALSA(不通过库)并使用snd_pcm_writei ().由于混合器,我还通过使用打开混合器snd_mixer_open (),然后地址是通过使用snd_mixer_elem_t对象。我是不是使用 PulseAudio 或 Jack 服务器。

我现在的问题是:如何设置该特定声源(CD)的输出音量,而不影响所有其他声源?我发现这snd_mixer_selem_set_playback_volume_all ()会改变混音器中所有声源(还有 MP3 和语音,不仅是 CD)的音量,但我想将 CD 和 MP3 静音,但将语音设置为最大音量用于公告。

答案1

默认情况下,在音量到达插件之前无法影响音量dmixsoftvol在一个设备之上创建单独的设备dmix

pcm.somedevice {
    type plug
    slave.pcm {
        type softvol
        slave.pcm "plug:dmix"
        control {
            name "Some Playback Volume"
            card 0                        # must be same card number
        }
    }
}

相关内容