#!/bin/bash #============================================================= # File : drecord # Author : Dave Maley # Version : 1.08 # Created : 1/31/03 # Modified : 12/9/05 # Abstract : Used for transferring DAT's to .wav files # Notes : Requires arecord and sox, and optionally # : ameter (http://laugeo.free.fr/ameter.html) #============================================================= usage () { echo -e "\nusage: drecord -r rate{44|48|96} [-t time] [-resample {44|48}] [-m] filename.wav\n" echo -e "\t-r sampling rate of input stream" echo -e "\t-t time in minutes" echo -e "\t-resample resample to \$rate" echo -e "\t-b24 record in 24-bit" echo -e "\t-m use graphical level meter (ameter)" echo -e "\n\tNote: ameter must be installed for -m option" echo -e "\n\t(ex: drecord -r 44 track.wav)\n\n" exit 1 } resamp () { echo -e "\nRecording WAVE $outfile (Rate "$inrate"KHz) --> Resampling to "$outrate"KHz" echo -e "Recording for a duration of $mlen minutes\n" arecord -q -t wav -f $amode $meter -d $len | sox -t wav -r $inrateFull -c 2 - -t wav -r $outrateFull -c 2 $outfile resample } record () { echo -e "\nRecording WAVE $outfile (Rate "$inrate"KHz)" echo -e "Recording for a duration of $mlen minutes\n" arecord -q -t wav -f $amode $meter -d $len $outfile } record24 () { echo -e "\nRecording WAVE $outfile in 24-bit mode (Rate "$inrate"KHz)" echo -e "Recording for a duration of $mlen minutes\n" arecord -q -t wav -f S24_LE -c2 -r$inrateFull $meter -d $len $outfile } # Initialize variables len=10800 # default to 3 hours (10800 seconds) let mlen=$len/60 # 180 minutes inrate=0 # default input sample rate to 0 outrate=0 # default output sample rate to 0 amode=0 # default arecord input sample rate to 0 bitdepth=0 # default arecord bit depth to 0 resamp=0 # default to no resampling meter="" # default to no level meter # Parse command line while [ $# -gt 0 ]; do case $1 in -r) shift inrate=$1 ;; -t) if [ $2 -gt 0 2> /dev/null ]; then shift mlen=$1 let len=$mlen*60 else usage fi ;; -resample) shift outrate=$1 resamp=1 ;; -b24) shift bitdepth=1 ;; -m) meter="-D ameter" ;; -*help) usage ;; -*) usage ;; *) ;; esac outfile=$1 shift done # check $inrate if [ $inrate -eq 0 ]; then echo -e "\n\t***You must specify the sample rate of the input***\n" usage elif [ $inrate -eq 96 ] && [ $bitdepth = 0 ]; then echo -e "\n\t***96KHz only available in 24-bit mode***\n" exit 1 fi # check if outfile exists if [ -f $outfile ]; then echo -e "\n\t***File $outfile already exists ... quitting***\n" exit 1 fi # don't resample in 24-bit if [ $bitdepth -eq 1 ] && [ $resamp -eq 1 ]; then echo -e "\n\t***drecord doesn't support re-sampling 24-bit***\n" exit 1 fi # set arecord sample rate if [ $inrate -eq 48 ]; then amode=dat elif [ $inrate -eq 44 ]; then amode=cd fi # convert $inrate to Hz if [ $inrate -eq 48 ]; then inrateFull=48000 elif [ $inrate -eq 44 ]; then inrateFull=44100 elif [ $inrate -eq 96 ]; then inrateFull=96000 else usage fi # convert $outrate to Hz if [ $outrate -eq 48 ]; then outrateFull=48000 elif [ $outrate -eq 44 ]; then outrateFull=44100 elif [ $outrate -eq 0 ]; then outrateFull=0 else usage fi # record if [ $bitdepth -eq 1 ]; then record24 elif [ $resamp -eq 1 ]; then resamp elif [ $resamp -eq 0 ]; then record else usage fi # done recording - exit echo -e "\nFile $outfile has been recorded successfully." echo -e "Thanks for using drecord!\n\n" exit 0 # ChangeLog # * Fri Dec 9th 2005 Dave Maley (dmaley at nc.rr.com) v1.08 # - added 24-bit support # # * Wed Oct 6th 2004 Dave Maley (homerj at nc.rr.com) v1.07 # - force $inrate to be required # - changed most defaults to 0 # # * Tue Oct 5th 2004 Dave Maley (homerj at nc.rr.com) v1.06 # - changed inrate and resamp usage # # * Fri Oct 1 2004 Dave Maley (homerj at nc.rr.com) # - fixed bug in call to sox: added inrateFull and outrateFull # # * Tue Jul 6 2004 (homerj at nc.rr.com) v1.04 # - made ameter a command line option # - added check if $outfile already exists # - cleaned up echo formatting #