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.

ludzkośćANDpeace
źródło

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:

Takkat
źródło
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ść.

co?
źródło
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).

Mina Michael
źródło
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 $@
    
Sparkida
źródło
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.

Antonios Hadjigeorgalis
źródło
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
MarkL
źródło
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,