Obtenez le niveau de volume actuel dans OS X Terminal CLI?

17

Je voudrais vérifier le niveau de volume actuel de la CLI sur mon Mac. Je sais que je peux le définir comme ceci:

osascript -e 'set volume <N>'

Mais cela ne semble pas fonctionner lorsque vous essayez d'obtenir le niveau de volume actuel.

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

Réponses:

18

Vous devriez trouver que get volume settingsva retourner un objet contenant entre autres le volume de sortie et le volume d'alerte. Ainsi, par exemple, vous pouvez le faire pour récupérer l'intégralité de l'objet:

osascript -e 'get volume settings'

ou plutôt peut-être pour saisir uniquement le volume de sortie (par exemple plutôt que le volume d'alerte):

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

... mais notez que tous les périphériques audio n'auront pas un contrôle logiciel direct sur les paramètres de volume. Par exemple, votre audio d'affichage doit avoir le contrôle; cependant, une carte Firewire ou USB I / O n'aurait probablement pas ces paramètres sous contrôle logiciel (car il pourrait s'agir de boutons physiques). Si le paramètre particulier n'est pas sous le contrôle du logiciel, il apparaîtra dans l'objet renvoyé get volume settingscomme "valeur manquante" ou quelque chose comme ça.

tmart
la source
get volume settingsne fait pas vraiment la différence entre 0, 0,1 et 0,01. Il n'affiche pas de valeurs décimales, ce qui le rend tout à fait inutile.
Acumenus
@ABB, excellente suggestion. Merci d'avoir contribué.
ghoti
5

J'ai commis un script bash très humble nommé "chut". Comme j'en avais marre du volume sys nécessitant un point flottant en entrée (0 à 10 étape 0.1) mais en sortie un entier avec une étape 14 allant de 0 à 100.

Allez comprendre ... Si quelqu'un est intéressé: http://github.com/docgyneco69/chut

Dans toute sa splendeur:

#!/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
la source
0

Obtenir et régler le volume à l'aide de la même échelle 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
la source