radio_rip

audio stream recorder -- include real streams

My favorite podcasts still come from public non commercial radio stations.
I really like to enjoy the broadcasts in situations they fit. Spoken science and politics while I feet the dishwasher or doing produktion work in my workshop, good quality musik shows while I'm sitting at the computer.
This script in combination with cron feats my harddisk folders with remunerate content and let me call it in situations it fits well.
It' s a bash script, so it will bring its benefit to all the unix/linux-based operating systems.

While my version is designed for shedule automated recording of hole radio shows, Stefan has figured out some extensions for use in focus of manual start of recordings while you listen a radio stream. Perhaps his version fits more to your needs.
look at Stefans extensions

To use the script:




---


#!/bin/bash
# copyright Wulf Coulmann <scripts at gpl.coulmann dot de>

# GNU GPL
# http://www.gnu.org/licenses/gpl.html
#
# Download me here: http://gpl.coulmann.de/radio_rip

#set -x

# Config --------------------------------------------------

        TMP='/tmp/'     # location of the temporery fifo buffer
	RETRY=200       # how often we retry if we do'nt get a streaming port

# let's rock'n roll


case "$1" in
    -h|--help)

cat | less << 'EOD'
RADIO_RIP(1)            User Manuals                RADIO_RIP(1)




NAME
     radio_rip - dumps every audio stream you can listen with your mplayer
     installation (yes, it's a possibility to record real streams) and encode
     them to everything sox can manage.
     Ogg Vorbis, mp3 ...

SYNOPSIS
     radio_rip [ --help | RECORDING_TIME OUTPUT_FILE STREAM_URL ]

DESCRIPTION
     radio_rip connect via mplayer to a audio stream send the raw output
     to a named pipe. Sox reads from the named pipe and transform to a format
     you refer in OUTPUT_FILE by the last 3 characters.
     If there is no free streaming port available radio_rip retry that often you
     define in the config section of the radio_rip script. The default is 200.
     It's a god idea to use radio_rip in combination with cron or at and sometimes
     http://gpl.coulmann.de/day_of_month.html is very helpful.
     Of corse, you need a mplayer and a sox installation.

     RECORDING_TIME
         is the duration of the recording in minutes
     OUTPUT_FILE
         is the location of the output codec. The last 3 characters define the format
	 e.g. ~/favorite_radio_show.ogg will generate a ogg vorbis file
         please refer to sox (1)
     STREAM_URL
         is the url of any audio stream your mplayer installation can handle
         please refer to mplayer (1)


OPTIONS
     -h   print this help

EXAMPLES
     main program call
     radio_rip 55 ~/favorite_radio_show.ogg rtsp://stream01.rbb-online.de/broadcast/multikulti

     crontab - every sunday 9:04
     4 09 * * 7 radio_rip 55 ~/favorite_radio_show.ogg rtsp://stream01.rbb-online.de/broadcast/multikulti

     crontab and day_of_month - every second sunday of the month
     3 16 * * 7 day_of_month 2 "radio_rip 55 ~/favorite_radio_show.ogg rtsp://stream01.rbb-online.de/broadcast/multikulti"

     at for single recordings
     echo "radio_rip 55 ~/favorite_radio_show.ogg rtsp://stream01.rbb-online.de/broadcast/multikulti" | at 16:05


AUTHOR
     Wulf Coulmann <scripts at gpl.coulmann dot de>

SEE ALSO
     mplayer(1), sox(1), cron(8), at(1), http://gpl.coulmann.de/day_of_month.html

Linux                Last change: September 2006
EOD

		exit 0

	;;

    *)
        DAUER=$1
	ZIEL=$2
	URL=$3


        FIFO=$TMP`date +%s`_real_rip.wav
	mkfifo $FIFO
	# run mplayer in background
	CMD="/usr/bin/mplayer -playlist -really-quiet -vc null -vo null -ao pcm:file=$FIFO -cache 320 $URL"
        ${CMD} &
        MPLAYER=$!
        echo ${MPLAYER}
	# convert raw data to ogg
        #sox $FIFO -r 48k -e signed -b 16  -t vorbis $ZIEL&
        oggenc -q 6 -o ${ZIEL} ${FIFO} &

	# make sure we get a port of the streaming server, if not try to reconnect
	CHECK=0
	RECONNECT=0

        while  [ $CHECK -lt 1 ] && [ $RECONNECT -lt $RETRY ]
        do
	    sleep 1
            if [ ! -n "`ps -p $MPLAYER|grep $MPLAYER`" ] ; then
	         echo "reconnect $RECONNECT"
 	         #/usr/bin/mplayer -quiet -ao pcm:file=$FIFO -cache 32 $URL&
                 ${CMD} &
                 MPLAYER=$!
		 CHECK=0
	         RECONNECT=$(($RECONNECT + 1))
            fi

	    CHECK=$(($CHECK + 1))
	    #sleep 1
        done

        echo mplayer connected

        # wait for requested time
	sleep $(($DAUER * 60))

	# stop mplayer
	kill ${MPLAYER}
        sleep 10

	# remove fifo
	rm -rf $FIFO

	;;
esac


syntax highlighted by Code2HTML, v. 0.9.1