#!/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 = ; 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 = ); 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 = ); 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 = ); 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 = ); 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 = ); 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 = ); 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 = ); print "\nEnter destination for MP3 \(eg $uuu/mysong.mp3\): "; print STDIN " "; chop($wavdest = ); print "\nDelete .WAV file after encode? \(y/n\): "; print STDIN " "; chop($dele = ); 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 = ; 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(); } }