How can I determine the sound volume from within a python script?

Solution 1:

You have a couple of approaches you can use here.

AppleScript via osascript CLI

You can use AppleScript directly via the osascript CLI to get and set the volume like so:

Get volume - Echos a number from 0 to 100
$ osascript -e 'output volume of (get volume settings)'
Set volume - Where 50 is a number from 0 to 100
$ osascript -e 'set volume output volume 50'
Get mute state - Echos a string of 'true' or 'false'
$ osascript -e 'output muted of (get volume settings)'
Set mute state - Where 'true' can be 'true' or 'false'
$ osascript -e 'set volume output muted true'

Using osascript module in Python

If you have Python3 installed and Xcode you can install the osascript module like so:

Install Xcode
$ xcode-select --install
Install virtualenv
$ pip3 install virtualenv
Create a Virtualenv project, and activate it
$ virtualenv venv
$ . venv/bin/activate
Now within this custom Virtualenv environment, install Python module
$ pip3 install osascript
Collecting osascript
Collecting public (from osascript)
Collecting runcmd (from osascript)
Requirement already satisfied: setuptools in ./venv/lib/python3.7/site-packages (from osascript) (41.0.1)
Collecting temp (from osascript)
Collecting psutil (from runcmd->osascript)
Installing collected packages: public, psutil, runcmd, temp, osascript
Successfully installed osascript-2019.4.13 psutil-5.6.1 public-2019.4.13 runcmd-2019.4.13 temp-2019.4.13
Here's an example Python program that will set the volume to 100
$ cat vol.py
#!/usr/bin/env python3

import osascript

osascript.run("set volume output volume 100")
code, out, err = osascript.run("output volume of (get volume settings)")
print(out)
Running this will set to 100 and then display the volume's level
$ ./vol.py
100

References

  • How to change volume with Python?
  • Pipenv & Virtual Environments
  • Why am I getting an “invalid active developer path” when attempting to use Git after upgrading to macOS Catalina?
  • Set/get OSX volume/mute from the command line
  • PyPi - osascript