Lấy mức âm lượng hiện tại trong OS X Terminal CLI?


17

Tôi muốn kiểm tra mức âm lượng hiện tại từ CLI trên máy Mac của tôi. Tôi biết tôi có thể thiết lập nó như thế này:

osascript -e 'set volume <N>'

Nhưng điều đó dường như không hoạt động khi cố gắng để có được mức âm lượng hiện tại.

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

Câu trả lời:


18

Bạn sẽ thấy rằng get volume settingssẽ trả về một đối tượng chứa trong số những thứ khác âm lượng đầu ra và âm lượng cảnh báo. Vì vậy, ví dụ bạn có thể làm điều này để lấy toàn bộ đối tượng:

osascript -e 'get volume settings'

hoặc đúng hơn có thể chỉ để lấy âm lượng đầu ra (ví dụ như âm lượng cảnh báo):

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

... nhưng lưu ý rằng không phải tất cả các thiết bị âm thanh sẽ có phần mềm kiểm soát trực tiếp các cài đặt âm lượng. Ví dụ, âm thanh hiển thị của bạn nên có quyền kiểm soát; tuy nhiên, bảng i / o firewire hoặc USB có thể sẽ không có các cài đặt đó dưới sự kiểm soát của phần mềm (vì chúng có thể là các núm vật lý). Nếu cài đặt cụ thể không nằm dưới sự kiểm soát của phần mềm thì nó sẽ hiển thị trong đối tượng được trả về get volume settingslà "giá trị thiếu" hoặc đại loại như thế.


get volume settingskhông thực sự phân biệt giữa 0, 0,1 và 0,01. Nó không hiển thị giá trị thập phân, làm cho nó khá vô dụng.
Acumenus

@ABB, đề nghị tuyệt vời. Cảm ơn đã đóng góp.
ghoti

5

Tôi đã cam kết một kịch bản bash rất khiêm tốn có tên là "chut". Vì tôi đã chán ngấy với khối lượng sys yêu cầu điểm nổi là đầu vào (0 đến 10 bước 0.1) nhưng xuất ra một số nguyên với bước 14 nằm trong khoảng từ 0 đến 100.

Hãy tìm hiểu ... Nếu ai quan tâm: http://github.com/docgyneco69/chut

Trong vinh quang đầy đủ của nó:

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

Lấy và đặt âm lượng bằng cùng một tỷ lệ 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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.