OS X 터미널 CLI에서 현재 볼륨 레벨을 얻으시겠습니까?

OS X 터미널 CLI에서 현재 볼륨 레벨을 얻으시겠습니까?

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

osascript -e 'set volume <N>'

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

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

답변1

get volume settings출력 및 알람 수량을 포함하는 객체를 반환한다는 것을 알아야 합니다 . 예를 들어 다음을 수행하여 전체 객체를 검색할 수 있습니다.

osascript -e 'get volume settings'

또는 오히려 출력 볼륨만 얻을 수도 있습니다(예를 들어 경고 볼륨 대신).

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

...그러나 모든 오디오 장치가 볼륨 설정을 직접 소프트웨어로 제어할 수 있는 것은 아닙니다. 예를 들어, 디스플레이 오디오에는 제어 기능이 있어야 하지만 FireWire 또는 USB I/O 보드에는 소프트웨어 제어 하에 이러한 설정이 없을 수 있습니다(물리적 손잡이일 수 있음). 특정 설정이 소프트웨어에 의해 제어되지 않으면 반환된 객체에 get volume settings"누락된 값" 또는 이와 유사한 것으로 표시됩니다.

답변2

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"

답변3

나는 "chut"이라는 매우 간단한 bash 스크립트를 제출했습니다. 왜냐하면 저는 부동 소수점(0.1 단계의 0~10)을 입력으로 사용하지만 14 단계의 0~100 범위의 정수를 출력하는 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 ;

관련 정보