dostosuj maksymalną możliwą głośność w pulseaudio


26

Czasami dźwięk / film / muzyka w moim systemie Ubuntu_12.04 ma bardzo niski poziom głośności. Odtąd zwiększam głośność dźwięku. Mogę użyć następującego ustawienia (patrz zrzut ekranu) wprowadź opis zdjęcia tutaj

Wydaje się zatem, że pulseaudio jest w stanie zwiększyć głośność powyżej maksymalnego poziomu, który wydaje się możliwy, po prostu za pomocą przycisków „zwiększania głośności” urządzenia. Moje pytania dotyczą tego, w jaki sposób mogę dostosować Pulseaudio, aby umożliwić większy zakres lub wyższy maksymalny poziom głośności?

Zwłaszcza w przypadku niektórych materiałów audio, które mają bardzo niski poziom głośności na początku, fajnie byłoby móc szybko zwiększyć głośność wyjściową (powerup) do wyższego poziomu niż być może jest to konieczne w przypadku innego - już dość głośnego - materiału.

Odpowiedzi:


24

Maksymalny możliwy poziom głośności, jaki możemy uzyskać, przesuwając regulator głośności do ponad 100%, wynosi około. 153% powyżej normalnego limitu piku. Pod warunkiem, że ustawiliśmy głośność ALSA z alsamixerem na 100, te 100% to poziom, powyżej którego dźwięk zostanie przycięty lub zniekształcony. Stanie się tak również w przypadku wzmocnienia suwakiem do 153%.

Niemniej jednak możliwe jest dalsze zwiększenie tego poziomu poprzez ustawienie poziomu opadania za pomocą polecenia następującego w terminalu:

pacmd set-sink-volume <sink> <value>

Zamień <sink>na nazwę zlewu lub indeks zlewu podany z:

pacmd list-sinks

Dolną granicą <value>jest oczywiście to 0, że objętość liniowa 100% jest wartością 65536, wszystko wyższe zostanie dodatkowo wzmocnione. Wartość 512000 doprowadzi zatem do nadmiernego wzmocnienia na poziomie 781%.

Jest to bardzo prymitywna metoda wzmocnienia wyjścia dźwięku o różnym poziomie, ponieważ nadmierne wzmocnienie prowadzi nie tylko do przesterowania i brzydkich zniekształceń, ale może również uszkodzić głośniki.

Dlatego byłby to lepszy sposób na znormalizowanie wyjścia audio. Zobacz następujące pytanie, jak to zrobić za pomocą pulseaudio:


Użyłem pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo 150% - odkąd nie udało mi się jeszcze osiągnąć sukcesu z pacmd. W każdym razie pomysł już bardzo pomógł. W ten sposób można zwiększyć poziom wyjściowy do więcej niż 100% lub 153%, na co pozwala GUI, dziękuję.
humanityANDpeace

2
Twoja świetna odpowiedź pozwoliła ustawić głośność na większe wartości (np. 781% wzmocnienia), co jest świetne. Częścią mojego pytania jest również, jak zmienić pierwotnie używaną skalę, aby nie wynosiła ona od 0% do 100% (poprzez GUI), ale od 0% do 781%. Może jakieś dodatkowe informacje, jak to osiągnąć? byłoby dodatkowo świetnie! dziękuję
ludzkośćANDpeace

Nie mam pojęcia, jak zwiększyć tę wartość dla suwaka głośności. Może być zakodowany na stałe, dlatego nie można go zmienić inaczej niż łatanie źródła i rekompilacja.
Takkat

Nie działa: program nadal może go ustawić na 100%, nawet jeśli ustawię go w ten sposób na 12%.
panzi

Zniszczyłem głośniki laptopa, używając głośności na poziomie 150%, który pozwala. Musiałem je wymienić. Informujemy, że ewentualne ostrzeżenie o uszkodzeniu jest uzasadnione.
brett

7

Próbowałem tego polecenia:

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

i to było bardzo pomocne. Można zmienić 150% na dowolną wartość.


Należy wspomnieć, że wyłącza kontrolę głośności.
Zielony

4

Demonstracja wideo


używam

pactl set-sink-volume 0 100%

Gdzie 0jest numer ujścia pacmd list-sinksi 100%jest domyślnym niezbudzonym woluminem. Możesz wprowadzić wartości powyżej 100%, aby uzyskać wzmocnienie dźwięku ( 200%na przykład).


wyłącza kontrolę głośności.
Zielony

czemu? nie to nie. Właśnie tego spróbowałem i jest w porządku. Chodzi o to, że podnosi głośność powyżej maksymalnej głośności, jaką może osiągnąć pasek głośności. Pełny pasek prawdopodobnie wynosiłby około 150%, więc 200% nie może być wykonane za pomocą paska. @Green
Mina Michael

2

Oto mały skrypt do wykonania obliczeń i ustawienia głośności dla ciebie (po prostu podaj objętość jako argument). Na przykład: vol 105ustawi głośność na 105%.

  • Utwórz plik

    $> file=/usr/bin/vol;sudo touch $file && \
    sudo chmod u+x $file && sudo chown $USER:$USER $file && \
    gedit $file
    
  • Kopiuj i wklej:

    #!/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 $@
    

1

Wstawiłem następujący wiersz do skryptu powłoki i uruchomiłem go podczas uruchamiania, ponieważ laptop mojego ojca (12.04 32-bitowy) nie zapisywał ustawienia maksymalnej głośności.

pacmd set-sink-volume 0 99999

jeśli jest tylko jedna karta dźwiękowa, prawdopodobnie jest to indeks 0, a następnie nie trzeba wpisywać pełnej nazwy. Widzę powyżej, że wartość opiera się na 65536 wynoszącym 100%. Kiedy użyłem 99999, strzelałem w ciemności. 153% faktycznie byłoby 100270 osiągając taki sam wynik jak przy użyciu GUI.


0
#!/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

1
Dziękuję za Twoją odpowiedź. Jeśli to możliwe, czy mógłbyś zredagować swoją odpowiedź, aby opracować nieco więcej na ten temat? Ludzie zawsze wiedzą, dlaczego rozwiązanie ma działać, zamiast po prostu ślepo kopiować i wklejać kod, którego nie rozumieją. Pomaga to również dostosować rozwiązania do różnych problemów.
Henning Kockerbeck,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.