Как разрешить сценарию импульсного звука увеличивать громкость более чем на 100% через bash

Я использую этот скрипт для изменения громкости в pulseaudio с помощью привязки клавиш, но у него есть 0% на 100% предел.

Поскольку pulseaudio позволяет увеличить громкость более чем на 100% (что все еще мало на моем ноутбуке), я хочу настроить его так, чтобы максимальная громкость была на уровне 140% или 150%.

Обратите внимание, что просто комментируя строки 105 ~ 111, скрипты работают или что, но без предельного значения (что может испортить мои динамики). Чего я действительно хочу, так это установить настраиваемый лимит на 100%.

На самом деле это скорее вопрос bash, чем pulseaudio.

Gist с полным скриптом


person paulodiovani    schedule 01.03.2014    source источник


Ответы (2)


Просто увеличьте MAXVOL примерно до 100000 (150% от исходного значения, 65537).

person John Zwinck    schedule 01.03.2014
comment
Это не работает. Любое значение выше 65537 для MAXVOL приведет к тому, что VOLSTEP превысит 100%, а при расчете VOLUME оно значительно возрастет. Таким образом, громкость легко превышает 200% и не может быть уменьшена. - person paulodiovani; 06.03.2014

Мне удалось изменить его, добавив новую переменную и немного математики.

Значение OVERMAX (настраивается на желаемый максимальный процент) используется для установки нового процентного значения. Итак, 130% становится 100%.

#!/bin/sh
#   pulsevol.sh
#   PulseAudio Volume Control Script
#   Original 2010-05-20 - Gary Hetzel <[email protected]>
#      
#   Modified 2010-10-18 by Fisslefink <[email protected]>
#    - 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

person paulodiovani    schedule 06.03.2014