#!/usr/bin/perl
echo "half baked hack by jhs - incomplete"
exit

# cd2mp3 - MP3 manipulation utility - JAH 21/01/01
# Uses LAME and Dagrab 
# This program can be freely distributed, modified, sold etc.. as 
# long as this banner message and links to my website are retained. 

###CONTRIBUTIONS###
###################

# Contribution by Derek Harper based on Ver 0.8
# Amendments to version 0.8 :
#    Fixed option 5 (Quit)
#    Fixed wildcard filename input for lame in entire CD option
#    Entire CD option now deletes wav files progressively, using less disk space

###################

# Default values

$default_sample_rate = "128";
$default_cdrom = "/dev/cd0";

$uuu = "/usr/home/jhs/sound" ;
# $uuu = "`cd;pwd`" ;
# $uuu = `cd /tmp ;/bin/pwd`;
# $uuu != `cd /tmp ;/bin/pwd`;
$default_out_file = "$uuu/out/sound.mp3" ;

# Print welcome screen

print "+==================================+\n";
print "|       cd2mp3 - Ver 0.82 + jhs    |\n";
print "| http://www.blackh0le.net/cd2mp3/ |\n";
print "+==================================+\n";

sub check {
     if ($presamp =~ /\b56\b/) {
         $finalsamp = "56";
        }
     elsif ($presamp =~ /\b128\b/) {
         $finalsamp = "128";
        }
     elsif ($presamp =~ /\b256\b/) {
         $finalsamp = "256";
        }
     else {
         $finalsamp = $default_sample_rate;
       }
}
      
# This function makes sure the info passed to LAME is correct

sub sytx_correct {
            if ($track <= 9) {
             $fileprfx = "track0";
             }
            else {
             $fileprfx = "track";
            }
}

# Function to run dagrab and LAME, and clean up any temp files

# Original uses dagrab
# grabtrack="dagrab -v -d $drive" ; grabtrack2="-a -f $dest/track\%02d.wav";
grabtrack="cdda2wav -t"; grabtrack2="";		# jhs@ uses cdda2wav

sub encode {
           print "\nCalling: $grabtrack $track\n";
           system ("$grabtrack $track");
           print "\n$fileprfx$track Ripped!! Encoding to MP3..\n";
	   print "\nXXXXXXXX";
	   system ("pwd");
	   system ("ls -l");
	   print "\nXXXXXXXX";
           print "\nCalling: $grabtrack $track\n";
           system ("$grabtrack $track");
	   system ("ls -l");
	   print "\nXXXXXXXX";
           system ("lame -b $finalsamp $fileprfx$track.wav $outputmp3"); 
           system ("rm $fileprfx$track.wav");
           print "\nMP3 written as $outputmp3.\n\n"; 
}

# Function to ask for sample rate

sub ask_sample_rate {
   print "Enter Sampling rate. ";
   print "Default is $default_sample_rate\K \(Values are 56, 128 or 256\): ";
   print STDIN " ";
   $presamp = <STDIN>;
   check();
   print "\n Using a bitrate of $finalsamp\K \n";
}

# Function to ask for mp3 output file name

sub ask_output_mp3 {
   print "\nEnter output directory + file name ";
   print "\(eg $default_out_file \): ";
   print STDIN " ";
   chop($outputmp3 = <STDIN>);
   if ($outputmp3 eq "") {
	
      $outputmp3 = $default_out_file;
      # print "\n Defaulting to output file: $default_out_file\n";
   }
   print "\n MP3 Will be stored in $outputmp3\n\n";
}

# Function to ask for location of CD-ROM drive

sub ask_cdrom_drive {
   print "Enter your CD-ROM Drive? Default $default_cdrom : ";
   print STDIN " ";
   chop($drive = <STDIN>);
   if ($drive eq "") {
      $drive = $default_cdrom;
   }
   print "\n Using $drive\n";
}

# Encode single track

sub encode_track {
   # Sampling rate input and checking
   ask_sample_rate();
   # output file
   ask_output_mp3();
   # ask for cdrom
   ask_cdrom_drive();
   # get track number
   print "\nEnter track number you want to encode ";
   print "\(Use Track Number eg 5 For Track5\): ";
   print STDIN " ";
   chop($track = <STDIN>);
   sytx_correct();
   print "\n Now Ripping $fileprfx$track!\n\n";
   # Execute the encoding routine
   encode();
   exit;
}

# Entire disk routine

sub entire {
           ask_cdrom_drive();
           ask_sample_rate();
           print "\nOutput directory for mp3's \(eg: $uuu/mp3\): ";
           print STDIN " ";
  	   chop($dest = <STDIN>);
           print "\nOK, encoding entire CD, output to $dest\n\n";
	   system("$grabtrack $grabtrack2 -a -f $dest/track\%02d.wav");
	   # system("$grabtrack $grabtrack2 -a -f $dest/track\%02d.wav");
	   while($lame_input_wav = <$dest/*.wav>) {
	      system("lame -b $finalsamp $lame_input_wav");
	      qx{rm $lame_input_wav};
	   }
           print "\nCD encoded in $dest.\n\n";
           exit;
}	
           
# .WAV file routine

sub wav {
        ask_cdrom_drive();
        print "\nOutput .WAV file to \(eg: $uuu/mytrack.wav\): ";
        print STDIN " ";
        chop($wavout = <STDIN>);
        print "\n OK, output file will be $wavout\n";
        print "\nEnter track you want to rip ";
	print "\(Use Track Number eg 5 For Track5\): ";
        print STDIN " ";
        chop($wavrip = <STDIN>);
        print "\n Ripping Track $wavrip ! \n\n";
        system("dagrab -d $drive -v -f $wavout $wavrip");
        print "\n Track $wavrip Ripped !\n\n";
        exit;
} 

# .WAV to MP3

sub w2m { 
           print "\n";
           ask_sample_rate();
           print "\nEnter full path to .WAV file to encode ";
	   print "\(eg $uuu/mysong.wav\): ";
           print STDIN " ";
           chop($wavpath = <STDIN>);
           print "\nEnter destination for MP3 \(eg $uuu/mysong.mp3\): ";
           print STDIN " ";
           chop($wavdest = <STDIN>);
           print "\nDelete .WAV file after encode? \(y/n\): ";
           print STDIN " ";  
           chop($dele = <STDIN>);
           print "\n Encoding $wavpath \n";
           system("lame -b $finalsamp $wavpath $wavdest");
             if ($dele =~ /\by\b/) {
		      system("rm $wavpath");
                  }
             else {
               }
           print "\n $wavpath encoded to mp3.\n\n";
           exit;
      }

menu();

sub menu {
   print "\n";
   print "1.\) Encode a single track\n";
   print "2.\) Encode the entire CD\n";
   print "3.\) Rip a track from CD to a .WAV file\n";
   print "4.\) Encode a .WAV file to MP3\n";
   print "5.\) Quit cd2mp3\n";
   print "\nEnter action number : ";
   print STDIN " ";
   $eors = <STDIN>;
   if ($eors =~ /\b1\b/) {
          print "\nOK, encoding a single track from CD\n";
          print "\n  Hit Enter to accept defaults\n\n";
          encode_track();
      }
   elsif ($eors =~ /\b2\b/) {
          print "\nOK, encoding entire CD\n";
          print "\n  Hit Enter to accept defaults\n\n";
          entire();
      }
   elsif ($eors =~ /\b3\b/) {
          print "\nOK, Ripping a Track to .WAV file\n";
          print "\n  Hit Enter to accept defaults\n";
          wav();
      }
   elsif ($eors =~ /\b4\b/) {
          print "\nOK, Encoding a .WAV file\n";
          print "\n  Hit Enter to accept defaults\n";
          w2m();
      }
   elsif ($eors =~ /\b5\b/) {
	  print "\nBye!\n\n";
      }
   else {
         print "\nBad choice, Try 1,2,3,4 or 5.\n";
         menu();
       }
}
