Comment obtenir le niveau de volume à partir de la ligne de commande?

15

J'ai une barre d'état de texte sur un gestionnaire de fenêtres de mosaïque et j'utilise tcl pour lui fournir des informations. Pour le moment, j'ai besoin d'une ligne de commande qui affiche le niveau de volume de 0% à 100%. J'utilise Arch Linux.

milarepa
la source
Il semble que vous devriez pouvoir le faire en analysant /var/lib/alsa/asound.state.
jordanm
Remarque: à l'avenir, dire que vous utilisez Arch n'est pas vraiment pertinent. Ce qui importe réellement, c'est le sous-système audio que vous utilisez, par exemple ALSA, OSS ou PulseAudio.
strugee
1
Au lieu d'ajouter "fermé" à votre titre, vous devez simplement répondre à votre propre question et la laisser
jordanm

Réponses:

15

Une ligne pour analyser amixerla sortie du volume dans une barre d'état:

awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
jasonwryan
la source
qu'est-ce que cela [][]signifie?
approximatif
4
@approximatenumber Il définit le séparateur de champ sur ]ou [.
jasonwryan
Cool. Je ne savais pas que vous pouviez avoir une expression F
régulière
Comment stockeriez-vous cette commande dans une variable?
mike23
@ mike23vol=$(awk '/%/ {gsub(/[\[\]]/,""); print $4}' <(amixer sget Master))
jasonwryan
12

Vous pouvez utiliser amixerpour ce faire.

Exemples

$ amixer get Master
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [off]
  Front Right: Playback 65536 [100%] [off]

Vous pouvez également le modifier et le désactiver comme ceci:

volume réglé 75%

$ amixer set Master 75%
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 49152 [75%] [on]
  Front Right: Playback 49152 [75%] [on]

activer / désactiver le son

$ amixer set Master toggle
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [on]
  Front Right: Playback 65536 [100%] [on]

Vous pouvez calmer la sortie si vous ne voulez rien voir avec le --quietcommutateur.

$ amixer --quiet set Master 75%
$ 
slm
la source
6

Droite

amixer sget Master | grep 'Right:' | awk -F'[][]' '{ print $2 }'
85%

La gauche

amixer sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%

Serveur de son

Si vous n'utilisez pas pulseaudio par défaut, vous pouvez spécifier sur amixerquel serveur utiliser-D pulse

amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }'
85%
intika
la source
Cela ne fonctionne pas pour moi ... Master pour une raison quelconque n'a pas "Left" et "Right" malgré d'autres canaux tels que "Speaker".
Michael