¿Obtener el nivel de volumen actual en OS X Terminal CLI?

17

Me gustaría verificar el nivel de volumen actual desde la CLI en mi Mac. Sé que puedo configurarlo así:

osascript -e 'set volume <N>'

Pero eso no parece funcionar cuando se intenta obtener el nivel de volumen actual.

$ osascript -e 'get volume'
4:10: execution error: The variable volume is not defined. (-2753)
Cory Klein
fuente

Respuestas:

18

Debería encontrar que get volume settingsdevolverá un objeto que contiene, entre otras cosas, el volumen de salida y el volumen de alerta. Entonces, por ejemplo, podría hacer esto para recuperar todo el objeto:

osascript -e 'get volume settings'

o mejor dicho, esto para tomar solo el volumen de salida (por ejemplo, en lugar del volumen de alerta):

osascript -e 'set ovol to output volume of (get volume settings)'

... pero tenga en cuenta que no todos los dispositivos de audio tendrán un control directo del software sobre la configuración de volumen. Por ejemplo, el audio de su pantalla debe tener control; sin embargo, una placa Firewire o USB I / O probablemente no tendría esas configuraciones bajo el control del software (ya que podrían ser perillas físicas). Si la configuración particular no está bajo el control del software, aparecerá en el objeto devuelto get volume settingscomo "valor perdido" o algo así.

tmart
fuente
get volume settingsen realidad no diferencia entre 0, 0.1 y 0.01. No muestra valores decimales, por lo que es bastante inútil.
Acumenus
@ABB, gran sugerencia. Gracias por contribuir
ghoti
5

Cometí un script bash muy humilde llamado "chut". Como estaba harto de que el volumen del sistema requiriera un punto flotante como entrada (0 a 10 paso 0.1) pero emitiera un número entero con un paso 14 que varía de 0 a 100.

Ir figura ... Si alguien interesado: http://github.com/docgyneco69/chut

En todo su esplendor:

#!/bin/bash
## CHUT script
## Note: regex [[:digit:]] requires a relatively recent shell
## easy to change with a sed cmd if needed
## applescript arg is not fully bullet proofed for sneaky cmds
## but as no outside arg is passed by the script I kept the usual
## arg format for code readibility (and pure laziness)

# init _x and curr_vol with defaults values (muting)
_x='- 100' ; curr_vol='0' ;

function _usage {echo -e "CHUT is a simple cmd exe to change the system audio volume.
USAGE chut [][-][--][+][++]
      no arg will mute (default)
      [-][+] [--][++] to decrease or increase the volume
      [+++] to set to the maximum
      [-h][--help] display this message
NOTE sys sets volume as float (0-10/0.1) but outputs int (0-100/14)" ; exit 1 ; } ;

# set _x by looping $1 then break as we only use 1st arg, -h or --help to print usage
while [[ "$1" ]]; do case "$1" in
    "-h"|"--help")  _usage      ;;
    "-")        _x='- 0.5'  ;;
    "--")       _x='- 1.0'  ;;
    "+")        _x='+ 0.5'  ;;
    "++")       _x='+ 1.0'  ;;
    "+++")      _x='+ 100'  ;;
    *)      _x='- 100'  ;; # unrecognized values will mute
esac ; break ; done ;

# get current volume value from system (sys volume is 0 to 100 step 14)
curr_vol=$(/usr/bin/osascript -e "get volume settings" | cut -d ',' -f1 | tr -dc [[:digit:]]) ;

# set new volume via _x - use bc for floating point, escape potential errors, 
# print value with one decimal - test & echo the new volume value via applescript
curr_vol=$( printf "%.1f" "$( echo "$curr_vol / 14 $_x" | bc -l 2>&-)" ) ;
(/usr/bin/osascript -e "set Volume "\"$curr_vol"\" ") && \
echo $(/usr/bin/osascript -e "get volume settings" | cut -d ',' -f1 | tr -dc [[:digit:]]) ;

exit 0 ;
docgyneco69
fuente
0

Obtener y ajustar el volumen usando la misma escala 1..100:

# Get current volume as a number from 0 to 100
current_vol=$(osascript -e 'output volume of (get volume settings)')

# Prank co-worker by playing loud noise/music
osascript -e "set volume output volume 100"
afplay sabotage.m4a

# (Re-)set to saved volume as a number from 0 to 100
osascript -e "set volume output volume $current_vol"
Iolsmit
fuente