source: remctl/lib/gutenbach/volume-helper.py @ e01a3af

debianmacno-cups
Last change on this file since e01a3af was e01a3af, checked in by Mats Ahlgren <mats@…>, 14 years ago

the alsa volume number is soundcard-dependent, and may not be linear;
nevertheless, volume adjust now steps in smaller (yet still noticeable)
ramps of roughly +/-3dB as replicated on current hardware; this may
vary between hardware (check with 'volume-get'); if it does, one can
just grab the dB and ramp the dB linearly by going amixer set PCM XdB
where X is an *absolute* setting

  • Property mode set to 100755
File size: 1.1 KB
Line 
1#!/usr/bin/python
2
3from __future__ import division
4from subprocess import *
5import sys
6import math
7import time
8import os
9j = os.path.join
10
11arg = sys.argv[1]
12currentDir = os.path.split(__file__)[0]
13#sys.path[:0] = [currentDir]
14
15def getVolume():
16        """
17                Returns current PCM volume percentage as int
18        """
19        v = int(Popen(j(currentDir,'volume-get'), stdout=PIPE).communicate()[0].split()[0])
20        return v
21
22def setVolume(percent):
23        """
24                Over the course of 3 seconds, in steps of 0.3sec, linearly sets
25                volume between [current vol]-->[new vol]
26        """
27        v = getVolume()
28        newV = percent
29        for i in range(10):
30                frac = i/10
31                tempV = int(v + (newV-v)*frac)
32                command = ['amixer', 'set', 'PCM', str(tempV)]
33                print tempV
34                sys.stdout.flush()
35                call(command, stdout=PIPE)
36                time.sleep(0.3)
37
38v = getVolume()
39map = {
40        '+': int(math.ceil( v*1.13 + .001 )),
41        '-': int(math.floor( v/1.13 + .001 ))
42}
43
44newVolume = map[arg]
45print 'Smoothly modifying over 3 seconds... (from %i)' % v
46sys.stdout.flush()
47setVolume(newVolume)
48print 'Volume adjust finished.'
49call([j(currentDir,'volume-zephyr')])
Note: See TracBrowser for help on using the repository browser.