0

我正在使用此脚本通过 keybindigs 更改 pulseaudio 的音量,但它有一个0%限制100%

由于pulseaudio允许音量增加100%(我的笔记本电脑上的音量仍然很低),我想调整它以允许140%150%最大音量。

请注意,仅通过注释行105 ~ 111脚本就可以工作,但没有限制值(什么会破坏我的扬声器)。我真正想要的是设置一个可配置的限制100%

实际上,这更像是一个bash问题而不是一个问题pulseaudio

完整脚本的要点

4

2 回答 2

0

只需将 MAXVOL 增加到 100000(其原始值的 150%,65537)。

于 2014-03-01T15:51:26.607 回答
0

我设法通过添加一个新变量和一些数学来改变它。

OVERMAX值(调整到所需的最大百分比)用于设置新的百分比值。就这样130%变成了100%

#!/bin/sh
#   pulsevol.sh
#   PulseAudio Volume Control Script
#   Original 2010-05-20 - Gary Hetzel <garyhetzel@gmail.com>
#      
#   Modified 2010-10-18 by Fisslefink <fisslefink@gmail.com>
#    - Added support for multiple sinks and Ubuntu libnotify OSD
#
#   Usage:  pulsevol.sh [sink_index] [up|down|min|max|overmax|toggle|mute|unmute]
#

EXPECTED_ARGS=2
E_BADARGS=65

if [ $# -ne $EXPECTED_ARGS ]
then
    echo "Usage: `basename $0` [sink_index] [up|down|min|max|overmax|toggle|mute|unmute]"
    exit $E_BADARGS
fi

SINK=$1
STEP=5
MAXVOL=65537 # let's just assume this is the same all over
#MAXVOL=`pacmd list-sinks | grep "volume steps" | cut -d: -f2 | tr -d "[:space:]"`
OVERMAX=130  # how much the volume can raise over 100%

getperc(){
    VOLPERC=`pacmd list-sinks | grep "volume" | head -n1 | cut -d: -f3 | cut -d% -f1 | tr -d "[:space:]"`
}

getperc;

up(){
    VOLSTEP="$(( $VOLPERC+$STEP ))";
}

down(){
    VOLSTEP="$(( $VOLPERC-$STEP ))";
}

max(){
    pacmd set-sink-volume $SINK $MAXVOL > /dev/null
}

min(){
    pacmd set-sink-volume $SINK 0 > /dev/null
}

overmax(){
    SKIPOVERCHECK=1
    if [ $VOLPERC -lt 100 ]; then
        max;
        exit 0;
    fi
    up
}

mute(){
    pacmd set-sink-mute $SINK 1 > /dev/null
    notify-send " " -i "notification-audio-volume-muted" -h int:value:0 -h string:synchronous:volume
}

unmute(){
    VOLSTEP="$(( $VOLPERC-0 ))";
    SKIPOVERCHECK=1
    pacmd set-sink-mute $SINK 0 > /dev/null
}

toggle(){
    M=`pacmd list-sinks | grep "muted" | cut -d: -f2 | tr -d "[:space:]"`
    if [ "$M" = "no" ]; then
        mute
        exit 0;
    else
        unmute;
    fi
}

case $2 in
up)
    up;;
down)
    down;;
max)
    max
    exit 0;;
min)
    min
    exit 0;;
overmax)
    overmax;;
toggle)
    toggle;;
mute)
    mute;
    exit 0;;
unmute)
    unmute;;
*)
    echo "Usage: `basename $0` [sink_index] [up|down|min|max|overmax|toggle|mute|unmute]"
    exit 1;;
esac

VOLUME="$(( ($MAXVOL/100) * $VOLSTEP ))"
MAXCHECK="$(( $MAXVOL * $OVERMAX / 100  ))"

if [ -z $SKIPOVERCHECK ]; then
    if [ $VOLUME -gt $MAXCHECK ]; then
        VOLUME=$MAXCHECK
    elif [ $VOLUME -lt 0 ]; then
        VOLUME=0
    fi
fi

pacmd set-sink-volume $SINK $VOLUME > /dev/null

VOLPERC=`pacmd list-sinks | grep "volume" | head -n1 | cut -d: -f3 | cut -d% -f1 | tr -d "[:space:]"`
VOLPERC="$(( $VOLPERC * 100 / $OVERMAX))"

if [ "$VOLPERC" = "0" ]; then
        icon_name="notification-audio-volume-off"
    else
        if [ "$VOLPERC" -lt "33" ]; then
            icon_name="notification-audio-volume-low"
        else
            if [ "$VOLPERC" -lt "67" ]; then
                icon_name="notification-audio-volume-medium"
            else
                icon_name="notification-audio-volume-high"
            fi
        fi
fi

notify-send " " -i $icon_name -h int:value:$VOLPERC -h string:synchronous:volume

要点:https ://gist.github.com/paulodiovani/67906a5bf0392de51eca

于 2014-03-06T00:43:48.970 回答