2012-05-24 17 views
24

Jak można programowo zmienić głośność w Gnome w Ubuntu, zarówno z linii poleceń lub API (Python Preferrably)?Jak programowo zmienić głośność w Ubuntu

Jedynymi znalazłem odpowiedzi na podobne pytania użyć amixer, która wydaje się nie mieć wpływu na Ubuntu 12.04. Uruchamianie:

amixer set Headphone 10- 

Wystawy:

Simple mixer control 'Headphone',0 
    Capabilities: pvolume pswitch penum 
    Playback channels: Front Left - Front Right 
    Limits: Playback 0 - 115 
    Mono: 
    Front Left: Playback 0 [57%] [-57.50dB] [on] 
    Front Right: Playback 0 [57%] [-57.50dB] [on] 

x% zmienia się za każdym razem, kiedy go uruchomić. Niestety nie ma to wpływu na rzeczywistą objętość. Ostatecznie mówi 0%, ale wolumin jest nadal w pełni naładowany.

Innym minusem jest to muszę określić dokładną aktywnego urządzenia wyjściowego, który nie może wiedzieć, czy istnieje wiele urządzeń. Na przykład, jeśli mam "Master" i "Headphone", jak określić, który z nich jest aktywnym urządzeniem?

+3

Zgadnij: czy zestaw 'amixer Master 10-' działa? Zmiana głośności głównej wpłynie na wszystkie pozostałe kanały. o ile mi wiadomo. – aland

+2

@aland: 'zestaw amixer Master 10-' działa. – jfs

+0

amixer nie działa, niezależnie od tego, które urządzenie określam ... – Cerin

Odpowiedz

38

Ubuntu używa pulseaudio jako sounderver. Może być sterowany z linii polecenia za pomocą pactl i pacmd narzędzia, na przykład:

pactl set-sink-volume 0 20% 

by ustawić wielkość zlewozmywaka # 0 do 20%.

patrz: man pactl i pacmd help


edit:

uniknąć -xx interpretowane jako opcja wiersza poleceń należy poprzedzić je --. To zatrzymuje parsowanie opcji od tego momentu:

pactl set-sink-volume 0 -- -20% # or: 
pactl -- set-sink-volume 0 -20% # doesn't matter where the `--` goes 
+1

Jak ustawić względne zmiany głośności? Strona podręcznika mówi: "Jeśli specyfikacja objętości zaczyna się od + lub - regulacja głośności będzie zależna od bieżącego poziomu tonięcia." ale wykonanie 'pactl set-sink-volume 0 -10%' daje mi błąd "pactl: invalid option - '1'" – Cerin

+0

@Cerin - jest to częsty problem z opcją parsowania w powłoce ... zaktualizowałem moją odpowiedź. – mata

+0

Dzięki za wyjaśnienia. – Cerin

15

Robię to za pomocą miksera ALSA. Prawdopodobnie trzeba ściągnąć python-alsaaudio

sudo apt-get install python-alsaaudio 

Następnie kontrolować głośność,

import alsaaudio 
m = alsaaudio.Mixer() # defined alsaaudio.Mixer to change volume 
m.setvolume(50) # set volume 
vol = m.getvolume() # get volume float value 

Czytaj http://pyalsaaudio.sourceforge.net/libalsaaudio.html wiedzieć o alsaaudio biblioteki w szczegółach.

+0

Ubuntu nie wydaje się już używać Alsy ... – Cerin

+0

Wiem, ale używam Ubuntu 12.04 i to wciąż działa. Sądzę, że możesz z tego skorzystać. – Froyo

+0

Dziwne. Używam także 12.04 na MacBooku i żadne z narzędzi alsa nie działa dla mnie. Jednak wszystkie narzędzia pulseaudio działają perfekcyjnie ... – Cerin

2

Brudny fragment czytać głośności (nie zapomnij objętość mija „100%” na Ubuntu - w którym momencie to zwraca ~ 0,66).

#!/usr/bin/python 
import subprocess 

vol = int(filter(lambda l: l.startswith('set-sink-volume'), 
      subprocess.check_output(["pacmd","dump"]) 
      .split('\n'))[0] 
      .split()[-1],16)/100000. 

print vol 
6

amixer polecenie pracował w Ubuntu 13.04,

Wzrost objętości o 5%
amixer -D pulse sset Master 5%+

Zmniejszenie objętości po 5%
amixer -D pulse sset Master 5%-

pactl lub pacmd nie działa prawidłowo dla mnie w Ubuntu 13.04.

+0

Zarówno proponowany zestaw amixer Master 10-"jak i twoje polecenia działają dla mnie, dzięki! – VasyaNovikov

1

Możesz również wypróbować prosty i elegancki model ponymix. To sprawia, że ​​bardzo łatwo zwiększyć/zmniejszyć poziom głośności, przełącznik (wyciszanie/włączanie) AUDIO itp

najpierw uzyskać listę dostępnych źródeł dźwięku z ponymix

w moim przypadku, widzę zarówno zlew 0 i źródło 0. Mogę użyć numeru lub jego pełnej nazwy, Wbudowany dźwięk cyfrowy stereo (HDMI), do sterowania dźwiękiem.

Zwiększenie objętości kartą 0 o 5%: ponymix -c 0 increase 5

Zmniejsz głośność kartą 0 o 5%: ponymix -c 0 decrease 5

1

mogę polecić to narzędzie, które kontroluje PulseAudio: https://github.com/graysky2/pulseaudio-ctl

[email protected] ~ $ pulseaudio-ctl 
pulseaudio-ctl v1.63 

/usr/bin/pulseaudio-ctl {up,down,mute,mute-input,set,atmost,full-status} [n] 

Where up and down adjust volume in ±5 % increments 
Where up and down [n] adjust volume in ±n % increments 
Where mute toggles the mute status on/off 
Where mute-input toggles the input status on/off 
Where set set the volume to [n] % 
Where atmost only takes effect if current volume is higher than [n] 
Where full-status prints volume level, sink and source mute state to stdout 

Optionally, redefine an upper threshold in /home/me/.config/pulseaudio-ctl/config 

Volume level  : 80 % 
Is sink muted : no 
Is source muted : no 
Detected sink : 1 
Detected source : 3 
Pulse version : 8.0 
[email protected] ~ $ 
Powiązane problemy