Since I'm now reasonably sure the remote control key mappings didn't adversely
affect the GUI as a whole, I'm happy to send up the first generation of
sixmixer.py. (To be renamed later.)
Four additional configuration variables need to be added to local_conf.py:
DEFAULT_PCM_VOL
DEAFULT_SUR_VOL
DEFAULT_CTR_VOL
DEFAULT_LFE_VOL
I recommend these be set flat first and adjusted to suit your preferences.
Michael
---------------------------------
It's here! Your new message!
Get new email alerts with the free Yahoo! Toolbar.
# -*- coding: iso-8859-1 -*-
# -----------------------------------------------------------------------
# sixmixer.py - A 6-channel volume control interface for freevo.
# -----------------------------------------------------------------------
# $Id: sixmixer.py 2007-01-14 01:15:00Z mlbeal $
#
# Description:
# Six-channel audio control for the Freevo Media Center Environment
#
# This program, as a drop in replacement for the original Freevo mixer,
# provides complete control of all six audio channels, more correctly;
# 4 zones of 2 channels each except for the Center and Bass channels
# which are controlled independently.
#
# Notes:
# By default, sixmixer controls all audio system wide via the ALSA mixer
# program: amixer. I chose amixer due to it's wide ranging use within
# the Linux community. Practically ALL modern Linux distros have some
# method of handling ALSA device access either through OSS => ALSA
# wrappers or the ALSA system itself.
#
# Todo:
#
# -----------------------------------------------------------------------
# Freevo - A Home Theater PC framework
# Copyright (C) 2002 Krister Lagerstrom, et al.
# Please see the file freevo/Docs/CREDITS for a complete list of authors.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MER-
# CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# -----------------------------------------------------------------------
"""For manipulating the mixer.
"""
import os
import config
import rc
import plugin
from event import *
class PluginInterface(plugin.DaemonPlugin):
def __init__(self):
self.muted = 0
# init here
plugin.DaemonPlugin.__init__(self)
self.plugin_name = 'MIXER'
self.mainVolume = 0
self.pcmVolume = 0
self.surVolume = 0
self.ctrVolume = 0
self.lfeVolume = 0
self.NoAdjust = 0
self.setMainVolume(config.MAX_VOLUME)
self.setPcmVolume(config.DEFAULT_PCM_VOLUME)
self.setSurVolume(config.DEFAULT_SUR_VOLUME)
self.setCtrVolume(config.DEFAULT_CTR_VOLUME)
self.setLfeVolume(config.DEFAULT_LFE_VOLUME)
def eventhandler(self, event = None, menuw=None, arg=None):
"""
eventhandler to handle the VOL events
"""
if event == MIXER_VOLUP:
if self.NoAdjust >= 0:
self.incPcmVolume(event.arg)
self.incSurVolume(event.arg)
self.incCtrVolume(event.arg)
self.incLfeVolume(event.arg)
if self.NoAdjust > 0:
self.NoAdjust = 0
rc.post_event(Event(OSD_MESSAGE, arg=_('Volume: %s%%') % self.getPcmVolume()))
return True
elif event == MIXER_VOLDOWN:
if self.NoAdjust <= 0:
self.decPcmVolume(event.arg)
self.decSurVolume(event.arg)
self.decCtrVolume(event.arg)
self.decLfeVolume(event.arg)
if self.NoAdjust < 0:
self.NoAdjust = 0
rc.post_event(Event(OSD_MESSAGE, arg=_('Volume: %s%%') % self.getPcmVolume()))
return True
elif event == SUR_VOLUP:
self.incSurVolume(event.arg)
rc.post_event(Event(OSD_MESSAGE, arg=_('Surround: %s%%') % self.getSurVolume()))
return True
elif event == SUR_VOLDOWN:
self.decSurVolume(event.arg)
rc.post_event(Event(OSD_MESSAGE, arg=_('Surround: %s%%') % self.getSurVolume()))
return True
elif event == CTR_VOLUP:
self.incCtrVolume(event.arg)
rc.post_event(Event(OSD_MESSAGE, arg=_('Center: %s%%') % self.getCtrVolume()))
return True
elif event == CTR_VOLDOWN:
self.decCtrVolume(event.arg)
rc.post_event(Event(OSD_MESSAGE, arg=_('Center: %s%%') % self.getCtrVolume()))
return True
elif event == LFE_VOLUP:
self.incLfeVolume(event.arg)
rc.post_event(Event(OSD_MESSAGE, arg=_('LFE: %s%%') % self.getLfeVolume()))
return True
elif event == LFE_VOLDOWN:
self.decLfeVolume(event.arg)
rc.post_event(Event(OSD_MESSAGE, arg=_('LFE: %s%%') % self.getLfeVolume()))
return True
elif event == MIXER_MUTE:
if self.getMuted() == 1:
rc.post_event(Event(OSD_MESSAGE, arg=_('Volume: %s%%') % self.getVolume()))
self.setMuted(0)
else:
rc.post_event(Event(OSD_MESSAGE, arg=_('Mute')))
self.setMuted(1)
return True
return False
def _setVolume(self, ctrl_name, volume, mute):
if volume < 0:
volume = 0
if volume > 100:
volume = 100
vol = str(volume)+"%"
os.system('amixer -q -c 0 sset %s %s %s' % (ctrl_name, vol, mute))
def getMuted(self):
return(self.muted)
def setMuted(self, mute):
self.muted = mute
if mute == 1:
self._setVolume('PCM', 0, 'mute')
self._setVolume('Surround', 0, 'mute')
self._setVolume('Center', 0, 'mute')
self._setVolume('LFE', 0, 'mute')
else:
self._setVolume('PCM', self.pcmVolume, 'unmute')
self._setVolume('Surround', self.surVolume, 'unmute')
self._setVolume('Center', self.ctrVolume, 'unmute')
self._setVolume('LFE', self.lfeVolume, 'unmute')
def getVolume(self):
return self.pcmVolume
def getMainVolume(self):
return(self.mainVolume)
def setMainVolume(self, volume):
self.mainVolume = volume
self._setVolume('Master', self.mainVolume, 'unmute')
def incMainVolume(self, step=5):
self.mainVolume += step
if self.mainVolume >= 100:
self.mainVolume = 100
self.NoAdjust = -1
self._setVolume('Master', self.mainVolume, 'unmute')
def decMainVolume(self, step=5):
self.mainVolume -= step
if self.mainVolume <= 0:
self.mainVolume = 0
self.NoAdjust = 1
self._setVolume('Master', self.mainVolume, 'unmute')
def getPcmVolume(self):
return self.pcmVolume
def setPcmVolume(self, volume):
self.pcmVolume = volume
self._setVolume('PCM', self.pcmVolume, 'unmute')
def incPcmVolume(self, step=5):
self.pcmVolume += step
if self.pcmVolume >= 100:
self.pcmVolume = 100
self.NoAdjust = -1
self._setVolume('PCM', self.pcmVolume, 'unmute')
def decPcmVolume(self, step=5):
self.pcmVolume -= step
if self.pcmVolume <= 0:
self.pcmVolume = 0
self.NoAdjust = 1
self._setVolume('PCM', self.pcmVolume, 'unmute')
def getSurVolume(self):
return self.surVolume
def setSurVolume(self, volume):
self.surVolume = volume
self._setVolume('Surround', self.surVolume, 'unmute')
def incSurVolume(self, step=5):
self.surVolume += step
if self.surVolume >= 100:
self.surVolume = 100
self.NoAdjust = -1
self._setVolume('Surround', self.surVolume, 'unmute')
def decSurVolume(self, step=5):
self.surVolume -= step
if self.surVolume <= 0:
self.surVolume = 0
self.NoAdjust = 1
self._setVolume('Surround', self.surVolume, 'unmute')
def getLfeVolume(self):
return self.lfeVolume
def setLfeVolume(self, volume):
self.lfeVolume = volume
self._setVolume('LFE', self.lfeVolume, 'unmute')
def incLfeVolume(self, step=5):
self.lfeVolume += step
if self.lfeVolume >= 100:
self.lfeVolume = 100
self.NoAdjust = -1
self._setVolume('LFE', self.lfeVolume, 'unmute')
def decLfeVolume(self, step=5):
self.lfeVolume -= step
if self.lfeVolume <= 0:
self.lfeVolume = 0
self.NoAdjust = 1
self._setVolume('LFE', self.lfeVolume, 'unmute')
def getCtrVolume(self):
return self.ctrVolume
def setCtrVolume(self, volume):
self.ctrVolume = volume
self._setVolume('Center', self.ctrVolume, 'unmute')
def incCtrVolume(self, step=5):
self.ctrVolume += step
if self.ctrVolume >= 100:
self.ctrVolume = 100
self.NoAdjust = -1
self._setVolume('Center', self.ctrVolume, 'unmute')
def decCtrVolume(self, step=5):
self.ctrVolume -= step
if self.ctrVolume <= 0:
self.ctrVolume = 0
self.NoAdjust = 1
self._setVolume('Center', self.ctrVolume, 'unmute')
def reset(self):
self.setMainVolume(config.MAX_VOLUME)
self.setPcmVolume(config.DEFAULT_PCM_VOLUME)
self.setSurVolume(config.DEFAULT_SUR_VOLUME)
self.setCtrVolume(config.DEFAULT_CTR_VOLUME)
self.setLfeVolume(config.DEFAULT_LFE_VOLUME)
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-devel mailing list
Freevo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freevo-devel