[BACK]Return to mixer.pl CVS log [TXT][DIR] Up to [local] / mp3 / bin

File: [local] / mp3 / bin / mixer.pl (download)

Revision 1.4, Tue Jun 14 17:04:58 2011 UTC (12 years, 11 months 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;
}