control volume using python script

33,634

Solution 1

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

Solution 2

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.

Share:
33,634

Related videos on Youtube

tarun14110
Author by

tarun14110

Updated on September 18, 2022

Comments

  • tarun14110
    tarun14110 over 1 year

    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.

  • tarun14110
    tarun14110 over 8 years
    thanx, it worked . Can we do this by importing alsaaudio in python and execute this based on initial volume.
  • Tim
    Tim over 8 years
    @tarun14110 i.e. get the current volume and add an amount? Sure
  • tarun14110
    tarun14110 over 8 years
    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
    tarun14110 over 8 years
    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%+"
  • Tim
    Tim over 8 years
    @tarun14110 yes, or you can use the alsaaudio module, but that needs installing.
  • tarun14110
    tarun14110 over 8 years
    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 ?
  • Tim
    Tim over 8 years
    @tarun14110 I'm not sure, sorry. I guess an issue with hardware. You can always use the 5%+
  • Daniel Reyhanian
    Daniel Reyhanian over 5 years
    @tarun14110 for some reason I can't get to pyalsaaudio. I also don't know what is amixer. Any help?