2012-05-24 17 views
24

¿Cómo se cambia el volumen de Programmment en Gnome en Ubuntu, ya sea desde la línea de comandos o una API (Python, preferiblemente)?Cómo cambiar el volumen mediante programación en Ubuntu

Las únicas respuestas que encontré a preguntas similares usan amixer, lo que parece no tener ningún efecto en Ubuntu 12.04. Duración:

amixer set Headphone 10- 

espectáculos:

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] 

El x% cambia cada vez que lo ejecuto. Desafortunadamente, no tiene efecto en el volumen real. Eventualmente dice 0%, pero el volumen todavía está en pleno funcionamiento.

El otro inconveniente es que tengo que especificar el dispositivo de salida activo exacto, que tal vez no sepa si hay varios dispositivos. Por ejemplo, si tengo un "Master" y "Headphone", ¿cómo puedo determinar cuál es el dispositivo activo?

+3

Solo una conjetura: does 'amixer set Master 10-' funciona? Cambiar el volumen maestro afectaría a todos los demás canales. por lo que sé. – aland

+2

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

+0

amixer no tiene ningún efecto, independientemente de qué dispositivo especifique ... – Cerin

Respuesta

38

Ubuntu usa pulseaudio como sounderver. Puede ser controlado desde la línea de comandos usando los pactl y pacmd servicios públicos, por ejemplo:

pactl set-sink-volume 0 20% 

habría ajustar el volumen del disipador de # 0 a 20%.

ver: man pactl y pacmd help


edición:

para evitar -xx ser interpretado opción de línea de comando que debe agregar un prefijo con -- como. Eso detiene el análisis de la opción desde ese punto:

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

¿Cómo se establecen los cambios relativos de volumen? La página de manual dice "Si la especificación de volumen comienza con un + o - el ajuste de volumen será relativo al volumen de sumidero actual". pero al hacer 'pactl set-sink-volume 0 -10%' me da el error "pactl: invalid option - '1'" – Cerin

+0

@Cerin - ese es un problema común con el análisis de opciones en el shell ... actualicé mi respuesta. – mata

+0

Gracias por la aclaración. – Cerin

15

Lo hago usando el mezclador ALSA. Es probable que necesite descargar python-alsaaudio

sudo apt-get install python-alsaaudio 

A continuación, para controlar el volumen,

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

Leer http://pyalsaaudio.sourceforge.net/libalsaaudio.html que debe saber sobre alsaaudio biblioteca en detalles.

+0

Ubuntu parece que ya no usa Alsa ... – Cerin

+0

Lo sé pero estoy usando ubuntu 12.04 y esto sigue funcionando. Entonces, supongo que puedes usar esto. – Froyo

+0

Extraño. También estoy usando 12.04, en un macbook, y ninguna de las utilidades de alsa me funciona. Sin embargo, todas las herramientas de pulseaudio funcionan perfectamente ... – Cerin

2

Fragmento sucio para leer el volumen (no olvide el volumen va más allá de "100%" en ubuntu - en este punto esto devuelve ~ 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 trabajó en Ubuntu 13.04,

Aumentar el volumen en un 5%
amixer -D pulse sset Master 5%+

Disminuir el volumen en un 5%
amixer -D pulse sset Master 5%-

pactl o pacmd no funcionó correctamente en Ubuntu 13.04.

+0

Tanto el 'amixer set' propuesto como el maestro 10-'y tus comandos funcionan para mí, gracias! – VasyaNovikov

1

También puede probar el sencillo y elegante ponymix utill. Esto hace que sea muy fácil para subir/bajar el volumen, alternar (silenciar/activar) el audio, etc.

En primer lugar obtener una lista de las fuentes de audio disponibles con ponymix

En mi caso, puedo ver tanto una sink 0 y fuente 0. Puedo utilizar el número o el nombre completo, Audio estéreo incorporado digital (HDMI), para controlar el audio.

Aumentar el volumen de la tarjeta 0 en un 5%: ponymix -c 0 increase 5

disminuir el volumen de la tarjeta 0 en un 5%: ponymix -c 0 decrease 5

1

puedo recomendar esta herramienta que controla 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] ~ $ 
Cuestiones relacionadas