6

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.

9

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%.

  • thanx, it worked . Can we do this by importing alsaaudio in python and execute this based on initial volume. – tarun14110 Oct 24 '15 at 22:48
  • @tarun14110 i.e. get the current volume and add an amount? Sure – Tim Oct 24 '15 at 22:49
  • instead of asking from the user , can't I read the value of volume from my system itself ? Like whenever someone runs the script, the volume increases by 10%. – tarun14110 Oct 24 '15 at 22:55
  • okk, got it thanks for helping , we can increase volume by 10% from the current volume by using this coomand "amixer -D pulse sset Master 10%+" – tarun14110 Oct 24 '15 at 23:05
  • 1
    I have installed alsaaudio module , I have tried the thing you told about , but I am getting error "Unable to find mixer control 'Master',0 " How can I resolve that ? – tarun14110 Oct 24 '15 at 23:08
3

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.