OS X 터미널 CLI에서 현재 볼륨 레벨을 가져 오십니까?


17

Mac의 CLI에서 현재 볼륨 레벨을 확인하고 싶습니다. 나는 이것을 다음과 같이 설정할 수 있다는 것을 안다.

osascript -e 'set volume <N>'

그러나 현재 볼륨 레벨을 얻으려고 할 때 작동하지 않는 것 같습니다.

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

답변:


18

당신은 그 찾아야한다 get volume settings무엇보다도 출력 볼륨과 알림 볼륨을 포함하는 객체를 반환합니다. 예를 들어 전체 객체를 검색하려면 다음을 수행하십시오.

osascript -e 'get volume settings'

또는 오히려 출력 볼륨 (예 : 경고 볼륨이 아닌)을 얻기 위해 다음과 같이 할 수 있습니다.

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

...하지만 모든 오디오 장치가 볼륨 설정을 직접 소프트웨어로 제어하지는 않습니다. 예를 들어 디스플레이 오디오에 제어 기능이 있어야합니다. 그러나 파이어 와이어 또는 USB i / o 보드는 소프트웨어 제어하에 해당 설정이 없을 수 있습니다 (물리적 노브 일 수 있으므로). 특정 설정이 소프트웨어의 제어를받지 않는 경우 get volume settings"missing value"또는 이와 유사한 것으로 반환 된 객체에 표시됩니다 .


get volume settings실제로 0, 0.1 및 0.01을 구별하지 않습니다. 십진수 값을 표시하지 않으므로 매우 쓸모가 없습니다.
Acumenus

@ABB, 좋은 제안. 기여해 주셔서 감사합니다.
ghoti

5

"chut"라는 매우 겸손한 bash 스크립트를 커밋했습니다. 내가 입력 (0-10 단계 0.1)으로 부동 소수점을 요구하지만 0에서 100 범위의 단계 14를 가진 정수를 출력하는 sys 볼륨이 줄어 들었습니다.

가자 ... 누군가 관심이 있다면 : http://github.com/docgyneco69/chut

완전한 영광으로 :

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

동일한 스케일을 사용하여 볼륨 얻기 및 설정 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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.