调整pulseaudio中的最大可能音量

有时我的Ubuntu_12.04系统上的某些声音/电影/音乐本身的音量非常低。 从此以后我增加了声音输出的音量。 我可以使用以下设置(见截图) 在此处输入图像描述

因此,似乎pulseaudio能够通过仅使用机器的“增加音量”按钮来增加音量,使其超出可能出现的最大值。 我的问题是我如何调整Pulseaudio以允许更大的范围或更高的最大音量增加???

特别是对于一些体积非常小的音频材料而言,将能够迅速将输出音量(通电)增加到比其他已经相当大的材料所需的更高设置是很好的。

我们可以通过将音量控制滑动到100%以上来获得最大可能音量。 比正常峰值限制高出153%。 如果我们使用alsamixer将ALSA音量设置为100,则这些100%是音频将被削减或失真的级别。 使用滑块放大至153%时也会发生这种情况。

然而,可以通过使用终端中的follwing命令设置接收器级别来进一步提高此级别:

pacmd set-sink-volume   

替换为您的接收器名称或接收器索引,如下所示:

 pacmd list-sinks 

下限显然是0 ,线性体积100%是65536的值,任何更高的值都将被进一步放大。 因此,512000的值将导致781%的过度简化。

这是一种非常粗略的方法来放大不同级别的声音输出,因为过度简化不仅会导致削波和丑陋的失真,还可能会损坏您的扬声器。

因此,这是规范化音频输出的更好方法。 有关如何使用pulseaudio执行此操作,请参阅以下问题:

  • 根据内容自动调整音量?

我试过这个命令:

 pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo 150% 

这非常有帮助。 可以将150%更改为任何值。

video演示


我用

 pactl set-sink-volume 0 100% 

其中0是来自pacmd list-sinks器编号, 100%是默认的unboosted卷。 您可以输入高于100%的值以获得音频提升(例如200% )。

这是一个小脚本,可以为您进行计算和设置音量(只需将音量作为参数传递)。 例如: vol 105将音量设置为105%。

  • 创建文件

     $> file=/usr/bin/vol;sudo touch $file && \ sudo chmod u+x $file && sudo chown $USER:$USER $file && \ gedit $file 
  • 复制和粘贴:

     #!/bin/bash SetPacmdSinkVol() { #default index of 0 - can be changed local mySinkIndex=0 #if you want to ignore pacmd output local ignoreOutput=true local num=$1 local vol=$((num * 655)); vol=$((num * 36 / 100 + vol)); echo -e "\033[0;32mVol - ${num}:${vol}\033[0;m" if $ignoreOutput; then pacmd set-sink-volume $mySinkIndex $vol > /dev/null else pacmd set-sink-volume $mySinkIndex $vol fi } SetPacmdSinkVol $@ 

我将以下行插入shell脚本并将其设置为在启动时运行,因为我父亲的笔记本电脑(12.04 32位)未保存最大音量设置。

 pacmd set-sink-volume 0 99999 

如果只有一个声卡,它可能是索引0,那么你不需要输入全名。 我在上面看到该值基于65536为100%。 当我使用99999时,我在黑暗中拍摄。 153%实际上是100270,实现与使用gui相同的结果。

 #!/bin/bash FILE=/tmp/currentVolume interval=15 minVolume=10 maxVolume=140 if [ -f "$FILE" ]; then CurrentVolume=$(cat $FILE ) else CurrentVolume=50 fi if [ $CurrentVolume -lt 60 ]; then interval=3 elif [ $CurrentVolume -lt 80 ]; then interval=5 elif [ $CurrentVolume -lt 110 ]; then interval=10 else interval=15 fi if [ "$1" == "UP" ] then CurrentVolume=$(echo "$CurrentVolume + $interval" | bc) if (( $(echo "$maxVolume < $CurrentVolume" | bc -l) )) then CurrentVolume=$maxVolume fi else CurrentVolume=$(echo "$CurrentVolume - $interval" | bc) if (( $(echo "$minVolume > $CurrentVolume" | bc -l) )) then CurrentVolume=$minVolume fi fi echo "CurrentVolume:" $CurrentVolume >> /tmp/currentVolume.log echo $CurrentVolume > $FILE for i in {1..20} do pactl -- set-sink-volume $i $(echo $CurrentVolume)% done