#!/usr/bin/perl use Time::HiRes qw(usleep); use DBI; use DBD::mysql; use Config::INI::Reader; sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s }; my $confcontents = Config::INI::Reader->read_file('/etc/homeaudio.ini'); my $Config = $confcontents->{_}; $dsn = "DBI:mysql:" . $Config->{DBNAME} . ":" . $Config->{DBHOST}; $dbh = DBI->connect($dsn, $Config->{DBUSER}, $Config->{DBPASS}, {RaiseError=>1}); if ( $ARGV[0] eq "-show" ) { $showmute = 1; } else { $showmute = 0; } $sound = `/usr/bin/amixer sget Master`; $mute = trim(`/usr/bin/amixer sget Master | grep "Front Left:" | awk '{print \$6}'`); $sth = $dbh->prepare("SELECT value FROM settings WHERE parameter='CURVOLUME'"); $sth->execute(); if ( $sth->rows > 0 ) { @result = $sth->fetchrow_array(); $curvol = $result[0]; } else { $curvol = 0; } $sth->finish(); $stepval = int($curvol * 0.1); @mixer = split(/\n/, $sound); #if ( index($mixer[@mixer-1], "[on]") > 0 ) { if ( $mute eq "[on]" ) { if ( $showmute ) { exit 0; } else { $newvol = 0; for ( $i=$curvol; $i>=0; $i-=$stepval ) { usleep(65*1000); if ( $i < 0 ) { $newvol = 0; } else { $newvol = $i; } system("/usr/bin/amixer -q sset Master $newvol"); } if ( $newvol != 0 ) { system("/usr/bin/amixer -q sset Master 0"); } system("/usr/bin/amixer -q sset Master mute"); exit 1; } } else { if ( $showmute ) { exit 1; } else { system("/usr/bin/amixer -q sset Master 0"); system("/usr/bin/amixer -q sset Master unmute"); $newvol = 0; for ( $i=$stepval; $i<=$curvol; $i+=$stepval ) { usleep(65*1000); $newvol = $i; system("/usr/bin/amixer -q sset Master $i"); } if ( $newvol != $curvol ) { system("/usr/bin/amixer -q sset Master $curvol"); } exit 0; } }