Dapatkan tingkat volume saat ini di OS X Terminal CLI?


17

Saya ingin memeriksa level volume saat ini dari CLI di Mac saya. Saya tahu saya bisa mengaturnya seperti ini:

osascript -e 'set volume <N>'

Tapi itu sepertinya tidak berhasil ketika mencoba untuk mendapatkan level volume saat ini.

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

Jawaban:


18

Anda harus menemukan bahwa get volume settingsakan mengembalikan objek yang berisi antara lain volume output dan volume peringatan. Jadi misalnya Anda bisa melakukan ini untuk mengambil seluruh objek:

osascript -e 'get volume settings'

atau lebih tepatnya ini hanya untuk mengambil volume output (misal daripada volume peringatan):

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

... tetapi perhatikan bahwa tidak semua perangkat audio akan memiliki kontrol perangkat lunak langsung atas pengaturan volume. Misalnya audio layar Anda harus memiliki kontrol; Namun, firewire atau papan USB i / o mungkin tidak akan memiliki pengaturan tersebut di bawah kendali perangkat lunak (karena mereka mungkin tombol fisik). Jika pengaturan tertentu tidak di bawah kendali perangkat lunak maka itu akan muncul di objek yang dikembalikan dari get volume settingssebagai "nilai yang hilang" atau sesuatu seperti itu.


get volume settingstidak benar-benar membedakan antara 0, 0,1, dan 0,01. Itu tidak menunjukkan nilai desimal, membuatnya cukup berguna.
Acumenus

@ ABB, saran bagus. Terima kasih telah berkontribusi.
ghoti

5

Saya melakukan skrip bash yang sangat sederhana bernama "chut". Ketika saya muak dengan sys volume yang membutuhkan titik pelampung sebagai input (0 hingga 10 langkah 0.1) tetapi mengeluarkan bilangan bulat dengan langkah 14 mulai dari 0 hingga 100.

Go figure ... Jika ada yang tertarik: http://github.com/docgyneco69/chut

Dalam kemuliaan penuh:

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

Mendapatkan dan mengatur volume menggunakan skala yang sama 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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.