Get the current volume level in OS X Terminal CLI?
Clash Royale CLAN TAG#URR8PPP
I would like to check the current volume level from the CLI on my Mac. I know I can set it like this:
osascript -e 'set volume <N>'
But that doesn't seem to work when trying to get the current volume level.
$ osascript -e 'get volume'
4:10: execution error: The variable volume is not defined. (-2753)
command-line osx audio volume
add a comment |
I would like to check the current volume level from the CLI on my Mac. I know I can set it like this:
osascript -e 'set volume <N>'
But that doesn't seem to work when trying to get the current volume level.
$ osascript -e 'get volume'
4:10: execution error: The variable volume is not defined. (-2753)
command-line osx audio volume
add a comment |
I would like to check the current volume level from the CLI on my Mac. I know I can set it like this:
osascript -e 'set volume <N>'
But that doesn't seem to work when trying to get the current volume level.
$ osascript -e 'get volume'
4:10: execution error: The variable volume is not defined. (-2753)
command-line osx audio volume
I would like to check the current volume level from the CLI on my Mac. I know I can set it like this:
osascript -e 'set volume <N>'
But that doesn't seem to work when trying to get the current volume level.
$ osascript -e 'get volume'
4:10: execution error: The variable volume is not defined. (-2753)
command-line osx audio volume
command-line osx audio volume
asked Nov 25 '13 at 19:06
Cory KleinCory Klein
5,582216084
5,582216084
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
You should find that get volume settings
will return an object containing among other things the output volume and the alert volume. So for example you could do this to retrieve the entire object:
osascript -e 'get volume settings'
or rather maybe this to grab just the output volume (e.g. rather than the alert volume):
osascript -e 'set ovol to output volume of (get volume settings)'
... but note that not all audio devices will have direct software control over volume settings. For example your display audio should have control; however, a firewire or USB i/o board probably would not have those settings under software control (since they might be physical knobs). If the particular setting is not under the control of software then it will show up in the object returned from get volume settings
as "missing value" or something like that.
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.
– A-B-B
Apr 18 '14 at 22:36
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
add a comment |
I committed a very humble bash script named "chut".
As I was fed up with the sys volume requiring a float point as input (0 to 10 step 0.1) but outputing an integer with a step 14 ranging from 0 to 100.
Go figure... If anyone interested: http://github.com/docgyneco69/chut
In its full glory:
#!/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 ;
add a comment |
Getting and setting the volume using the same scale 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"
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f102552%2fget-the-current-volume-level-in-os-x-terminal-cli%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You should find that get volume settings
will return an object containing among other things the output volume and the alert volume. So for example you could do this to retrieve the entire object:
osascript -e 'get volume settings'
or rather maybe this to grab just the output volume (e.g. rather than the alert volume):
osascript -e 'set ovol to output volume of (get volume settings)'
... but note that not all audio devices will have direct software control over volume settings. For example your display audio should have control; however, a firewire or USB i/o board probably would not have those settings under software control (since they might be physical knobs). If the particular setting is not under the control of software then it will show up in the object returned from get volume settings
as "missing value" or something like that.
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.
– A-B-B
Apr 18 '14 at 22:36
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
add a comment |
You should find that get volume settings
will return an object containing among other things the output volume and the alert volume. So for example you could do this to retrieve the entire object:
osascript -e 'get volume settings'
or rather maybe this to grab just the output volume (e.g. rather than the alert volume):
osascript -e 'set ovol to output volume of (get volume settings)'
... but note that not all audio devices will have direct software control over volume settings. For example your display audio should have control; however, a firewire or USB i/o board probably would not have those settings under software control (since they might be physical knobs). If the particular setting is not under the control of software then it will show up in the object returned from get volume settings
as "missing value" or something like that.
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.
– A-B-B
Apr 18 '14 at 22:36
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
add a comment |
You should find that get volume settings
will return an object containing among other things the output volume and the alert volume. So for example you could do this to retrieve the entire object:
osascript -e 'get volume settings'
or rather maybe this to grab just the output volume (e.g. rather than the alert volume):
osascript -e 'set ovol to output volume of (get volume settings)'
... but note that not all audio devices will have direct software control over volume settings. For example your display audio should have control; however, a firewire or USB i/o board probably would not have those settings under software control (since they might be physical knobs). If the particular setting is not under the control of software then it will show up in the object returned from get volume settings
as "missing value" or something like that.
You should find that get volume settings
will return an object containing among other things the output volume and the alert volume. So for example you could do this to retrieve the entire object:
osascript -e 'get volume settings'
or rather maybe this to grab just the output volume (e.g. rather than the alert volume):
osascript -e 'set ovol to output volume of (get volume settings)'
... but note that not all audio devices will have direct software control over volume settings. For example your display audio should have control; however, a firewire or USB i/o board probably would not have those settings under software control (since they might be physical knobs). If the particular setting is not under the control of software then it will show up in the object returned from get volume settings
as "missing value" or something like that.
answered Nov 25 '13 at 20:23
tmarttmart
19613
19613
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.
– A-B-B
Apr 18 '14 at 22:36
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
add a comment |
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.
– A-B-B
Apr 18 '14 at 22:36
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.– A-B-B
Apr 18 '14 at 22:36
get volume settings
doesn't really differentiate between 0, 0.1, and 0.01. It doesn't show decimal values, making it quite useless.– A-B-B
Apr 18 '14 at 22:36
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
@A-B-B, great suggestion. Thanks for contributing.
– ghoti
Oct 28 '15 at 0:22
add a comment |
I committed a very humble bash script named "chut".
As I was fed up with the sys volume requiring a float point as input (0 to 10 step 0.1) but outputing an integer with a step 14 ranging from 0 to 100.
Go figure... If anyone interested: http://github.com/docgyneco69/chut
In its full glory:
#!/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 ;
add a comment |
I committed a very humble bash script named "chut".
As I was fed up with the sys volume requiring a float point as input (0 to 10 step 0.1) but outputing an integer with a step 14 ranging from 0 to 100.
Go figure... If anyone interested: http://github.com/docgyneco69/chut
In its full glory:
#!/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 ;
add a comment |
I committed a very humble bash script named "chut".
As I was fed up with the sys volume requiring a float point as input (0 to 10 step 0.1) but outputing an integer with a step 14 ranging from 0 to 100.
Go figure... If anyone interested: http://github.com/docgyneco69/chut
In its full glory:
#!/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 ;
I committed a very humble bash script named "chut".
As I was fed up with the sys volume requiring a float point as input (0 to 10 step 0.1) but outputing an integer with a step 14 ranging from 0 to 100.
Go figure... If anyone interested: http://github.com/docgyneco69/chut
In its full glory:
#!/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 ;
edited Sep 2 '16 at 12:03
answered Sep 2 '16 at 11:55
docgyneco69docgyneco69
6113
6113
add a comment |
add a comment |
Getting and setting the volume using the same scale 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"
add a comment |
Getting and setting the volume using the same scale 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"
add a comment |
Getting and setting the volume using the same scale 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"
Getting and setting the volume using the same scale 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"
answered Feb 28 at 16:23
iolsmitiolsmit
1112
1112
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f102552%2fget-the-current-volume-level-in-os-x-terminal-cli%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown