=================================================================== RCS file: /cvs/mp3/bin/mixer.pl,v retrieving revision 1.1 retrieving revision 1.5 diff -u -r1.1 -r1.5 --- mp3/bin/mixer.pl 2006/03/02 23:20:47 1.1 +++ mp3/bin/mixer.pl 2011/06/14 18:05:23 1.5 @@ -1,4 +1,5 @@ #!/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 # @@ -6,7 +7,7 @@ # Written by andrew fresh ######################################################################## use strict; -use diagnostics; +use warnings; my $mixerctl = '/usr/bin/mixerctl'; @@ -14,56 +15,39 @@ delete $ENV{PATH} if exists $ENV{PATH}; +my $paused_file = '/var/www/mp3/playlist/paused'; my @Vols = ( - [ 7, 7], - [ 15, 15], - [ 23, 23], - [ 31, 31], - [ 39, 39], - [ 47, 47], - [ 55, 55], - [ 63, 63], - [ 71, 71], - [ 79, 79], - [ 87, 87], - [ 95, 95], - [103, 103], - [111, 111], - [119, 119], - [127, 127], - [135, 135], - [143, 143], - [151, 151], - [159, 159], - [167, 167], - [175, 175], - [183, 183], - [191, 191], - [199, 199], - [207, 207], - [215, 215], - [223, 223], - [231, 231], - [239, 239], - [247, 247], - [255, 255], - ); + 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
\n"; $Cur_Vol =~ /outputs.master=(\d+),(\d+)/i; -my $Cur_Vol_Left = $1; -my $Cur_Vol_Right = $2; +$Cur_Vol = ( $1 + $2 ) / 2; +my $pause_action = 'pause'; +if ( -e $paused_file ) { + $pause_action = 'play'; +} print "Content-Type: text/html\n\n"; print "\n\n\t "; -my $New_Vol = "$Cur_Vol_Left&$Cur_Vol_Right"; -if ($ENV{'QUERY_STRING'}) { - print ""; - $New_Vol = $ENV{'QUERY_STRING'}; +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 ""; + + if ( $action eq 'pause' ) { $pause_action = Pause($pause_action) } + elsif ( $action =~ /^(\d+)$/ ) { $Cur_Vol = Set_Vol( $Cur_Vol, $1 ); } + } print <$pause_action\n"; + push @nav, " - Volume: "; -#»print "New_Vol $New_Vol
\n"; -$New_Vol =~ /(\d+)&(\d+)/; -my $New_Vol_Left = $1; -my $New_Vol_Right = $2; + foreach my $vol (@Vols) { + my ( $char, $class ) = ( $vol, 'up' ); -my @nav; -foreach my $vol (@Vols) { - if ($$vol[0] == $New_Vol_Left) { - push @nav, "$$vol[0]\n"; - } elsif ($$vol[0] < $New_Vol_Left) { - push @nav, "}\n"; - } elsif ($$vol[0] > $New_Vol_Left) { - push @nav, "]\n"; - } - #print "$vol - $$vol[0] - $$vol[1]
\n"; -} -print join " ", @nav; -#print "
\n"; + if ( $vol > $Cur_Vol ) { ( $char, $class ) = ( '}', 'up' ); } + elsif ( $vol < $Cur_Vol ) { ( $char, $class ) = ( ']', 'down' ); } -Set_Vol($Cur_Vol_Left, $Cur_Vol_Right, $New_Vol_Left, $New_Vol_Right); + push @nav, + "$char\n"; -print "\n\n\n"; + } + print join " ", @nav; + #print "
\n"; +} +print "\n\n\n"; -sub Set_Vol -{ - my $old_vol_right = shift; - my $old_vol_left = shift; - my $new_vol_left = shift; - my $new_vol_right = shift; - - my $old_vol; - my $new_vol; - if (($old_vol_left + $old_vol_right) > ($new_vol_left + $new_vol_right)) { - $old_vol = $old_vol_left > $old_vol_right ? $old_vol_left : $old_vol_right; - $new_vol = $new_vol_left < $new_vol_right ? $new_vol_left : $new_vol_right; - } else { - $old_vol = $old_vol_left < $old_vol_right ? $old_vol_left : $old_vol_right; - $new_vol = $new_vol_left > $new_vol_right ? $new_vol_left : $new_vol_right; - } +sub Set_Vol { + my ( $old, $new ) = @_; - #»print "Old: $old_vol - New: $new_vol
\n"; - - my $Set_Vol; - - foreach my $vol ($old_vol < $new_vol ? $old_vol..$new_vol : reverse $new_vol..$old_vol) { - #»print "$vol
\n"; - $Set_Vol = `$mixerctl -w outputs.master=$vol,$vol`; - #»print $Set_Vol . "
\n"; - } - return $Set_Vol; + 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 $strURL = shift || ''; + $strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg; + return $strURL; } ######################################################################### # My name sub MyName { - my @filename = (split /\//, $0); - pop @filename; + 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 +# gotten from the example in the O'Reilly # _Learning_Perl_on_Win32_Systems_ -sub bail { - my $error = shift; - print "\n\nUnexpected Error: $error
\n"; - print "In " . __FILE__ . "\n"; - die; - exit; +sub bail { + my $error = shift; + print "\n\nUnexpected Error: $error
\n"; + print "In " . __FILE__ . "\n"; + die; + exit; } -sub Print_Nav -{ - open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!"; - while () { - print; - } - close FILE; + +sub Print_Nav { + open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!"; + while () { + s/%PREFIX%/$prefix/g; + print; + } + close FILE; }