如何使音量以较小的增量变化?


53

当我按键盘上的音量调高/调低键时,音量变化太大。如何减小步长,以便更好地控制?

Answers:


12

11.10 / 12.04

从此错误报告看来,音量步进键已在11.10中消失,并且尚未(尚未)重新出现。

因此,您无法进行简单而直接的配置更改来减少音量步长。

链接中的#18发布了一个有趣的解决方法,其中涉及使用alsamixer增量和减量功能以及将通知发送到桌面。

但是我无法使其正常工作-因此,我对解决方案的看法是基于该帖子的。

使用此解决方案,默认的音量步长将减少到百分之二。


如何

安装xbindkeys软件包(使用Synaptic或与sudo apt-get install xbindkeys)。

使用您喜欢的文本编辑器,在主文件夹中创建一个名为的文件,.volumeHack.sh然后将以下内容复制并粘贴到该文件中,即

gedit ~/.volumeHack.sh

运行chmod a+x .volumeHack.sh使其可执行。

然后编辑文件~/.xbindkeysrc,然后将以下文本复制并粘贴到该文件底部。即

gedit ~/.xbindkeysrc

注销和登录

.xbindkeysrc

# Increase volume
#"amixer set Master playback 1+"
"sh ~/.volumeHack.sh -c up -i 2% -m Master"
    m:0x0 + c:123
    XF86AudioRaiseVolume

# Decrease volume
"sh ~/.volumeHack.sh -c down -i 2% -m Master"
    m:0x0 + c:122
    XF86AudioLowerVolume

# Toggle mute - this is not used here
#"amixer set Master toggle"
# m:0x0 + c:121
# XF86AudioMute

.volumeHack.sh

#!/bin/sh

usage="usage: $0 -c {up|down|mute} [-i increment] [-m mixer]"
command=
increment=5%
mixer=Master

while getopts c:i:m:h o
do case "$o" in
    c) command=$OPTARG;;
    i) increment=$OPTARG;;
    m) mixer=$OPTARG;;
    h) echo "$usage"; exit 0;;
    ?) echo "$usage"; exit 0;;
esac
done

#echo "command:$command"
#echo "increment:$increment"
#echo "mixer:$mixer"

if [ "$command" = "" ]; then
    shift $(($OPTIND - 1))
    command=$1
    exit 0;
fi

if [ "$command" = "" ]; then
    echo "usage: $0 {up|down|mute} [increment]"
    exit 0;
fi

display_volume=0

if [ "$command" = "up" ]; then
    display_volume=$(amixer set $mixer $increment+ unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
fi

if [ "$command" = "down" ]; then
    display_volume=$(amixer set $mixer $increment- unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
fi

icon_name=""

if [ "$command" = "mute" ]; then
    if amixer get Master | grep "\[on\]"; then
        display_volume=0
        icon_name="notification-audio-volume-muted"
        amixer set $mixer mute
    else
        display_volume=$(amixer set $mixer unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
    fi
fi

if [ "$icon_name" = "" ]; then
    if [ "$display_volume" = "0" ]; then
        icon_name="notification-audio-volume-off"
    else
        if [ "$display_volume" -lt "33" ]; then
            icon_name="notification-audio-volume-low"
        else
            if [ "$display_volume" -lt "67" ]; then
                icon_name="notification-audio-volume-medium"
            else
                icon_name="notification-audio-volume-high"
            fi
        fi
    fi
fi
notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume

#echo "icon: $icon_name and $display_volume"

一旦我禁用了gnome的键盘快捷键来提高/降低音量,delty的答案就对我有用。来自xbindkeys的警告是我需要的线索:***警告***请确认没有其他正在运行的程序捕获xbindkeys捕获的键之一。似乎存在冲突,并且xbindkeys无法获取其配置文件中定义的所有键。

1
记录下来,罪魁祸首是Gnome开发人员不愿意提供实用的解决方案:bugzilla.gnome.org/show_bug.cgi?
id

17

Ubuntu 14.04 / 15.04 / 15.10 / 16.04 / 16.10 / 17.04

我终于为Trusty,Vivid,Wily,Xenial,Yakkety和Zesty用户提供了一个合适的解决方案。我决定不使用大量的技巧或脚本,而是决定在源代码中解决此问题。我将此修补程序应用于gnome-settings-daemon安装gnome-settings-daemonunity-settings-daemon安装unity-settings-daemon(对该修补程序进行了一些琐碎的修改)。

我已将软件包上传到PPA:

ppa:george-edison55 / gnome-settings-daemon启动板徽标单击此处获取有关使用PPA的说明。

一旦添加了PPA,请运行:

sudo apt-get update
sudo apt-get upgrade

安装完成后,您将需要重新启动。软件包升级后,可以使用以下dconf命令联机帮助页图标更改音量增量:

dconf write /org/gnome/settings-daemon/plugins/sound/volume-step 2

(默认值为6。)

现在,当您按下音量键时,音量将以2的增量变化:

在此处输入图片说明


3
这个PPA将来是否会与上游gnome / unity-settings-daemon保持同步?
starbeamrainbowlabs

1
@starbeamrainbowlabs是的,我希望能紧随其后。
内森·奥斯曼

1
谢谢!只是想检查一下。我将转为使用您的PPA,直到将其合并到主要PPA中为止(假设曾经发生过这种情况)。
starbeamrainbowlabs 2015年

1
@NathanOsman是否有机会也可以打补丁和打包mate-settings-daemon?我将永远感激不已:-)
亚历克斯·格林

3
@AlexGrin好消息-MATE已经支持此开箱即用的功能。您只需要使用其他命令来更改增量值:新值dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>在哪里<NUM>。我刚刚在MATE 16.04上进行了测试。
内森·奥斯曼

11

10.04 / 10.10 / 11.04

我刚刚发现它gconf-editor具有“音量步进占音量百分比”的设置:

/apps/gnome_settings_daemon/volume_step

更为优雅,它可与OSD音量通知一起使用。


10

这个简单的解决方案至少(适用于)12.04,并且不需要CCSM。

使用键盘快捷键时,您不会在屏幕上显示音量栏操作,但是可以根据需要进行细粒度的音量控制。

  1. 系统设置>键盘>“快捷方式”选项卡>“声音和媒体”类别

  2. 禁用现有的“调低音量”和“调高音量”快捷方式。为此,请在每次单击时将其选中,然后按Backspace键清除与之关联的所有键组合。

  3. 现在,选择“自定义快捷方式”类别,然后单击“ +”图标以创建两个新的快捷方式,如下所示:

    名称:Volume Up 
    命令:混音器设置Master 3%+
    名称:降低音量
    命令:混合器设置主3%-

    (使用百分比进行实验。如果您需要精打细算,请省略百分比符号,它将使用0-255的刻度而不是百分比)。

  4. 现在,将每个新的快捷方式分配给一个键或组合键:选择一个快捷方式,然后在键盘上键入所需的一个或多个键。

此后,使用键盘音量控件时,应具有指定的音量增量。您始终可以通过禁用自定义快捷方式并重新启用“声音和媒体”类别中的预制快捷方式来恢复原始行为。


昨天这在命令行和我的键映射中都有效,但是在重新启动后,无论在命令行还是键映射上都没有效果。
GlenPeterson

8

值得注意的是,在Ubuntu 17.10上,已经有(尽管有些复杂)这种支持。按Shift+ XF86AudioRaiseVolume(或XF86AudioLowerVolume)以较小的步长更改音量。

在此处输入图片说明


这在GNOME中是如此出色,我真的很想念肉桂。:((因为GNOME对我来说疯狂地泄漏内存,gnome-shell最多使用6 GiB RAM,所以不得不切换。)
Per Lundberg

@PerLundberg有趣。我还没有真正经历过内存泄漏带来的不利影响。
诺妮·穆斯

您多久重启一次?我将机器保持运行一周或更长时间,这是问题真正加剧的时候。
Per Lundberg '18

@PerLundberg,哈哈,每晚一次。现在
说得通

1
啊哈,我明白了。我在工作时运行Linux,因此除非有必要,否则我通常不会关闭计算机。晚上入睡,第二天早晨恢复。
Per Lundberg '18

5

您可以使用CompizConfig设置管理器执行此操作。sudo apt-get install compizconfig-settings-manager 如果尚未安装,请使用该命令 。

现在,打开CompizConfig设置管理器,然后转到“ 常规”部分中的“ 命令 ” 。选中右侧的“ 启用命令”复选框。在“ 命令”选项卡中,分别输入以下两个命令作为两个命令:

amixer set Master 5%+ -q

amixer set Master 5%- -q

在“ 键绑定”选项卡中为命令分配两个键盘快捷。我使用Super + [和Super +]组合。现在关闭CompizConfig设置管理器,这应该可以工作。

我不确定是否可以将命令分配给计算机的内置音量控制器。


1
搅拌机需要Compiz吗?
塔卡特2010年

您也可以使用“首选项”中的“键盘快捷键”来实现。无论如何,Compiz管理器中的一个提供了更多选项,包括分配点击事件等
thameera

2
amixer命令很棒,但是不需要指示读者安装CompizConfig设置管理器。
ændrük

2
起初,这对我有用,但是好的结果并不稳定。出于显而易见的原因,即使我的新设置仍在CCSM中设置和启用,我的12.04系统也无法恢复其原始行为,但音量增量太大。我也尝试删除并重新创建它们,但无济于事。我找到了另一种12.04友好的方式来执行此操作,并将其发布为另一个答案。
cdaddr 2012年

3

12.04(可能还有11.10)

如果要直接控制pulseaudio的音量而不是走ALSA路线,则可以使用以下脚本。虽然应该也可以通过Stackoverflow答案中详细介绍的DBUS控制音量,但是我找不到在Ubuntu 12.04中实现此功能的方法。

就像脚本本身所说的,它使用Stackoverflow的答案来说明如何在Ubuntu中以编程方式更改音量,并将其扩展为一个脚本,该脚本将音量更改作为命令行参数,并显示OSD通知。我尝试将其建模为与默认Ubuntu(12.04)行为尽可能接近。

该脚本将音量更改作为绝对或相对数值或百分比值。因此,例如:

  • pavol.sh 2000 将音量设置为2000,
  • pavol.sh 30% 将音量设置为30%
  • pavol.sh +1000 将音量增加1000并
  • pavol.sh -5% 将音量降低5%。

还对它进行了相当宽松的评论,希望它对进一步调整很有用。

如何

使用您喜欢的文本编辑器在您的主文件夹(或其他任何地方,只需记住路径)中创建一个文件,pavol.sh然后将下面的内容复制并粘贴到该文件中,即

gedit ~/pavol.sh

运行chmod a+x ~/pavol.sh使其可执行。

然后打开Sytem Settings,进入Keyboard设置并切换至Shortcuts标签。单击Custom Shortcuts并使用加号按钮创建两个新的键盘快捷键。

给每个人起一个名字,并在命令中输入以下内容:/home/username/pavol.sh "+3%"输入pavol.sh脚本的完整路径非常重要(除非脚本位于PATH环境变量中包含的文件夹中)。也请""在音量值附近使用引号,否则键盘快捷键将不起作用。

之后,单击每个条目的右侧以设置组合键或多媒体键。如果所需的组合或键已经分配给另一个快捷方式,程序将询问您是否要重新分配它。

pavol.sh

#!/bin/bash --

## This script expands upon this answer on stackoverflow:
## https://stackoverflow.com/a/10739764
##



## GLOBAL VARIABLES

# restrict usable commands
PATH="/bin:/usr/bin"

# this script changes the volume of the default sink (as set, for instance, via the Ubuntu sound menu);
# use "pactl info" to display these settings neatly in a terminal
DEFAULT_SINK=$(pacmd dump | grep 'set-default-sink' | cut -d ' ' -f 2)

# get max. volume from the DEFAULT_SINK
MAX_VOL=$(pacmd list-sinks | grep -A 20 "name: <${DEFAULT_SINK}>" | grep "volume steps:" | tr -d '[:space:]' | cut -d ':' -f 2)

# show debug messages?
# 0 means no debug messages; 1 prints the current volume to the console at the end of the script; 2 switches on bash debugging via "set -x"
DEBUG=0



## FUNCTIONS

# generate trace output if DEBUG is 2 or higher
if [ ${DEBUG} -gt 1 ]; then set -x; fi

# use poor man's return buffer via this variable (This is not stackable!)
RETVAL=""


# print simple usage text to console
show_usage() {
    echo "Usage: $(basename ${0}) [+|-][number|percentage]"
}


# return (via RETVAL) the current pulseaudio volume as hexadecimal value
get_cur_vol() {
    RETVAL=$(pacmd dump | grep "set-sink-volume ${DEFAULT_SINK}" | cut -d ' ' -f 3)
}


# change the pulseaudio volume as set in the first parameter variable, i.e. ${1};
# this can either be an absolute percentage or normal value, for instance 20% or 2000,
# or a relative percentage or normal value, for instance +3% or -5% or +200 or -1000
change_vol() {
    step=${1}

    relative=${step:0:1} # extract first character
    percent=${step: -1}  # extract last character

    # cut off first character for easier calculations, if it is either a "+" or "-"
    if [ "${relative}" = "+" -o "${relative}" = "-" ]; then step=${step:1}; fi

    # if the last character of ${step} was, in fact, a percent sign...
    if [ "${percent}" = "%" ]; then
        step=${step:0:-1}        # cut off last character for easier calculations
        step=$[step*MAX_VOL/100] # change percentage into fixed value via MAX_VOL
    fi

    # save current volume in ${old_vol}
    get_cur_vol
    old_vol=$[RETVAL+0] # the dummy calculation turns the hexadecimal number to a decimal one

    # calculate the new volume value ${new_vol} with the operand that was extracted earlier
    if [ "${relative}" = "+" ]; then
        new_vol=$[old_vol+step]
    else
        if [ "${relative}" = "-" ]; then
            new_vol=$[old_vol-step]
        else
            # no operand found, so ${step} must be an absolute value
            new_vol=${step}
        fi
    fi

    # check boundaries - don't go below 0 and above MAX_VOL
    if [ ${new_vol} -lt 0 ]; then new_vol=0; fi
    if [ ${new_vol} -gt ${MAX_VOL} ]; then new_vol=${MAX_VOL}; fi

    # set the new volume
    pactl -- set-sink-volume "${DEFAULT_SINK}" "${new_vol}"

    # mute the sink if the new volume drops to 0 ...
    if [ ${new_vol} -le 0 ]; then
        pactl -- set-sink-mute "${DEFAULT_SINK}" yes
    else
        # ... or unmute the sink if the new volume is greater than the old
        if [ ${new_vol} -gt ${old_vol} ]; then
            pactl -- set-sink-mute "${DEFAULT_SINK}" no
        fi
    fi
}


# show an OSD notification
notify_osd() {
    # get current volume
    get_cur_vol
    cur_vol_percent=$[RETVAL*100/MAX_VOL]

    # get mute state (gives "yes" or "no")
    muted=$(pacmd dump | grep "set-sink-mute ${DEFAULT_SINK}" | cut -d ' ' -f 3)

    # choose suitable icon (modeled after the default Ubuntu 12.04 behavior):
    # muted-icon if volume is muted
    if [ "${muted}" = "yes" ]; then
        icon="notification-audio-volume-muted"
    else
        # icon with loudspeaker and 1 of the 3 circle segments filled if volume is less than 34%
        if [ ${cur_vol_percent} -lt 34 ]; then
            icon="notification-audio-volume-low"
        else
            # icon with loudspeaker and 2 of the 3 circle segments filled if volume is between 34% and 66%
            if [ ${cur_vol_percent} -lt 67 ]; then
                icon="notification-audio-volume-medium"
            else
                # icon with loudspeaker and all 3 of the 3 circle segments filled if volume is higher than 66%
                icon="notification-audio-volume-high"
            fi
        fi
    fi

    # show notification
    notify-send "Volume" -i ${icon} -h int:value:${cur_vol_percent} -h string:synchronous:volume
}


# fake main function, that gets called first and kicks off all the other functions
main() {
    # only change volume if input is a number with either a +/- prefix and/or a % suffix
    if [[ "${1}" =~ ^[+-]?[0-9]+[%]?$ ]]; then
        change_vol ${1}
    else
        show_usage
    fi

    # show volume osd
    notify_osd

    # show the new - now current - volume in hexadecimal, decimal and percentage if DEBUG is greater than 0
    if [ ${DEBUG} -gt 0 ]; then
        get_cur_vol
        echo "${RETVAL} - $[RETVAL+0] - $[RETVAL*100/MAX_VOL]%"
    fi
}



## REAL MAIN

# run the fake main function and pass on all command line arguments; then exit the script
main ${@}
exit 0

除使用gnome-shell时累积OSD通知发送外,此方法运行良好。每台印刷机都会添加一个新的OSD,而先前的OSD不会消失。OSD很好,但对我来说不是必需的。我尝试注释掉show OSD通知,但这对我来说破坏了脚本。
Kendor 2012年

抱歉@kendor,它不适用于您。我只用Unity进行过测试。您是否已在以下错误报告中的注释中尝试过工作方式:https : //bugzilla.redhat.com/show_bug.cgi ? id =693207#c3?只需使用notify-send命令在该行--hint=int:transient:1之前添加"Volume"(应该是行号130)。也许有帮助。
Kuro

2

库本图17.04

编辑main.xml通常在以下位置找到的文件: /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/config/main.xml作为根用户。

查找volumeStep条目:

<entry name="volumeStep" type="Int">
  <default>2</default>
</entry>

并将每步百分比更改为任意值。如您所见,我使用2%。

如Kubuntu 16.04所述,您需要重新启动Plasma才能使其生效:

killall plasmashell #to stop it
kstart plasmashell #to restart it

0

库本图16.04

我从14.04升级,该版本具有主音量级别以及各个输入源和输出源,并具有3%的增减步长(后来更改为5%)。通过简单地调整输出源的音量水平以补偿主音量步长,我设法将其保持在2%和3%左右。

很自然地,当16.04将音量提高到6%并移除了主音量控件时,我有点恼火,取而代之的是用音量按钮控制两个输出源。

上面针对Ubuntu 16.04的修复不适用于KDE5上使用的Plasma 5接口,因此不适用于Kubuntu 16.04-我试过了,但是不起作用。

因此,我在线进行了快速检查,该过程需要手动更改文件,但这非常简单。

编辑ListItemBase.qml通常以/usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/ui/ListItemBase.qml根用户身份找到的文件。

函数中有几行increaseVolumedecreaseVolume它们通过将最大音量除以15来定义步骤。它们看起来像:

var step = slider.maximumValue / 15;

数字越高,步骤越小。如果为1,则音量为0%或100%,但如果为100,则音量将以1%的步长递增。

就个人而言,我的目标是2%,所以我将这两行改为

var step = slider.maximumValue / 50;

归功于此Reddit:https//www.reddit.com/r/kde/comments/3t1xr0/how_to_change_the_volume_increment_step_size_for/

但是,您需要重新启动Plasma才能生效:

killall plasmashell #to stop it
kstart plasmashell #to restart it

希望这可以帮助某人,或者甚至导致某人提交等离子更改以使该配置受驱动……在再次更新后,两者最终都可能成为我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.