Linux 在ALSA中设置通道音量

Linux 在ALSA中设置通道音量,linux,audio,alsa,pcm,Linux,Audio,Alsa,Pcm,我的应用程序使用ALSA通过各种通道播放原始PCM音频数据。我正在使用snd_pcm_open()分配一个新的音频通道,然后通过snd_pcm_hw_params_xxx()调用设置pcm格式,最后使用snd_pcm_writei()API将原始pcm音频数据提供给ALSA 到目前为止,这一切都很好,但我还没有找到任何方法告诉ALSA减少按上述方式分配的声道音量。当然,在通过snd_PCM_writei()将PCM数据发送给ALSA之前,我可以手动对PCM数据应用音量缩放,但ALSA真的没有办法

我的应用程序使用ALSA通过各种通道播放原始PCM音频数据。我正在使用snd_pcm_open()分配一个新的音频通道,然后通过snd_pcm_hw_params_xxx()调用设置pcm格式,最后使用snd_pcm_writei()API将原始pcm音频数据提供给ALSA


到目前为止,这一切都很好,但我还没有找到任何方法告诉ALSA减少按上述方式分配的声道音量。当然,在通过snd_PCM_writei()将PCM数据发送给ALSA之前,我可以手动对PCM数据应用音量缩放,但ALSA真的没有办法自己完成这项工作吗

ALSA没有这样的功能


您必须自己进行缩放,或者使用PulseAudio这样的声音服务器。

您可以通过amixer:

amixer cset name='Headphone Playback Volume' 98%,100%
要获取名称值,请选中alsamixer,并在每个名称后面添加“播放音量”

并通过alsamixer:

amixer cset name='Headphone Playback Volume' 98%,100%
键盘z为左声道

q是左增

c是右减


e是正确的

我希望通过编程而不是通过外部程序来实现。Amixer不是一个真正的外部程序。它是ALSA附带的标准实用程序。您可以从任何其他程序调用它。我经常使用Linux音频,这是我通常使用的。到目前为止,这是设置每个通道音量的最简单方法,我发现它是可靠的。