2012-05-24 20 views
24

Come si modifica a livello di volume il volume in Gnome su Ubuntu, dalla riga di comando o da un'API (Python preferibilmente)?Come modificare il volume a livello di programmazione in Ubuntu

Le uniche risposte che ho trovato a domande simili utilizzano amixer, che sembra non avere alcun effetto su Ubuntu 12.04. Esecuzione:

amixer set Headphone 10- 

spettacoli:

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] 

L'x% cambia ogni volta che l'eseguo. Sfortunatamente, non ha alcun effetto sul volume reale. Alla fine dice 0%, ma il volume è ancora a tutto volume.

L'altro lato negativo è che devo specificare il dispositivo di output attivo esatto, che potrei non sapere se ci sono più dispositivi. Ad esempio, se ho un "Master" e "Cuffie", come faccio a determinare qual è il dispositivo attivo?

+3

Solo un'ipotesi: funziona 'amixer set Master 10 -'? La modifica del volume principale interesserebbe tutti gli altri canali. per quanto ne so. – aland

+2

@aland: 'set di amixer Master 10-' funziona. – jfs

+0

amixer non ha alcun effetto, indipendentemente dal dispositivo che si specifica ... – Cerin

risposta

38

Ubuntu utilizza pulseaudio come server di controllo. Può essere controllato dalla riga comandi utilizzando le pactl e pacmd utilità, ad esempio:

pactl set-sink-volume 0 20% 

contrario il volume del lavello # 0 a 20%.

vedere: man pactl e pacmd help


edit:

per evitare -xx essere interpretato opzione riga di comando è necessario premettere ad essa -- come. Che interrompe l'opzione parsing da quel punto:

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

Come si impostano le relative variazioni di volume? La pagina di manuale dice "Se le specifiche del volume iniziano con + o - la regolazione del volume sarà relativa al volume attuale del sink". ma facendo 'pactl set-sink-volume 0 -10%' mi dà l'errore "pactl: opzione non valida - '1'" – Cerin

+0

@Cerin - questo è un problema comune con l'analisi delle opzioni nella shell ... aggiornata la mia risposta. – mata

+0

Grazie per il chiarimento. – Cerin

15

Lo faccio utilizzando il mixer ALSA. Probabilmente necessario scaricare python-alsaaudio

sudo apt-get install python-alsaaudio 

Poi per controllare il volume,

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

http://pyalsaaudio.sourceforge.net/libalsaaudio.html Leggi da sapere su alsaaudio biblioteca nei dettagli.

+0

Ubuntu non sembra usare più Alsa ... – Cerin

+0

Lo so ma sto usando Ubuntu 12.04 e questo funziona ancora. Quindi, immagino che tu possa usare questo. – Froyo

+0

Strano. Sto anche usando 12.04, su un macbook, e nessuna delle utility di alsa funziona per me. Tuttavia, tutte le utilità pulseaudio funzionano perfettamente ... – Cerin

2

Snippet sporco per leggere il volume (non dimenticare che il volume supera "100%" su ubuntu - a questo punto restituisce ~ 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 comando lavorato in Ubuntu 13.04,

Aumenta volume del 5%
amixer -D pulse sset Master 5%+

Diminuire il volume del 5%
amixer -D pulse sset Master 5%-

pactl o pacmd non ha funzionato correttamente con Ubuntu 13.04.

+0

Sia il 'amixer set impostato Master 10-' e i tuoi comandi funzionano per me, grazie! – VasyaNovikov

1

Si potrebbe anche provare il semplice ed elegante ponymix utill. E 'lo rende molto facile per aumentare/diminuire il volume, toggle (attivazione/disattivazione volume) l'audio, ecc

Prima ottenere un elenco di fonti audio disponibili con ponymix

Nel mio caso, posso vedere sia un sink 0 e una fonte . Posso usare il numero o il nome completo, Audio digitale stereo incorporato (HDMI), per controllare l'audio.

Aumentare il volume di carta 0 del 5%: ponymix -c 0 increase 5

diminuire il volume di carta 0 del 5%: ponymix -c 0 decrease 5

1

posso consigliare questo strumento che controlla 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] ~ $ 
Problemi correlati