66 lines
1.8 KiB
Perl
Executable File
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 "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;
|
|
}
|
|
}
|