+++ /dev/null
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009, 2010 Efrim <efrim@azylum.org> {{{
-#
-# 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 3 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
-# MERCHANTABILITY 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, see <http://www.gnu.org/licenses/>.
-#
-# }}}
-
-"""
-DOC:
- heavily borrowed from perl script mpdtoys and converted to python.
- mpdtoys © 2007 Joey Hess <joey@kitenet.net>
- http://kitenet.net/~joey/code/mpdtoys
-"""
-
-import sys
-
-from time import sleep
-
-from lib.mpdclass import MPDClass
-from lib.startop import StartOpt
-
-NAME = 'mfade'
-VERSION = '0.1'
-USAGE = 'USAGE: %prog [--help] | [ <time> [<final volume level>] ]'
-DESC = """Fade in/out to <final volume level> over <time>. Defaults are from 0%
-to 50% when paused or stopped and from current volume to 10th of it if playing,
-both over 10 minutes."""
-
-
-class Sleep(StartOpt, MPDClass):
- """"""
- script_info = dict({
- 'version': VERSION,
- 'prog_name': NAME,
- 'description': DESC,
- 'usage': USAGE,
- })
-
- def __init__(self):#{{{
- """"""
- StartOpt.__init__(self, self.__class__.script_info, [])
- MPDClass.__init__(self)
- self.tempo = int(10)
- self.volum = None
- self._consume_args()
- self._run()#}}}
-
- def _consume_args(self):#{{{
- """"""
- if (len(self.cli_args) < 1 or
- len(self.cli_args) > 2):
- self.parser.error('need at least an argument and no more than two!')
- try:
- self.tempo = int(self.cli_args[0])
- self.volum = int(self.cli_args[1])
- except IndexError:
- pass
- except ValueError, err:
- self.parser.error('wrong option passed (%s)' % err)#}}}
-
- def _run(self):#{{{
- """"""
- self.mpdConnect()
- self.mpd_state = str(self.client.status().get('state'))
- self.mpd_vol = int(self.client.status().get('volume'))
- if self.mpd_state == 'play':
- if not self.volum:
- self.volum = self.mpd_vol / 10
- if self.volum > self.mpd_vol:
- self.parser.error('Error: specified min volume (%d%%) > to current volume (%d%%)' % (self.volum, self.mpd_vol))
- print >> sys.stdout, 'fading down from %d%% to %d%% over %smin' % (self.mpd_vol, self.volum, self.tempo)
- if self.fade():
- self.client.stop()
- if self.mpd_state in ['stop', 'pause']:
- if not self.volum:
- self.volum = int(50)
- print >> sys.stdout, 'fading up from 0%% to %d%% over %smin' % (self.volum, self.tempo)
- self.client.setvol(0)
- self.mpd_vol = 0
- self.client.play()
- self.fade()
- sleep(1)#}}}
-
- def fade(self):#{{{
- """"""
- # TODO: handle possible lost connections
- span = float(self.volum - self.mpd_vol)
- step = span / float(60 * self.tempo)
- vol = self.mpd_vol
- while 42:
- if int(vol) != int(self.client.status().get('volume')):
- sys.stderr.write('Warning: external volume change, aborting!\n')
- return False
- vol += step
- self.client.setvol(int(vol))
- if abs(vol - self.volum) < 1:
- self.client.setvol(self.volum)
- return True
- sleep(1)#}}}
-
-
-# Script starts here
-if __name__ == '__main__':
- try:
- Sleep()
- except KeyboardInterrupt:
- sys.stdout.write('exit')
-
-# VIM MODLINE
-# vim: ai ts=4 sw=4 sts=4 expandtab