File: [local] / mp3 / bin / mixer.pl (download)
Revision 1.4, Tue Jun 14 17:04:58 2011 UTC (13 years ago) by andrew
Branch: MAIN
Changes since 1.3: +79 -85 lines
Pause support
|
#!/usr/bin/perl -Tw
# $AFresh1: mixer.pl,v 1.4 2011/06/14 17:04:58 andrew Exp $
########################################################################
# Mixer.pl *** Changes volume on the MP3 player
#
# 10/11/2002 4:26PM
# Written by andrew fresh <andrew@mad-techies.org>
########################################################################
use strict;
use warnings;
my $mixerctl = '/usr/bin/mixerctl';
my $me = MyName();
delete $ENV{PATH} if exists $ENV{PATH};
my $paused_file = '/var/www/mp3/playlist/paused';
my @Vols = (
7,
15,
23,
31,
39,
47,
55,
63,
71,
79,
87,
95,
103,
111,
119,
127,
135,
143,
151,
159,
167,
175,
183,
191,
199,
207,
215,
223,
231,
239,
247,
255,
);
my $Cur_Vol = `$mixerctl outputs.master`;
#»print "Cur_Vol $Cur_Vol<BR>\n";
$Cur_Vol =~ /outputs.master=(\d+),(\d+)/i;
$Cur_Vol = ($1 + $2) / 2;
my $pause_action = 'pause';
if (-e $paused_file) {
$pause_action = 'play';
}
print "Content-Type: text/html\n\n";
print "<html>\n<head>\n\t<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> ";
my ($prefix, $action) = split /\&/, $ENV{'QUERY_STRING'};
$prefix ||= '';
if ($action) {
$prefix =~ s/%(..)/pack("c",hex($1))/ge if $prefix;
$action =~ s/%(..)/pack("c",hex($1))/ge;
print "<meta HTTP-EQUIV=Refresh CONTENT=\"1; URL=mixer.pl?" . EncodeURL($prefix) . "\">";
if ($action eq 'pause') { $pause_action = Pause($pause_action) }
elsif ($action =~ /^(\d+)$/) { $Cur_Vol = Set_Vol($Cur_Vol, $1); }
}
print <<EOL;
<style type="text/css" media="screen">
<!--
a.down:link { color: red; text-decoration: none; }
a.down:visited { color: red; text-decoration: none; }
a.down:hover { color: red; text-decoration: none; }
a.down:active { color: red; text-decoration: none; }
a.up:link { color: blue; text-decoration: none; }
a.up:visited { color: blue; text-decoration: none; }
a.up:hover { color: blue; text-decoration: none; }
a.up:active { color: blue; text-decoration: none; }
-->
</style>
EOL
print "<title>Volume Mixer</title></head>\n<body>\n\n";
Print_Nav();
unless ($prefix) {
my @nav;
push @nav, "<B><A HREF='$me?" . EncodeURL($prefix) . '&'
. "pause' class='pause'>$pause_action</A></B>\n";
push @nav, " - Volume: ";
foreach my $vol (@Vols) {
my ($char, $class) = ($vol, 'up');
if ($vol > $Cur_Vol) { ($char, $class) = ('}', 'up'); }
elsif ($vol < $Cur_Vol) { ($char, $class) = (']', 'down'); }
push @nav, "<B><A HREF='$me?" . EncodeURL($prefix) . '&'
. "$vol' class='$class'>$char</A></B>\n";
}
print join " ", @nav;
#print "<br>\n";
}
print "</body>\n</head>\n</html>\n";
sub Set_Vol
{
my ($old, $new) = @_;
my $Set_Vol;
foreach my $vol ($old < $new ? $old..$new : reverse $new..$old) {
$Set_Vol = `$mixerctl -w outputs.master=$vol,$vol`;
}
return $new;
}
sub Pause {
my ($action) = @_;
if ($action eq 'play') {
unlink $paused_file;
return 'pause';
}
else {
open my $fh, '>', $paused_file or die;
print $fh time;
close $fh;
return 'play';
}
}
########################################################################
# *** EncodeURL: %encodes the parameters of the URL
sub EncodeURL {
my $strURL = shift || '';
$strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg;
return $strURL;
}
#########################################################################
# My name
sub MyName {
my @filename = (split /\//, $0);
pop @filename;
}
#######################################################################
# Bail: this subrouting dies and displays the error to the browser.
# gotten from the example in the O'Reilly
# _Learning_Perl_on_Win32_Systems_
sub bail {
my $error = shift;
print "\n\nUnexpected Error: <b>$error</b><br>\n";
print "In " . __FILE__ . "\n";
die;
exit;
}
sub Print_Nav
{
open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!";
while (<FILE>) {
s/%PREFIX%/$prefix/g;
print;
}
close FILE;
}