Ottieni il livello di volume corrente nella CLI del terminale OS X?


17

Vorrei controllare l'attuale livello del volume dalla CLI sul mio Mac. So di poterlo impostare in questo modo:

osascript -e 'set volume <N>'

Ma questo non sembra funzionare quando si tenta di ottenere il livello del volume corrente.

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

Risposte:


18

Dovresti trovare che get volume settingsrestituirà un oggetto contenente tra l'altro il volume di output e il volume di avviso. Quindi, ad esempio, potresti farlo per recuperare l'intero oggetto:

osascript -e 'get volume settings'

o piuttosto forse questo per catturare solo il volume di output (ad es. anziché il volume di avviso):

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

... ma nota che non tutti i dispositivi audio avranno il controllo diretto del software sulle impostazioni del volume. Ad esempio, l'audio del display dovrebbe avere il controllo; tuttavia, una scheda Firewire o USB i / o probabilmente non avrebbe tali impostazioni sotto il controllo del software (poiché potrebbero essere manopole fisiche). Se l'impostazione particolare non è sotto il controllo del software, verrà visualizzata nell'oggetto restituito get volume settingscome "valore mancante" o qualcosa del genere.


get volume settingsin realtà non distingue tra 0, 0,1 e 0,01. Non mostra valori decimali, rendendolo abbastanza inutile.
Acumenus,

@ABB, ottimo suggerimento. Grazie per aver contribuito.
ghoti,

5

Ho commesso uno script bash molto umile chiamato "chut". Dato che ero stufo del volume di sistema che richiedeva un virgola mobile come input (da 0 a 10, passo 0.1), ma emettendo un numero intero con un passo 14 che va da 0 a 100.

Vai a capire ... Se qualcuno fosse interessato: http://github.com/docgyneco69/chut

Nella sua piena gloria:

#!/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 ;

0

Ottenere e impostare il volume usando la stessa scala 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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.