HomeAudio/scripts/homeaudio_togglemute.pl

66 lines
1.8 KiB
Perl
Executable File

#!/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 "Mono:" | 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;
}
}