control volume using python script

I can control volume using this command through terminal amixer -D pulse sset Master 0% . My question that how can I do the same thing using python script.


You can use call from the subprocess module:

from subprocess import call
call(["amixer", "-D", "pulse", "sset", "Master", "0%"])

Source

Of course, you can use the normal python code with it:

valid = False

while not valid:
    volume = input('What volume? > ')

    try:
        volume = int(volume)

        if (volume <= 100) and (volume >= 0):
            call(["amixer", "-D", "pulse", "sset", "Master", str(volume)+"%"])
            valid = True

    except ValueError:
        pass

This code will loop untill the user gives a valid input - between 0 and 100, and will then set the volume to that.

This will run in Python 3. Change the input to raw_input for Python 2.


To increase by 10% when the script is run you can do one of two things.

You can use the alsaaudio module.

First, install with

sudo apt-get install python-alsaaudio

and then import it:

import alsaaudio

we can get the volume:

>>> m = alsaaudio.Mixer()
>>> vol = m.getvolume()
>>> vol
[50L]

we can also set the volume:

>>> m.setvolume(20)
>>> vol = m.getvolume()
>>> vol
[20L]

This number is a long integer in a list. So to make it into a usable number, we can do int(vol[0]).

So to increase by 10% when it is run?

import alsaaudio
m = alsaaudio.Mixer()
vol = m.getvolume()
vol = int(vol[0])

newVol = vol + 10
m.setvolume(newVol)

Or we can stick with the subprocess module and default Ubuntu commands:

from subprocess import call
call(["amixer", "-D", "pulse", "sset", "Master", "10%+"])

will increase by 10%.

My pronouns are He / Him


For me, Tim's code didn't quite work. I had to do this:

import alsaaudio
m = alsaaudio.Mixer(alsaaudio.mixers[0]) # alsaaudio.mixers = ["PCM"] for me.
m.setvolume(90) # Or whatever

It may be due to my weird / broken .asoundrc config file. But given that there is no actual reference documentation for .asoundrc - just some random examples - I don't think you can blame me.

Also please don't call out to command line programs to do it. That is ugly and error-prone.