我有一个声音解决方案,它可以通过 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
默认情况下,在音量到达插件之前无法影响音量dmix
。softvol
在一个设备之上创建单独的设备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
}
}
}