On Tue, Jun 01, 2010 at 10:11:59PM +0200, pascal wrote:
Thanks for the wmiirc_local.py example. I used it as a base for mine. I'm having some troubles to figure out the "mixer" plugin. I thought I would try to write an equivalent myself before asking, but I can't, I'm getting headaches. Would you mind posting yours?
Sure, if you really want it. The alsamixer module isn't mine, though, and it'd buggy. The only reason I use it is that some programs change the PCM mixer value and you can't access it via OSD.
The Linux version is attached. -- Kris Maglione I'm confident that tomorrow's Unix will look like today's Unix, only cruftier. --Russ Cox
import fcntl from pyxp.fields import Int SOUND_MIXER_READ_DEVMASK = 0x80044DFE MIXER_READ = 0x80044D00 MIXER_WRITE = 0xC0044D00 mod = 0 mixers = ('vol', 'bass', 'treble', 'synth', 'pcm', 'speaker', 'line', 'mic', 'cd', 'mix', 'pcm2', 'rec', 'igain', 'ogain', 'line1', 'line2', 'line3', 'dig1', 'dig2', 'dig3', 'phin', 'phout', 'video', 'radio', 'monitor') mixerfd = open('/dev/mixer') res = fcntl.ioctl(mixerfd, SOUND_MIXER_READ_DEVMASK, ' ') mask = Int(4).decode(res, 0) def findmixer(name): for i, mixer in enumerate(mixers): if (1 << i) & mask and mixer == name: return i def getlevel(name): mixer = findmixer(name); res = fcntl.ioctl(mixerfd, MIXER_READ + mixer, ' ') return (ord(res[0]) + ord(res[1])) / 2 def setlevel(name, level): mixer = findmixer(name); fcntl.ioctl(mixerfd, MIXER_WRITE + mixer, chr(level & 0x7f) * 2 + '\0\0') # vim:se sts=4 sw=4 et: