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

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

Revision 1.5, Tue Jun 14 17:05:23 2011 UTC (12 years, 10 months ago) by andrew
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +62 -91 lines

perltidy

#!/usr/bin/perl -Tw
# $AFresh1: mixer.pl,v 1.5 2011/06/14 17:05:23 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;
}