Listen for changes in variable (alsaaudio.Mixer(x,x).getvolume(x)

M

Muffinman

Hello all,

I'm new to Python (running 2.6.6 but if necessary 3.x should also be
fine). I have a little idea I hope to accomplish with Python. I want to
listen for changes in Alsa sound volume level and base some actions on
that. With the few lines below I can check the current volume level. Can
I extend this so that the script listens for changes in the volume level
and I can base some actions on it? As speed is quite important it's not
an option to poll every second or so for changes, it has to be close to
instantaneous.

If this is not possible with Python, any suggestions on what else are
also welcome of course.

Thanks in advance, Maarten


#############
try
mixer = alsaaudio.Mixer(Fake, 0)
except alsaaudio.ALSAAudioError:
sys.stderr.write("No such mixer\n")
sys.exit(1)

volumes = mixer.getvolume(1)
#############
 
S

Steven D'Aprano

Hello all,

I'm new to Python (running 2.6.6 but if necessary 3.x should also be
fine). I have a little idea I hope to accomplish with Python. I want to
listen for changes in Alsa sound volume level and base some actions on
that. With the few lines below I can check the current volume level. Can
I extend this so that the script listens for changes in the volume level
and I can base some actions on it? As speed is quite important it's not
an option to poll every second or so for changes, it has to be close to
instantaneous.

Then poll every millisecond or so.

I don't believe it is possible to listen for changes in an arbitrary
variable. But if you check the alsaaudio module, or ask on a dedicated
alsa mailing list, you may be able to find out how alsa records the
volume in the first place. If it is written to a file, you can listen for
changes to the file without polling on Linux systems.
If this is not possible with Python, any suggestions on what else are
also welcome of course.

That's not a Python question, it's an Alsa question. Who knows how the
sound volume is stored?
 
D

David Hutto

Hello all,

I'm new to Python (running 2.6.6 but if necessary 3.x should also be
fine). I have a little idea I hope to accomplish with Python. I want to
listen for changes in Alsa sound volume level and base some actions on
that.

With the few lines below I can check the current volume level. Can
I extend this so that the script listens for changes in the volume level
and I can base some actions on it? As speed is quite important it's not
an option to poll every second or so for changes, it has to be close to
instantaneous.

If this is not possible with Python, any suggestions on what else are
also welcome of course.

Thanks in advance, Maarten


#############
try
mixer = alsaaudio.Mixer(Fake, 0)
except alsaaudio.ALSAAudioError:
sys.stderr.write("No such mixer\n")
sys.exit(1)

volumes = mixer.getvolume(1)
#############


first look at the docs for command line functions that utilize the
command line for access to certain CL apps.

Once you've found a way to access the CL apps with python(I use
subprocess.call usually, I think, but there's popen, etc.) then use
man alsamixer, or man aplayer, or man arecorder. in the shell on your
linux distro.

Then throw in a little tkinter, or a windowing system of your choice,
and distort the changes with command line calls.
 
D

David Hutto

Hello all,

I'm new to Python (running 2.6.6 but if necessary 3.x should also be
fine). I have a little idea I hope to accomplish with Python. I want to
listen for changes in Alsa sound volume level and base some actions on
that. With the few lines below I can check the current volume level. Can
I extend this so that the script listens for changes in the volume level
and I can base some actions on it? As speed is quite important it's not
an option to poll every second or so for changes, it has to be close to
instantaneous.

You might have to go to c++(ctypes function call), like I'm going to
have to for a oscilloscope(using arecord probably, or other options),
and use in line assembly to push straight from/to the register.

I haven't had a good look at python's IO module yet though.

Best Regards,
David Hutto
CEO: http://www.hitwebdevelopment.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top