Update: For a better solution check out this newer post
I happen to enjoy listening to Glenn Beck. The problem is that I can’t receive his weekday shows where I live. Even if I could receive his weekday show over the air, I wouldn’t hear most of it because I am busy working all day.
Here’s a sample script:
# Use mplayer to capture the stream
# at $STREAM to the file $FILE
DATE=`date +%d-%b-%Y` # Save the date as DD-Mmm-YYYY
YEAR=`date +%Y` # Save just the year as YYYY
# Where you want the file saved. Leave off file extension
# The following file should be a playlist file such as .asf or .asx
# You can also create your own file with a URI and put it here
DURATION=3.1h # enough to catch the show, plus a bit
#DURATION=200s # a quick run, just for testing
# For the id3v2 Tags
ALBUM="104.7 WPGB-FM Pittsburgh"
TITLE="Glenn Beck Show - $DATE"
# Capture Stream
/usr/bin/mplayer -really-quiet -cache 500 \
-ao pcm:file="$FILE.wav" -vc dummy -vo null \
-playlist $STREAM &
# the & turns the capture into a background job
sleep $DURATION # wait for the show to be over
kill $! # kill the stream capture
# remove gaps and convert to mono
sox $FILE.wav -c 1 $FILE-silenced.wav \
silence 1 -0.9 2% -1 -0.9 2% ;
rm $FILE.wav ; #remove original capture
# Encode to .mp3, mono 32kHz 32kb/s, and tag the file
lame -a -m m --tt "$TITLE" --ta "$AUTHOR" \
--tl "$ALBUM" --ty "$YEAR" --vbr-new -V 9 \
--resample 32 $FILE-silenced.wav $FILE.mp3 ;
rm $FILE-silenced.wav # Remove the raw audio data file
Once all of the variables have been set, make this executable and make a cron job for it.
Here’s an example for starting at 6am every weekday:
0 6 * * 1-5 /home/shawn/bin/glenn_beck.sh >& /dev/null
- The basis for this script is the one found at this Linux Journal article.
- You need at least SoX version 12.17.9 for the silence filter to work properly.
- MPlayer should be fairly recent. Older versions have a different syntax for pcm (wav) audio output
- This solution still requires huge amounts of disk space (~500MB/hour). I am still experimenting with using named pipes (fifos) to do all of the file processing in RAM and only output the final encoded file to the disk.