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.
- 33,500
- 419
3 Answers
You can use call from the subprocess module:
from subprocess import call
call(["amixer", "-D", "pulse", "sset", "Master", "0%"])
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
- 33,500
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.
you can also use the os module:
import os
os.system('amixer -D pulse sset Master '+YourVolumeVariable+'%')
- 11