รับระดับเสียงปัจจุบันใน OS X Terminal CLI หรือไม่


17

ฉันต้องการตรวจสอบระดับเสียงปัจจุบันจาก CLI บน Mac ของฉัน ฉันรู้ว่าฉันสามารถตั้งค่าเช่นนี้:

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)'

... แต่โปรดทราบว่าอุปกรณ์เสียงบางประเภทอาจไม่สามารถควบคุมการตั้งค่าระดับเสียงได้โดยตรง ตัวอย่างเช่นเสียงที่แสดงของคุณควรมีการควบคุม อย่างไรก็ตาม firewire หรือบอร์ด USB i / o อาจไม่มีการตั้งค่าเหล่านั้นภายใต้การควบคุมซอฟต์แวร์ (เนื่องจากอาจเป็นปุ่มหมุนจริง) หากการตั้งค่าเฉพาะไม่ได้อยู่ภายใต้การควบคุมของซอฟต์แวร์มันจะปรากฏขึ้นในวัตถุที่ส่งคืนจากget volume settings"ค่าที่หายไป" หรืออะไรทำนองนั้น


get volume settingsไม่ได้แยกความแตกต่างระหว่าง 0, 0.1 และ 0.01 มันไม่แสดงค่าทศนิยมทำให้มันค่อนข้างไร้ประโยชน์
คิวเมนตัส

@ABB คำแนะนำที่ดี ขอบคุณสำหรับการมีส่วนร่วม
ghoti

5

ฉันยอมรับสคริปต์ทุบตีที่ต่ำต้อยมากชื่อว่า "chut" ในขณะที่ฉันเบื่อกับปริมาณ sys ที่ต้องการจุดลอยเป็นอินพุต (0 ถึง 10 ขั้นตอน 0.1) แต่การส่งออกจำนวนเต็มกับขั้นตอนที่ 14 ตั้งแต่ 0 ถึง 100

ไปคิด ... หากใครสนใจ: 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.