改变音量时保持自定义的左/右音频平衡(即比例)

改变音量时保持自定义的左/右音频平衡(即比例)

我的耳机已经老了,其中一个(左耳机)现在播放的声音比另一个小得多。所以我调整了左右平衡,正如这里建议的那样,(在我的情况下)左侧为 80%,右侧为 20%。但是,锁定此平衡并不能像我期望的那样在之后更改音量时执行此操作:也就是说,通过 GUI 或通过例如将音量增加 5%pavucontrol会将pactl -- set-sink-volume @DEFAULT_SINK@ +5%左右两侧的音量增加 5 个百分点,即之后左右音量将分别为 85% 和 25%。换句话说,比例80%/20% = 4没有得到保留,音频听起来会再次不平衡。

我如何才能改变这种情况并始终保持比例4? PulseAudio 深处是否有相应的设置,或者更好的是,是否有一种编程方式(shell 脚本)来实现这一点?(我还没能弄清楚如何单独检索(更不用说调整)左/右音量级别。)

[编辑]:至于环境左右声道的音量级别不同,我刚刚注意到允许pactl传递多个(空格分隔)音量级别,每个声道一个。现在,我只需要知道如何检索每个声道的当前音量级别。据我所知,pamixer --get-volume不允许这样做(pamixer 是此工具)。

[编辑 2]:结果确实pacmd list-sinks列出了所有频道的音量,但就像 PulseAudio 的典型做法一样,这种方式不太容易解析。有没有基于可靠 CLI 的更简单(面向未来)的解决方案?

答案1

dB您可以按比例增加或减少音量,例如:

pactl -- set-sink-volume @DEFAULT_SINK@ +5dB

据我所知

$ pactl list sinks | grep balance
        balance -0.50

当音量改变时,余额将保持不变dB

以下是相关部分man pactl

  set-sink-volume SINK VOLUME [VOLUME ...]
          Set  the volume of the specified sink (identified by its symbolic name or numerical
          index). VOLUME can be specified as an integer (e.g. 2000, 16384), a  linear  factor
          (e.g.  0.4,  1.100),  a  percentage  (e.g. 10%, 100%) or a decibel value (e.g. 0dB,
          20dB).

相关内容