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

Diff for /mp3/bin/mixer.pl between version 1.1 and 1.5

version 1.1, 2006/03/02 23:20:47 version 1.5, 2011/06/14 18:05:23
Line 1 
Line 1 
 #!/usr/bin/perl -Tw  #!/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  # Mixer.pl *** Changes volume on the MP3 player
 #  #
Line 6 
Line 7 
 # Written by andrew fresh <andrew@mad-techies.org>  # Written by andrew fresh <andrew@mad-techies.org>
 ########################################################################  ########################################################################
 use strict;  use strict;
 use diagnostics;  use warnings;
   
 my $mixerctl = '/usr/bin/mixerctl';  my $mixerctl = '/usr/bin/mixerctl';
   
Line 14 
Line 15 
   
 delete $ENV{PATH} if exists $ENV{PATH};  delete $ENV{PATH} if exists $ENV{PATH};
   
   my $paused_file = '/var/www/mp3/playlist/paused';
   
 my @Vols = (  my @Vols = (
             [  7,   7],      7,   15,  23,  31,  39,  47,  55,  63,  71,  79,  87,  95,
             [ 15,  15],      103, 111, 119, 127, 135, 143, 151, 159, 167, 175, 183, 191,
             [ 23,  23],      199, 207, 215, 223, 231, 239, 247, 255,
             [ 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],  
            );  
   
   
 my $Cur_Vol = `$mixerctl outputs.master`;  my $Cur_Vol = `$mixerctl outputs.master`;
   
 #»print "Cur_Vol $Cur_Vol<BR>\n";  #»print "Cur_Vol $Cur_Vol<BR>\n";
 $Cur_Vol =~ /outputs.master=(\d+),(\d+)/i;  $Cur_Vol =~ /outputs.master=(\d+),(\d+)/i;
 my $Cur_Vol_Left = $1;  $Cur_Vol = ( $1 + $2 ) / 2;
 my $Cur_Vol_Right = $2;  
   
   my $pause_action = 'pause';
   if ( -e $paused_file ) {
       $pause_action = 'play';
   }
 print "Content-Type: text/html\n\n";  print "Content-Type: text/html\n\n";
 print "<html>\n<head>\n\t<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> ";  print "<html>\n<head>\n\t<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> ";
   
 my $New_Vol = "$Cur_Vol_Left&$Cur_Vol_Right";  my ( $prefix, $action ) = split /\&/, $ENV{'QUERY_STRING'};
 if ($ENV{'QUERY_STRING'}) {  $prefix ||= '';
         print "<meta HTTP-EQUIV=Refresh CONTENT=\"1; URL=mixer.pl\">";  if ($action) {
         $New_Vol = $ENV{'QUERY_STRING'};      $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;  print <<EOL;
Line 87 
Line 71 
   
 Print_Nav();  Print_Nav();
   
 print "Volume - ";  unless ($prefix) {
   
       my @nav;
       push @nav,
             "<B><A HREF='$me?"
           . EncodeURL($prefix) . '&'
           . "pause' class='pause'>$pause_action</A></B>\n";
       push @nav, " - Volume: ";
   
 #»print "New_Vol $New_Vol<BR>\n";      foreach my $vol (@Vols) {
 $New_Vol =~ /(\d+)&(\d+)/;          my ( $char, $class ) = ( $vol, 'up' );
 my $New_Vol_Left = $1;  
 my $New_Vol_Right = $2;  
   
 my @nav;          if    ( $vol > $Cur_Vol ) { ( $char, $class ) = ( '}', 'up' ); }
 foreach my $vol (@Vols) {          elsif ( $vol < $Cur_Vol ) { ( $char, $class ) = ( ']', 'down' ); }
         if ($$vol[0] == $New_Vol_Left) {  
                 push @nav, "<B><A HREF='$me?$$vol[0]&$$vol[1]' class=up>$$vol[0]</A></B>\n";  
         } elsif ($$vol[0] < $New_Vol_Left) {  
                 push @nav, "<A HREF='$me?$$vol[0]&$$vol[1]' class=up>}</A>\n";  
         } elsif ($$vol[0] > $New_Vol_Left) {  
                 push @nav, "<A HREF='$me?$$vol[0]&$$vol[1]' class=down>]</A>\n";  
         }  
         #print "$vol - $$vol[0] - $$vol[1]<br>\n";  
 }  
 print join " ", @nav;  
 #print "<br>\n";  
   
 Set_Vol($Cur_Vol_Left, $Cur_Vol_Right, $New_Vol_Left, $New_Vol_Right);          push @nav,
                 "<B><A HREF='$me?"
               . EncodeURL($prefix) . '&'
               . "$vol' class='$class'>$char</A></B>\n";
   
 print "</body>\n</head>\n</html>\n";      }
       print join " ", @nav;
   
       #print "<br>\n";
   }
   
   print "</body>\n</head>\n</html>\n";
   
 sub Set_Vol  sub Set_Vol {
 {      my ( $old, $new ) = @_;
         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;  
         }  
   
         #»print "Old: $old_vol - New: $new_vol<br>\n";      my $Set_Vol;
       foreach my $vol ( $old < $new ? $old .. $new : reverse $new .. $old ) {
         my $Set_Vol;          $Set_Vol = `$mixerctl -w outputs.master=$vol,$vol`;
       }
         foreach my $vol ($old_vol < $new_vol ? $old_vol..$new_vol : reverse $new_vol..$old_vol) {      return $new;
                 #»print "$vol<br>\n";  
                 $Set_Vol = `$mixerctl -w outputs.master=$vol,$vol`;  
                 #»print $Set_Vol . "<br>\n";  
         }  
         return $Set_Vol;  
 }  }
   
   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  # *** EncodeURL: %encodes the parameters of the URL
 sub EncodeURL {  sub EncodeURL {
         my $strURL = shift;      my $strURL = shift || '';
         $strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg;      $strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg;
         return $strURL;      return $strURL;
 }  }
   
 #########################################################################  #########################################################################
 # My name  # My name
 sub MyName {  sub MyName {
         my @filename = (split /\//, $0);      my @filename = ( split /\//, $0 );
         pop @filename;      pop @filename;
 }  }
   
   
 #######################################################################  #######################################################################
 # Bail: this subrouting dies and displays the error to the browser.  # 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_  # _Learning_Perl_on_Win32_Systems_
 sub bail {  sub bail {
         my $error = shift;      my $error = shift;
         print "\n\nUnexpected Error: <b>$error</b><br>\n";      print "\n\nUnexpected Error: <b>$error</b><br>\n";
         print "In " . __FILE__ . "\n";      print "In " . __FILE__ . "\n";
         die;      die;
         exit;      exit;
 }  }
 sub Print_Nav  
 {  sub Print_Nav {
         open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!";      open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!";
         while (<FILE>) {      while (<FILE>) {
                 print;          s/%PREFIX%/$prefix/g;
         }          print;
         close FILE;      }
       close FILE;
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>